diff --git a/CHANGELOG.md b/CHANGELOG.md
index 46f2467..6195c9e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -93,6 +93,16 @@
   It can still be created with the `--legacy-packages-file` flag.
 * `dart pub outdated` now shows which of your dependencies are discontinued.
 
+## 2.17.2 - 2022-06-01
+
+This is a patch release that fixes:
+
+- a Dart VM compiler crash (issue [#100375][]).
+- code completion when writing method overrides (issue [#49086][]).
+
+[#100375]: https://github.com/flutter/flutter/issues/100375
+[#49086]: https://github.com/dart-lang/sdk/issues/49086
+
 ## 2.17.1 - 2022-05-18
 
 This is a patch release that fixes:
diff --git a/benchmarks/IsolateBaseOverhead/dart/IsolateBaseOverhead.dart b/benchmarks/IsolateBaseOverhead/dart/IsolateBaseOverhead.dart
new file mode 100644
index 0000000..c9b8d24
--- /dev/null
+++ b/benchmarks/IsolateBaseOverhead/dart/IsolateBaseOverhead.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate';
+
+const int count = 10000;
+
+// The benchmark will spawn a long chain of isolates, keeping all of them
+// alive until the last one which measures Rss at that point (i.e. when all
+// isolates are alive), thereby getting a good estimate of memory-overhead per
+// isolate.
+void main() async {
+  final onDone = ReceivePort();
+  final lastIsolatePort = ReceivePort();
+  final startRss = ProcessInfo.currentRss;
+  final startUs = DateTime.now().microsecondsSinceEpoch;
+  await Isolate.spawn(worker, WorkerInfo(count, lastIsolatePort.sendPort),
+      onExit: onDone.sendPort);
+  final result = await lastIsolatePort.first as List;
+  final lastIsolateRss = result[0] as int;
+  final lastIsolateUs = result[1] as int;
+  await onDone.first;
+  final doneUs = DateTime.now().microsecondsSinceEpoch;
+
+  final averageMemoryUsageInKB = (lastIsolateRss - startRss) / count / 1024;
+  final averageStartLatencyInUs = (lastIsolateUs - startUs) / count;
+  final averageFinishLatencyInUs = (doneUs - startUs) / count;
+
+  print('IsolateBaseOverhead.Rss(MemoryUse): $averageMemoryUsageInKB');
+  print(
+      'IsolateBaseOverhead.StartLatency(Latency): $averageStartLatencyInUs us.');
+  print(
+      'IsolateBaseOverhead.FinishLatency(Latency): $averageFinishLatencyInUs us.');
+}
+
+class WorkerInfo {
+  final int id;
+  final SendPort result;
+
+  WorkerInfo(this.id, this.result);
+}
+
+Future worker(WorkerInfo workerInfo) async {
+  if (workerInfo.id == 1) {
+    workerInfo.result
+        .send([ProcessInfo.currentRss, DateTime.now().microsecondsSinceEpoch]);
+    return;
+  }
+  final onExit = ReceivePort();
+  await Isolate.spawn(worker, WorkerInfo(workerInfo.id - 1, workerInfo.result),
+      onExit: onExit.sendPort);
+  await onExit.first;
+}
diff --git a/benchmarks/IsolateBaseOverhead/dart2/IsolateBaseOverhead.dart b/benchmarks/IsolateBaseOverhead/dart2/IsolateBaseOverhead.dart
new file mode 100644
index 0000000..c9b8d24
--- /dev/null
+++ b/benchmarks/IsolateBaseOverhead/dart2/IsolateBaseOverhead.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate';
+
+const int count = 10000;
+
+// The benchmark will spawn a long chain of isolates, keeping all of them
+// alive until the last one which measures Rss at that point (i.e. when all
+// isolates are alive), thereby getting a good estimate of memory-overhead per
+// isolate.
+void main() async {
+  final onDone = ReceivePort();
+  final lastIsolatePort = ReceivePort();
+  final startRss = ProcessInfo.currentRss;
+  final startUs = DateTime.now().microsecondsSinceEpoch;
+  await Isolate.spawn(worker, WorkerInfo(count, lastIsolatePort.sendPort),
+      onExit: onDone.sendPort);
+  final result = await lastIsolatePort.first as List;
+  final lastIsolateRss = result[0] as int;
+  final lastIsolateUs = result[1] as int;
+  await onDone.first;
+  final doneUs = DateTime.now().microsecondsSinceEpoch;
+
+  final averageMemoryUsageInKB = (lastIsolateRss - startRss) / count / 1024;
+  final averageStartLatencyInUs = (lastIsolateUs - startUs) / count;
+  final averageFinishLatencyInUs = (doneUs - startUs) / count;
+
+  print('IsolateBaseOverhead.Rss(MemoryUse): $averageMemoryUsageInKB');
+  print(
+      'IsolateBaseOverhead.StartLatency(Latency): $averageStartLatencyInUs us.');
+  print(
+      'IsolateBaseOverhead.FinishLatency(Latency): $averageFinishLatencyInUs us.');
+}
+
+class WorkerInfo {
+  final int id;
+  final SendPort result;
+
+  WorkerInfo(this.id, this.result);
+}
+
+Future worker(WorkerInfo workerInfo) async {
+  if (workerInfo.id == 1) {
+    workerInfo.result
+        .send([ProcessInfo.currentRss, DateTime.now().microsecondsSinceEpoch]);
+    return;
+  }
+  final onExit = ReceivePort();
+  await Isolate.spawn(worker, WorkerInfo(workerInfo.id - 1, workerInfo.result),
+      onExit: onExit.sendPort);
+  await onExit.first;
+}
diff --git a/pkg/.gitignore b/pkg/.gitignore
index b95fe80..46ccecf 100644
--- a/pkg/.gitignore
+++ b/pkg/.gitignore
@@ -10,4 +10,3 @@
 .dart_tool
 .idea/
 .packages
-analysis_server/language_model/
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index c2fa2c8..082f048 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -12,6 +12,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisOptions;
 import 'package:analysis_server/src/analysis_server_abstract.dart';
+import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/computer/computer_highlights.dart';
 import 'package:analysis_server/src/context_manager.dart';
@@ -326,6 +327,7 @@
     ResourceProvider baseResourceProvider,
     AnalysisServerOptions options,
     DartSdkManager sdkManager,
+    AnalyticsManager analyticsManager,
     CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder,
     InstrumentationService instrumentationService, {
     http.Client? httpClient,
@@ -339,6 +341,7 @@
           options,
           sdkManager,
           diagnosticServer,
+          analyticsManager,
           crashReportingAttachmentsBuilder,
           baseResourceProvider,
           instrumentationService,
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 45f1ca8..05bdf23 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -7,7 +7,6 @@
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analytics/analytics_manager.dart';
-import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/collections.dart';
 import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/domains/completion/available_suggestions.dart';
@@ -156,6 +155,7 @@
     this.options,
     this.sdkManager,
     this.diagnosticServer,
+    this.analyticsManager,
     this.crashReportingAttachmentsBuilder,
     ResourceProvider baseResourceProvider,
     this.instrumentationService,
@@ -164,8 +164,7 @@
     this.notificationManager, {
     this.requestStatistics,
     bool enableBazelWatcher = false,
-  })  : analyticsManager = NoopAnalyticsManager(),
-        resourceProvider = OverlayResourceProvider(baseResourceProvider),
+  })  : resourceProvider = OverlayResourceProvider(baseResourceProvider),
         pubApi = PubApi(instrumentationService, httpClient,
             Platform.environment['PUB_HOSTED_URL']) {
     // We can only spawn processes (eg. to run pub commands) when backed by
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 7164122..28a2360 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analysis_server_abstract.dart';
+import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/computer/computer_closingLabels.dart';
 import 'package:analysis_server/src/computer/computer_outline.dart';
 import 'package:analysis_server/src/context_manager.dart';
@@ -126,6 +127,7 @@
     ResourceProvider baseResourceProvider,
     AnalysisServerOptions options,
     DartSdkManager sdkManager,
+    AnalyticsManager analyticsManager,
     CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder,
     InstrumentationService instrumentationService, {
     http.Client? httpClient,
@@ -137,6 +139,7 @@
           options,
           sdkManager,
           diagnosticServer,
+          analyticsManager,
           crashReportingAttachmentsBuilder,
           baseResourceProvider,
           instrumentationService,
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
index 34ca0ab..45e8ba7 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/lsp/channel/lsp_channel.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
@@ -29,13 +30,19 @@
 
   /// The function used to create a new SDK using the default SDK.
   final DartSdkManager sdkManager;
+
   @override
   final DiagnosticServer diagnosticServer;
+
+  /// The object through which analytics are to be sent.
+  final AnalyticsManager analyticsManager;
+
   final InstrumentationService instrumentationService;
 
   LspSocketServer(
     this.analysisServerOptions,
     this.diagnosticServer,
+    this.analyticsManager,
     this.sdkManager,
     this.instrumentationService,
   );
@@ -71,6 +78,7 @@
       resourceProvider,
       analysisServerOptions,
       sdkManager,
+      analyticsManager,
       CrashReportingAttachmentsBuilder.empty,
       instrumentationService,
       diagnosticServer: diagnosticServer,
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 5f05388..7eca97f 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -10,6 +10,8 @@
 import 'package:analysis_server/protocol/protocol_constants.dart'
     show PROTOCOL_VERSION;
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/analytics_manager.dart';
+import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/lsp/lsp_socket_server.dart';
 import 'package:analysis_server/src/server/crash_reporting.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
@@ -140,6 +142,7 @@
     SendPort? sendPort,
     bool defaultToLsp = false,
   }) {
+    var sessionStartTime = DateTime.now();
     var parser = createArgParser(defaultToLsp: defaultToLsp);
     var results = parser.parse(arguments);
 
@@ -147,7 +150,6 @@
     analysisServerOptions.newAnalysisDriverLog =
         (results[ANALYSIS_DRIVER_LOG] ?? results[ANALYSIS_DRIVER_LOG_ALIAS])
             as String?;
-    analysisServerOptions.clientId = results[CLIENT_ID] as String?;
     if (results.wasParsed(USE_LSP)) {
       analysisServerOptions.useLanguageServerProtocol =
           results[USE_LSP] as bool;
@@ -157,11 +159,11 @@
     }
     // For clients that don't supply their own identifier, use a default based
     // on whether the server will run in LSP mode or not.
-    analysisServerOptions.clientId ??=
-        analysisServerOptions.useLanguageServerProtocol
+    var clientId = (results[CLIENT_ID] as String?) ??
+        (analysisServerOptions.useLanguageServerProtocol
             ? 'unknown.client.lsp'
-            : 'unknown.client.classic';
-
+            : 'unknown.client.classic');
+    analysisServerOptions.clientId = clientId;
     analysisServerOptions.clientVersion = results[CLIENT_VERSION] as String?;
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER] as String?;
     analysisServerOptions.packagesFile = results[PACKAGES_FILE] as String?;
@@ -194,6 +196,7 @@
     if (analysisServerOptions.clientVersion != null) {
       analytics.setSessionValue('cd1', analysisServerOptions.clientVersion);
     }
+    var analyticsManager = NoopAnalyticsManager();
 
     bool shouldSendCallback() {
       // Check sdkConfig to optionally force reporting on.
@@ -241,10 +244,19 @@
     final dartSdkManager = DartSdkManager(defaultSdkPath);
 
     // TODO(brianwilkerson) It would be nice to avoid creating an SDK that
-    // cannot be re-used, but the SDK is needed to create a package map provider
+    // can't be re-used, but the SDK is needed to create a package map provider
     // in the case where we need to run `pub` in order to get the package map.
     var defaultSdk = _createDefaultSdk(defaultSdkPath);
     //
+    // Record the start of the session.
+    //
+    analyticsManager.startUp(
+        time: sessionStartTime,
+        arguments: _getArgumentsForAnalytics(results),
+        clientId: clientId,
+        clientVersion: analysisServerOptions.clientVersion,
+        sdkVersion: defaultSdk.sdkVersion);
+    //
     // Initialize the instrumentation service.
     //
     var logFilePath = (results[PROTOCOL_TRAFFIC_LOG] ??
@@ -296,14 +308,21 @@
         throw UnimplementedError(
             'Isolate usage not implemented for LspAnalysisServer');
       }
-      startLspServer(results, analysisServerOptions, dartSdkManager,
-          instrumentationService, diagnosticServerPort, errorNotifier);
+      startLspServer(
+          results,
+          analysisServerOptions,
+          dartSdkManager,
+          analyticsManager,
+          instrumentationService,
+          diagnosticServerPort,
+          errorNotifier);
     } else {
       startAnalysisServer(
           results,
           analysisServerOptions,
           parser,
           dartSdkManager,
+          analyticsManager,
           crashReportingAttachmentsBuilder,
           instrumentationService,
           RequestStatisticsHelper(),
@@ -319,6 +338,7 @@
     AnalysisServerOptions analysisServerOptions,
     ArgParser parser,
     DartSdkManager dartSdkManager,
+    AnalyticsManager analyticsManager,
     CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder,
     InstrumentationService instrumentationService,
     RequestStatisticsHelper requestStatistics,
@@ -358,6 +378,7 @@
         instrumentationService,
         requestStatistics,
         diagnosticServer,
+        analyticsManager,
         detachableFileSystemManager);
     httpServer = HttpAnalysisServer(socketServer);
 
@@ -439,6 +460,7 @@
     ArgResults args,
     AnalysisServerOptions analysisServerOptions,
     DartSdkManager dartSdkManager,
+    AnalyticsManager analyticsManager,
     InstrumentationService instrumentationService,
     int? diagnosticServerPort,
     ErrorNotifier errorNotifier,
@@ -454,6 +476,7 @@
     final socketServer = LspSocketServer(
       analysisServerOptions,
       diagnosticServer,
+      analyticsManager,
       dartSdkManager,
       instrumentationService,
     );
@@ -518,6 +541,52 @@
     return '$millisecondsSinceEpoch$random';
   }
 
+  /// Return a list of the known command-line arguments that were parsed when
+  /// creating the given [results]. We return only the names of the arguments,
+  /// not the values of the arguments, in order to prevent the collection of any
+  /// PII.
+  List<String> _getArgumentsForAnalytics(ArgResults results) {
+    // The arguments that are literal strings are deprecated and no longer read
+    // from, but we still want to know if clients are using them.
+    var knownArguments = [
+      ANALYTICS_FLAG,
+      CACHE_FOLDER,
+      CLIENT_ID,
+      CLIENT_VERSION,
+      'completion-model',
+      'dartpad',
+      DART_SDK,
+      DART_SDK_ALIAS,
+      DIAGNOSTIC_PORT,
+      DIAGNOSTIC_PORT_ALIAS,
+      DISABLE_SERVER_EXCEPTION_HANDLING,
+      DISABLE_SERVER_FEATURE_COMPLETION,
+      DISABLE_SERVER_FEATURE_SEARCH,
+      'enable-completion-model',
+      'enable-experiment',
+      'enable-instrumentation',
+      'file-read-mode',
+      HELP_OPTION,
+      'ignore-unrecognized-flags',
+      INTERNAL_PRINT_TO_CONSOLE,
+      PACKAGES_FILE,
+      'preview-dart-2',
+      PROTOCOL_TRAFFIC_LOG,
+      PROTOCOL_TRAFFIC_LOG_ALIAS,
+      REPORT_PROTOCOL_VERSION,
+      SERVER_PROTOCOL,
+      SUPPRESS_ANALYTICS_FLAG,
+      TRAIN_USING,
+      'useAnalysisHighlight2',
+      USE_LSP,
+      'use-new-relevance',
+      'use-fasta-parser',
+    ];
+    return knownArguments
+        .where((argument) => results.wasParsed(argument))
+        .toList();
+  }
+
   String _getSdkPath(ArgResults args) {
     String? sdkPath;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_curly_braces.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_curly_braces.dart
index ac592ae..41a495d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_curly_braces.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_curly_braces.dart
@@ -13,10 +13,20 @@
 
 class UseCurlyBraces extends CorrectionProducer {
   @override
-  AssistKind get assistKind => DartAssistKind.USE_CURLY_BRACES;
+  bool canBeAppliedInBulk;
+
+  UseCurlyBraces() : canBeAppliedInBulk = true;
+
+  /// Create an instance that is prevented from being applied automatically in
+  /// bulk.
+  ///
+  /// This is used in places where "Use Curly Braces" is a valid manual fix, but
+  /// not clearly the only/correct fix to apply automatically, such as the
+  /// `always_put_control_body_on_new_line` lint.
+  UseCurlyBraces.nonBulk() : canBeAppliedInBulk = false;
 
   @override
-  bool get canBeAppliedInBulk => true;
+  AssistKind get assistKind => DartAssistKind.USE_CURLY_BRACES;
 
   @override
   bool get canBeAppliedToFile => true;
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index 5ceef0d..18b6ea6 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -8,25 +8,25 @@
 #   fixes.
 # - 'hasFix', if the diagnostic has one or more fixes.
 # - 'noFix', if no fix seems appropriate for the diagnostic. There should be a
-#   second key named `reason` whose value is text explaining why there is no
+#   second key named `notes` whose value is text explaining why there is no
 #   appropriate fix.
-# - 'needsFix', if the diagnostic needs a fix, with a possible issue link. If an
-#   issue has been opened, there should be a second key named `issue` whose
-#   value is the URL of the issue.
+# - 'needsFix', if the diagnostic needs a fix. If an issue has been opened,
+#   there should be a second key named `issue` whose value is the URL of the
+#   issue.
 #
 # The other keys in the second-level map are all optional, and include
 # - 'since', whose value is the version number of the SDK in which the
 #   diagnostic was added.
-# - 'notes', whose value is text, typically describing why we think a fix for
-#   the diagnostic is not appropriate.
+# - 'notes', whose value is text, typically describing what fix should be
+#   created or why we think a fix for the diagnostic is not appropriate.
 # - 'issue', whose value is a list of the URLs of GitHub issues for the fixes
 #   that should be added. Ideally every issue marked as 'needFix' would have an
 #   issue created for it.
 #
 # Stats:
-# - 759 "needsEvaluation"
-# -  32 "needsFix"
-# - 265 "hasFix"
+# - 760 "needsEvaluation"
+# -  28 "needsFix"
+# - 273 "hasFix"
 # -  41 "noFix"
 
 AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
@@ -36,15 +36,24 @@
 AnalysisOptionsErrorCode.PARSE_ERROR:
   status: noFix
   notes: |-
-    There isn't enough information to be able to provide a fix.
+    Because of the way the YAML parser works, there isn't enough information to
+    be able to provide a fix.
 AnalysisOptionsHintCode.PREVIEW_DART_2_SETTING_DEPRECATED:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Provide a fix to remove the deprecated setting.
 AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Provide a fix to remove the deprecated setting.
 AnalysisOptionsHintCode.SUPER_MIXINS_SETTING_DEPRECATED:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Provide a fix to remove the deprecated setting.
 AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Provide a fix to remove the deprecated setting.
 AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND:
   status: noFix
   notes: |-
@@ -52,7 +61,8 @@
     that could be included.
     
     We could potentially have a fix to create the referenced file that currently
-    doesn't exist.
+    doesn't exist, but that would only be useful if the missing file is in the
+    same repository as the including file.
 AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING:
   status: noFix
   notes: |-
@@ -65,7 +75,9 @@
 AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT:
   status: needsEvaluation
 AnalysisOptionsWarningCode.SPEC_MODE_REMOVED:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Provide a fix to remove the deprecated setting.
 AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE:
   status: needsEvaluation
 AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
@@ -77,27 +89,56 @@
 AnalysisOptionsWarningCode.UNSUPPORTED_VALUE:
   status: needsEvaluation
 CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    1. Remove the initializer.
+    2. Remove the `abstract` keyword.
 CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    1. Remove the initializer.
+    2. Remove the `abstract` keyword.
 CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    The only fix we could automate is to remove the call to super, which is
+    unlikely to be the right solution.
 CompileTimeErrorCode.AMBIGUOUS_EXPORT:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    For each exported name, add a fix to hide the name.
 CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    For each extension, add a fix to add an extension override.
 CompileTimeErrorCode.AMBIGUOUS_IMPORT:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    1. For each imported name, add a fix to hide the name.
+    2. For each imported name, add a fix to add a prefix. We wouldn't be able to
+       add the prefix everywhere, but could add it wherever the name was already
+       unambiguous.
 CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    We could potentially have a pair of fixes: one to remove the elements that
+    force it to be a set and one to remove the map related elements. I doubt
+    that either is the right solution.
 CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    We don't have enough information to add type arguments for the user.
 CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE:
   status: hasFix
 CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Remove the assert.
 CompileTimeErrorCode.ASSIGNMENT_TO_CONST:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Making the field non-const doesn't seem to be a good choice, but it is a
+    possibility.
 CompileTimeErrorCode.ASSIGNMENT_TO_FINAL:
   status: hasFix
 CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL:
@@ -1487,7 +1528,7 @@
 LintCode.always_declare_return_types:
   status: hasFix
 LintCode.always_put_control_body_on_new_line:
-  status: needsEvaluation
+  status: hasFix
 LintCode.always_put_required_named_parameters_first:
   status: needsEvaluation
 LintCode.always_require_non_null_named_parameters:
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 69727ef..cc2890e 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -353,6 +353,9 @@
     LintNames.always_declare_return_types: [
       AddReturnType.new,
     ],
+    LintNames.always_put_control_body_on_new_line: [
+      UseCurlyBraces.nonBulk,
+    ],
     LintNames.always_require_non_null_named_parameters: [
       AddRequired.new,
     ],
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index 996a7c2..2ca0e71 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -6,6 +6,8 @@
 class LintNames {
   static const String always_declare_return_types =
       'always_declare_return_types';
+  static const String always_put_control_body_on_new_line =
+      'always_put_control_body_on_new_line';
   static const String always_require_non_null_named_parameters =
       'always_require_non_null_named_parameters';
   static const String always_specify_types = 'always_specify_types';
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index 8e938ef..e30600c 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analysis_server_abstract.dart';
+import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
@@ -35,10 +36,17 @@
   final DartSdkManager sdkManager;
 
   final CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder;
+
   final InstrumentationService instrumentationService;
+
   final RequestStatisticsHelper? requestStatistics;
+
   @override
   final DiagnosticServer? diagnosticServer;
+
+  /// The object through which analytics are to be sent.
+  final AnalyticsManager analyticsManager;
+
   final DetachableFileSystemManager? detachableFileSystemManager;
 
   /// The analysis server that was created when a client established a
@@ -53,6 +61,7 @@
       this.instrumentationService,
       this.requestStatistics,
       this.diagnosticServer,
+      this.analyticsManager,
       this.detachableFileSystemManager);
 
   /// Create an analysis server which will communicate with the client using the
@@ -76,6 +85,7 @@
       resourceProvider,
       analysisServerOptions,
       sdkManager,
+      analyticsManager,
       crashReportingAttachmentsBuilder,
       instrumentationService,
       requestStatistics: requestStatistics,
diff --git a/pkg/analysis_server/native/cJSON b/pkg/analysis_server/native/cJSON
deleted file mode 160000
index b45f48e..0000000
--- a/pkg/analysis_server/native/cJSON
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b45f48e600671feade0b6bd65d1c69de7899f2be
diff --git a/pkg/analysis_server/test/analysis_server_base.dart b/pkg/analysis_server/test/analysis_server_base.dart
index 9406033f..411aa3f 100644
--- a/pkg/analysis_server/test/analysis_server_base.dart
+++ b/pkg/analysis_server/test/analysis_server_base.dart
@@ -5,6 +5,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/utilities/mocks.dart';
@@ -173,6 +174,7 @@
       resourceProvider,
       AnalysisServerOptions(),
       DartSdkManager(sdkRoot.path),
+      NoopAnalyticsManager(),
       CrashReportingAttachmentsBuilder.empty,
       InstrumentationService.NULL_SERVICE,
     );
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 9a57c30..d3abf86 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/utilities/mocks.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -98,6 +99,7 @@
         resourceProvider,
         AnalysisServerOptions(),
         DartSdkManager(sdkRoot.path),
+        NoopAnalyticsManager(),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE);
   }
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index ee7a836..3bcfbc1 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -6,6 +6,7 @@
 
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/json_parsing.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
@@ -196,6 +197,7 @@
         resourceProvider,
         serverOptions,
         DartSdkManager(sdkRoot.path),
+        NoopAnalyticsManager(),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE,
         httpClient: httpClient,
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index 2e3ae08..cc4f39a 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/analytics/noop_analytics_manager.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/server/error_notifier.dart';
 import 'package:analysis_server/src/socket_server.dart';
@@ -71,6 +72,7 @@
         errorNotifier,
         null,
         null,
+        NoopAnalyticsManager(),
         null);
 
     server.createAnalysisServer(channel);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
index 7a9aca3..da800f0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
@@ -118,27 +118,10 @@
 
 class VerificationTests {
   static void defineTests() {
-    verify_fixInFileFixesHaveBulkFixTests();
     verify_fixInFileFixKindsHaveMultiFixes();
     verify_fixInFileFixesHaveUniqueBulkFixes();
   }
 
-  static void verify_fixInFileFixesHaveBulkFixTests() {
-    group('VerificationTests | fixInFileFixesHaveBulkFixTests |', () {
-      for (var fixEntry in FixProcessor.lintProducerMap.entries) {
-        var errorCode = fixEntry.key;
-        for (var generator in fixEntry.value) {
-          var producer = generator();
-          if (producer.canBeAppliedToFile) {
-            test('$errorCode |', () {
-              expect(producer.canBeAppliedInBulk, isTrue);
-            });
-          }
-        }
-      }
-    });
-  }
-
   static void verify_fixInFileFixesHaveUniqueBulkFixes() {
     group('VerificationTests | fixInFileFixesHaveUniqueBulkFixes | lint |', () {
       for (var fixEntry in FixProcessor.lintProducerMap.entries) {
@@ -152,7 +135,6 @@
               if (multiFixKind != null) {
                 expect(multiFixKind, isNot(equals(fixKind)));
               }
-              expect(producer.canBeAppliedInBulk, isTrue);
             });
           }
         }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_curly_braces_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_curly_braces_test.dart
index 96931b9..f1e7891 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_curly_braces_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_curly_braces_test.dart
@@ -2,7 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'fix_processor.dart';
@@ -10,10 +13,87 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseCurlyBracesTest);
+    defineReflectiveTests(ControlBodyOnNewLineBulkTest);
+    defineReflectiveTests(ControlBodyOnNewLineInFileTest);
+    defineReflectiveTests(ControlBodyOnNewLineLintTest);
   });
 }
 
 @reflectiveTest
+class ControlBodyOnNewLineBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.always_put_control_body_on_new_line;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+f() {
+  while (true) print('');
+}
+f2() {
+  while (true) print(2);
+}
+''');
+    // This fix is only provided for explicit manual invocation for this lint,
+    // not for bulk fixing.
+    await assertNoFix();
+  }
+}
+
+@reflectiveTest
+class ControlBodyOnNewLineInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(
+        lints: [LintNames.always_put_control_body_on_new_line]);
+    await resolveTestCode(r'''
+f() {
+  while (true) print('');
+}
+f2() {
+  while (true) print(2);
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+f() {
+  while (true) {
+    print('');
+  }
+}
+f2() {
+  while (true) {
+    print(2);
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ControlBodyOnNewLineLintTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_CURLY_BRACES;
+
+  @override
+  String get lintCode => LintNames.always_put_control_body_on_new_line;
+
+  Future<void> test_field() async {
+    await resolveTestCode('''
+f() {
+  while (true) print('');
+}
+''');
+    await assertHasFix('''
+f() {
+  while (true) {
+    print('');
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
 class UseCurlyBracesTest extends BulkFixProcessorTest {
   @override
   String get lintCode => LintNames.curly_braces_in_flow_control_structures;
diff --git a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
index d3f0b35..b43d932 100644
--- a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
+++ b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
@@ -4,17 +4,14 @@
 
 import 'dart:typed_data';
 
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
-import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary2/bundle_writer.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
 import 'package:yaml/yaml.dart';
 
@@ -65,33 +62,10 @@
   );
   scheduler.start();
 
-  final analysisSession = analysisDriver.currentSession;
-  final elementFactory = analysisDriver.libraryContext.elementFactory;
-
-  final bundleWriter = BundleWriter(
-    elementFactory.dynamicRef,
-  );
-  final packageBuilder = PackageBundleBuilder();
-
-  for (final uriStr in sdk.uris) {
-    final libraryResult = await analysisSession.getLibraryByUri(uriStr);
-    libraryResult as LibraryElementResult;
-    final libraryElement = libraryResult.element as LibraryElementImpl;
-    bundleWriter.writeLibraryElement(libraryElement);
-
-    packageBuilder.addLibrary(
-      uriStr,
-      libraryElement.units.map((e) {
-        return e.source.uri.toString();
-      }).toList(),
-    );
-  }
-
-  final writeWriterResult = bundleWriter.finish();
-
-  return packageBuilder.finish(
-    resolutionBytes: writeWriterResult.resolutionBytes,
-    sdk: PackageBundleSdk(
+  final libraryUriList = sdk.uris.map(Uri.parse).toList();
+  return await analysisDriver.buildPackageBundle(
+    uriList: libraryUriList,
+    packageBundleSdk: PackageBundleSdk(
       languageVersionMajor: sdk.languageVersion.major,
       languageVersionMinor: sdk.languageVersion.minor,
       allowedExperimentsJson: sdk.allowedExperimentsJson,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index a376df8..2cf4ffd 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -43,7 +43,9 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
+import 'package:analyzer/src/summary2/bundle_writer.dart';
 import 'package:analyzer/src/summary2/macro.dart';
+import 'package:analyzer/src/summary2/package_bundle_format.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:meta/meta.dart';
@@ -482,6 +484,45 @@
     }
   }
 
+  /// Builds elements for library files from [uriList], and packs them into
+  /// a bundle suitable for [PackageBundleReader].
+  ///
+  /// Disconnected non-library files are ignored.
+  Future<Uint8List> buildPackageBundle({
+    required List<Uri> uriList,
+    PackageBundleSdk? packageBundleSdk,
+  }) async {
+    final elementFactory = libraryContext.elementFactory;
+
+    final bundleWriter = BundleWriter(
+      elementFactory.dynamicRef,
+    );
+    final packageBundleBuilder = PackageBundleBuilder();
+
+    for (final uri in uriList) {
+      final uriStr = uri.toString();
+      final libraryResult = await getLibraryByUri(uriStr);
+      if (libraryResult is LibraryElementResult) {
+        final libraryElement = libraryResult.element as LibraryElementImpl;
+        bundleWriter.writeLibraryElement(libraryElement);
+
+        packageBundleBuilder.addLibrary(
+          uriStr,
+          libraryElement.units.map((e) {
+            return e.source.uri.toString();
+          }).toList(),
+        );
+      }
+    }
+
+    final writeWriterResult = bundleWriter.finish();
+
+    return packageBundleBuilder.finish(
+      resolutionBytes: writeWriterResult.resolutionBytes,
+      sdk: packageBundleSdk,
+    );
+  }
+
   /// The file with the given [path] might have changed - updated, added or
   /// removed. Or not, we don't know. Or it might have, but then changed back.
   ///
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
index db31ce6..98d9538 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -15,10 +15,10 @@
   static const FfiCode ABI_SPECIFIC_INTEGER_INVALID = FfiCode(
     'ABI_SPECIFIC_INTEGER_INVALID',
     "Classes extending 'AbiSpecificInteger' must have exactly one const "
-        "constructor, no other members, and no type arguments.",
+        "constructor, no other members, and no type parameters.",
     correctionMessage:
-        "Try removing all type arguments, removing all members, and adding one "
-        "const constructor.",
+        "Try removing all type parameters, removing all members, and adding "
+        "one const constructor.",
   );
 
   ///  No parameters.
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
index 81120a1..cfccb2c 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
@@ -181,7 +181,7 @@
     hasPublishedDocs: true,
   );
 
-  ///  Hint to use the ~/ operator.
+  ///  No parameters.
   static const HintCode DIVISION_OPTIMIZATION = HintCode(
     'DIVISION_OPTIMIZATION',
     "The operator x ~/ y is more efficient than (x / y).toInt().",
@@ -270,7 +270,7 @@
     'FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE',
     "A file outside the 'lib' directory shouldn't reference a file inside the "
         "'lib' directory using a relative path.",
-    correctionMessage: "Try using a package: URI instead.",
+    correctionMessage: "Try using a 'package:' URI instead.",
   );
 
   ///  No parameters.
@@ -542,7 +542,7 @@
     'INVALID_NON_VIRTUAL_ANNOTATION',
     "The annotation '@nonVirtual' can only be applied to a concrete instance "
         "member.",
-    correctionMessage: "Try removing @nonVirtual.",
+    correctionMessage: "Try removing '@nonVirtual'.",
   );
 
   ///  This hint is generated anywhere where an instance member annotated with
@@ -600,7 +600,7 @@
   static const HintCode INVALID_SEALED_ANNOTATION = HintCode(
     'INVALID_SEALED_ANNOTATION',
     "The annotation '@sealed' can only be applied to classes.",
-    correctionMessage: "Remove @sealed.",
+    correctionMessage: "Try removing the '@sealed' annotation.",
   );
 
   ///  Parameters:
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 0dc4de5..7410c77 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -2640,7 +2640,7 @@
   ///  0: the name of the class that appears in both "extends" and "with" clauses
   static const CompileTimeErrorCode MIXINS_SUPER_CLASS = CompileTimeErrorCode(
     'IMPLEMENTS_SUPER_CLASS',
-    "'{0}' can't be used in both 'extends' and 'with' clauses.",
+    "'{0}' can't be used in both the 'extends' and 'with' clauses.",
     correctionMessage: "Try removing one of the occurrences.",
     hasPublishedDocs: true,
     uniqueName: 'MIXINS_SUPER_CLASS',
@@ -2760,7 +2760,7 @@
   static const CompileTimeErrorCode
       MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS = CompileTimeErrorCode(
     'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
-    "Deferred classes can't be used as super-class constraints.",
+    "Deferred classes can't be used as superclass constraints.",
     correctionMessage: "Try changing the import to not be deferred.",
   );
 
diff --git a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
index 41ecb65..3cc1495 100644
--- a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
@@ -210,6 +210,7 @@
           argument: index,
           parameter: parameters[0],
           promoteParameterToNullable: false,
+          whyNotPromoted: whyNotPromoted,
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index a860d87..ba4d938 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -4518,6 +4518,19 @@
         return;
       }
     } else if (targetType == null) {
+      if (target is Identifier) {
+        final targetElement = target.staticElement;
+        if (targetElement is ClassElement ||
+            targetElement is ExtensionElement ||
+            targetElement is TypeAliasElement) {
+          errorReporter.reportErrorForOffset(
+            errorCode,
+            operator.offset,
+            endToken.end - operator.offset,
+            arguments,
+          );
+        }
+      }
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index fcbf6a9..34f8996 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -3689,88 +3689,3 @@
   @override
   String toString() => convert.json.encode(toJson());
 }
-
-class PackageBundleBuilder extends Object
-    with _PackageBundleMixin
-    implements idl.PackageBundle {
-  int? _fake;
-
-  @override
-  int get fake => _fake ??= 0;
-
-  /// The version 2 of the summary.
-  set fake(int value) {
-    assert(value >= 0);
-    this._fake = value;
-  }
-
-  PackageBundleBuilder({int? fake}) : _fake = fake;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {}
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    signatureSink.addInt(this._fake ?? 0);
-  }
-
-  typed_data.Uint8List toBuffer() {
-    fb.Builder fbBuilder = fb.Builder();
-    return fbBuilder.finish(finish(fbBuilder), "PBdl");
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fbBuilder.startTable();
-    fbBuilder.addUint32(0, _fake, 0);
-    return fbBuilder.endTable();
-  }
-}
-
-idl.PackageBundle readPackageBundle(List<int> buffer) {
-  fb.BufferContext rootRef = fb.BufferContext.fromBytes(buffer);
-  return const _PackageBundleReader().read(rootRef, 0);
-}
-
-class _PackageBundleReader extends fb.TableReader<_PackageBundleImpl> {
-  const _PackageBundleReader();
-
-  @override
-  _PackageBundleImpl createObject(fb.BufferContext bc, int offset) =>
-      _PackageBundleImpl(bc, offset);
-}
-
-class _PackageBundleImpl extends Object
-    with _PackageBundleMixin
-    implements idl.PackageBundle {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _PackageBundleImpl(this._bc, this._bcOffset);
-
-  int? _fake;
-
-  @override
-  int get fake {
-    return _fake ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 0, 0);
-  }
-}
-
-abstract class _PackageBundleMixin implements idl.PackageBundle {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> result = <String, Object>{};
-    var local_fake = fake;
-    if (local_fake != 0) {
-      result["fake"] = local_fake;
-    }
-    return result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "fake": fake,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 67e3358..5d58b75 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -436,12 +436,6 @@
   templateValues:[string] (id: 1);
 }
 
-/// Summary information about a package.
-table PackageBundle {
-  /// The version 2 of the summary.
-  fake:uint (id: 0);
-}
+root_type AnalysisDriverResolvedUnit;
 
-root_type PackageBundle;
-
-file_identifier "PBdl";
+file_identifier "ADRU";
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index adb8e7d..b5f6b8f 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -566,14 +566,3 @@
   /// The containing unit itself.
   unit
 }
-
-/// Summary information about a package.
-@TopLevel('PBdl')
-abstract class PackageBundle extends base.SummaryClass {
-  factory PackageBundle.fromBuffer(List<int> buffer) =>
-      generated.readPackageBundle(buffer);
-
-  /// The version 2 of the summary.
-  @Id(0)
-  int get fake;
-}
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 29af7d3..da702a3 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -814,10 +814,14 @@
   static const androidArm = _androidArm;
   static const androidArm64 = _androidArm64;
   static const androidIA32 = _androidIA32;
+  static const linuxX64 = _linuxX64;
+  static const macosX64 = _macosX64;
 
   static const _androidArm = Abi._(_Architecture.arm, _OS.android);
   static const _androidArm64 = Abi._(_Architecture.arm64, _OS.android);
   static const _androidIA32 = Abi._(_Architecture.ia32, _OS.android);
+  static const _linuxX64 = Abi._(_Architecture.x64, _OS.linux);
+  static const _macosX64 = Abi._(_Architecture.x64, _OS.macos);
 
   final _OS _os;
 
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 5f260ff..16b3fff 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -5668,8 +5668,9 @@
     documentation: |-
       #### Description
 
-      The analyzer produces this diagnostic when one class is listed in both the
-      `extends` and `implements` clauses of another class.
+      The analyzer produces this diagnostic when a class is listed in the
+      `extends` clause of a class declaration and also in either the
+      `implements` or `with` clause of the same declaration.
 
       #### Example
 
@@ -5682,6 +5683,15 @@
       class B extends A implements [!A!] {}
       ```
 
+      The following code produces this diagnostic because the class `A` is used
+      in both the `extends` and `with` clauses for the class `B`:
+  
+      ```dart
+      class A {}
+  
+      class B extends A with [!A!] {}
+      ```
+
       #### Common fixes
 
       If you want to inherit the implementation from the class, then remove the
@@ -8306,7 +8316,7 @@
       ```
   MIXINS_SUPER_CLASS:
     sharedName: IMPLEMENTS_SUPER_CLASS
-    problemMessage: "'{0}' can't be used in both 'extends' and 'with' clauses."
+    problemMessage: "'{0}' can't be used in both the 'extends' and 'with' clauses."
     correctionMessage: Try removing one of the occurrences.
     hasPublishedDocs: true
     comment: |-
@@ -8705,9 +8715,43 @@
       class C {}
       ```
   MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
-    problemMessage: "Deferred classes can't be used as super-class constraints."
+    problemMessage: "Deferred classes can't be used as superclass constraints."
     correctionMessage: Try changing the import to not be deferred.
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a superclass constraint of a
+      mixin is imported from a deferred library.
+
+      #### Example
+
+      The following code produces this diagnostic because the superclass
+      constraint of `math.Random` is imported from a deferred library:
+
+      ```dart
+      import 'dart:async' deferred as async;
+
+      mixin M<T> on [!async.Stream<T>!] {}
+      ```
+
+      #### Common fixes
+
+      If the import doesn't need to be deferred, then remove the `deferred`
+      keyword:
+
+      ```dart
+      import 'dart:async' as async;
+
+      mixin M<T> on async.Stream<T> {}
+      ```
+
+      If the import does need to be deferred, then remove the superclass
+      constraint:
+
+      ```dart
+      mixin M<T> {}
+      ```
   MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
     problemMessage: Only classes and mixins can be used as superclass constraints.
     hasPublishedDocs: true
@@ -15595,21 +15639,216 @@
       ```
 FfiCode:
   ABI_SPECIFIC_INTEGER_INVALID:
-    problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type arguments."
-    correctionMessage: Try removing all type arguments, removing all members, and adding one const constructor.
+    problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type parameters."
+    correctionMessage: Try removing all type parameters, removing all members, and adding one const constructor.
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that extends
+      `AbiSpecificInteger` doesn't meet all of the following requirements:
+      - there must be exactly one constructor
+      - the constructor must be marked `const`
+      - there must not be any members of other than the one constructor
+      - there must not be any type parameters
+
+      #### Examples
+
+      The following code produces this diagnostic because the class `C` doesn't
+      define a const constructor:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class [!C!] extends AbiSpecificInteger {
+      }
+      ```
+
+      The following code produces this diagnostic because the constructor isn't
+      a `const` constructor:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class [!C!] extends AbiSpecificInteger {
+        C();
+      }
+      ```
+
+      The following code produces this diagnostic because the class `C` defines
+      multiple constructors:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class [!C!] extends AbiSpecificInteger {
+        const C.zero();
+        const C.one();
+      }
+      ```
+
+      The following code produces this diagnostic because the class `C` defineS
+      a field:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class [!C!] extends AbiSpecificInteger {
+        final int i;
+
+        const C(this.i);
+      }
+      ```
+
+      The following code produces this diagnostic because the class `C` has a
+      type parameter:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class [!C!]<T> extends AbiSpecificInteger { // type parameters
+        const C();
+      }
+      ```
+
+      #### Common fixes
+
+      Change the class so that it meets the requirements of having no type
+      parameters and a single member that is a `const` constructor:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
   ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try removing the extra annotation.
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that extends
+      `AbiSpecificInteger` has more than one `AbiSpecificIntegerMapping`
+      annotation.
+
+      #### Example
+
+      The following code produces this diagnostic because there are two
+      `AbiSpecificIntegerMapping` annotations on the class `C`:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      @[!AbiSpecificIntegerMapping!]({Abi.linuxX64 : Uint16()})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
+
+      #### Common fixes
+
+      Remove all but one of the annotations, merging the arguments as
+      appropriate:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8(), Abi.linuxX64 : Uint16()})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
   ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try adding an annotation.
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that extends
+      `AbiSpecificInteger` doesn't have an `AbiSpecificIntegerMapping`
+      annotation.
+
+      #### Example
+
+      The following code produces this diagnostic because there's no
+      `AbiSpecificIntegerMapping` annotation on the class `C`:
+
+      ```dart
+      import 'dart:ffi';
+
+      class [!C!] extends AbiSpecificInteger {
+        const C();
+      }
+      ```
+
+      #### Common fixes
+
+      Add an `AbiSpecificIntegerMapping` annotation to the class:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
   ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
     problemMessage: "Only mappings to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported."
     correctionMessage: Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', or 'Uint64'.
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a value in the map argument of
+      an `AbiSpecificIntegerMapping` annotation is anything other than one of
+      the following integer types:
+      - `Int8`
+      - `Int16`
+      - `Int32`
+      - `Int64`
+      - `Uint8`
+      - `Uint16`
+      - `UInt32`
+      - `Uint64`
+
+      #### Example
+
+      The following code produces this diagnostic because the value of the map
+      entry is `Array<Uint8>`, which isn't a valid integer type:
+
+      ```dart
+      import 'dart:ffi';
+
+      @[!AbiSpecificIntegerMapping!]({Abi.macosX64 : Array<Uint8>(4)})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
+
+      #### Common fixes
+
+      Use one of the valid types as a value in the map:
+
+      ```dart
+      import 'dart:ffi';
+
+      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+      class C extends AbiSpecificInteger {
+        const C();
+      }
+      ```
   ANNOTATION_ON_POINTER_FIELD:
     problemMessage: "Fields in a struct class whose type is 'Pointer' shouldn't have any annotations."
     correctionMessage: Try removing the annotation.
@@ -17690,7 +17929,30 @@
   DIVISION_OPTIMIZATION:
     problemMessage: The operator x ~/ y is more efficient than (x / y).toInt().
     correctionMessage: "Try re-writing the expression to use the '~/' operator."
-    comment: Hint to use the ~/ operator.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the result of dividing two
+      numbers is converted to an integer using `toInt`. Dart has a built-in
+      integer division operator that is both more efficient and more concise.
+
+      #### Example
+
+      The following code produces this diagnostic because the result of dividing
+      `x` and `y` is converted to an integer using `toInt`:
+
+      ```dart
+      int divide(num x, num y) => [!(x / y).toInt()!];
+      ```
+
+      #### Common fixes
+
+      Use the integer division operator (`~/`):
+
+      ```dart
+      int divide(num x, num y) => x ~/ y;
+      ```
   DUPLICATE_HIDDEN_NAME:
     problemMessage: Duplicate hidden name.
     correctionMessage: Try removing the repeated name from the list of hidden members.
@@ -17960,7 +18222,7 @@
       directory.
   FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE:
     problemMessage: "A file outside the 'lib' directory shouldn't reference a file inside the 'lib' directory using a relative path."
-    correctionMessage: "Try using a package: URI instead."
+    correctionMessage: "Try using a 'package:' URI instead."
     comment: |-
       It is a bad practice for a source file ouside a package "lib" directory
       hierarchy to traverse into that directory hierarchy. For example, a source
@@ -18547,12 +18809,84 @@
       ```
   INVALID_NON_VIRTUAL_ANNOTATION:
     problemMessage: "The annotation '@nonVirtual' can only be applied to a concrete instance member."
-    correctionMessage: Try removing @nonVirtual.
+    correctionMessage: Try removing '@nonVirtual'.
     comment: |-
       This hint is generated anywhere where `@nonVirtual` annotates something
       other than a non-abstract instance member in a class or mixin.
 
       No Parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the `nonVirtual` annotation is
+      found on a declaration other than a member of a class, mixin, or enum, or
+      if the member isn't a concrete instance member.
+
+      #### Examples
+
+      The following code produces this diagnostic because the annotation is on a
+      class declaration rather than a member inside the class:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@nonVirtual!]
+      class C {}
+      ```
+
+      The following code produces this diagnostic because the method `m` is an
+      abstract method:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      abstract class C {
+        [!@nonVirtual!]
+        void m();
+      }
+      ```
+
+      The following code produces this diagnostic because the method `m` is a
+      static method:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      abstract class C {
+        [!@nonVirtual!]
+        static void m() {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the declaration isn't a member of a class, mixin, or enum, then remove
+      the annotation:
+
+      ```dart
+      class C {}
+      ```
+
+      If the member is intended to be a concrete instance member, then make it
+      so:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      abstract class C {
+        @nonVirtual
+        void m() {}
+      }
+      ```
+
+      If the member is not intended to be a concrete instance member, then
+      remove the annotation:
+
+      ```dart
+      abstract class C {
+        static void m() {}
+      }
+      ```
   INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
     problemMessage: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
     comment: |-
@@ -18562,6 +18896,62 @@
       Parameters:
       0: the name of the member
       1: the name of the defining class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member of a class, mixin, or
+      enum overrides a member that has the `@nonVirtual` annotation on it.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `m` in `B`
+      overrides the method `m` in `A`, and the method `m` in `A` is annotated
+      with the `@nonVirtual` annotation:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class A {
+        @nonVirtual
+        void m() {}
+      }
+
+      class B extends A {
+        @override
+        void [!m!]() {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the annotation on the method in the superclass is correct (the method
+      in the superclass is not intended to be overridden), then remove or rename
+      the overriding method:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class A {
+        @nonVirtual
+        void m() {}
+      }
+
+      class B extends A {}
+      ```
+
+      If the method in the superclass is intended to be overridden, then remove
+      the `@nonVirtual` annotation:
+
+      ```dart
+      class A {
+        void m() {}
+      }
+
+      class B extends A {
+        @override
+        void m() {}
+      }
+      ```
   INVALID_REQUIRED_NAMED_PARAM:
     problemMessage: "The type parameter '{0}' is annotated with @required but only named parameters without a default value can be annotated with it."
     correctionMessage: Remove @required.
@@ -18657,12 +19047,41 @@
       ```
   INVALID_SEALED_ANNOTATION:
     problemMessage: "The annotation '@sealed' can only be applied to classes."
-    correctionMessage: Remove @sealed.
+    correctionMessage: Try removing the '@sealed' annotation.
     comment: |-
       This hint is generated anywhere where `@sealed` annotates something other
       than a class.
 
       No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a declaration other than a
+      class declaration has the `@sealed` annotation on it.
+
+      #### Example
+
+      The following code produces this diagnostic because the `@sealed`
+      annotation is on a method declaration:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class A {
+        [!@sealed!]
+        void m() {}
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the annotation:
+
+      ```dart
+      class A {
+        void m() {}
+      }
+      ```
   INVALID_USE_OF_INTERNAL_MEMBER:
     problemMessage: "The member '{0}' can only be used within its package."
     comment: |-
@@ -18773,6 +19192,58 @@
       Parameters:
       0: the name of the member
       1: the name of the defining class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member annotated with
+      `@visibleForTesting` is referenced anywhere other than the library in
+      which it is declared or in a library in the `test` directory.
+
+      #### Example
+
+      Given a file named `c.dart` that contains the following:
+
+      ```dart
+      %uri="lib/c.dart"
+      import 'package:meta/meta.dart';
+
+      class C {
+        @visibleForTesting
+        void m() {}
+      }
+      ```
+
+      The following code, when not inside the `test` directory, produces this
+      diagnostic because the method `m` is marked as being visible only for
+      tests:
+
+      ```dart
+      import 'c.dart';
+
+      void f(C c) {
+        c.[!m!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If the annotated member should not be referenced outside of tests, then
+      remove the reference:
+
+      ```dart
+      import 'c.dart';
+
+      void f(C c) {}
+      ```
+
+      If it's OK to reference the annotated member outside of tests, then remove
+      the annotation:
+
+      ```dart
+      class C {
+        void m() {}
+      }
+      ```
   INVALID_VISIBILITY_ANNOTATION:
     problemMessage: "The member '{0}' is annotated with '{1}', but this annotation is only meaningful on declarations of public members."
     hasPublishedDocs: true
@@ -20430,6 +20901,53 @@
     correctionMessage: Try removing the 'final'.
     hasPublishedDocs: false
     comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when either a field initializing
+      parameter or a super parameter in a constructor has the keyword `final`.
+      In both cases the keyword is unnecessary because the parameter is
+      implicitly `final`.
+
+      #### Examples
+
+      The following code produces this diagnostic because the field initializing
+      parameter has the keyword `final`:
+
+      ```dart
+      class A {
+        int value;
+
+        A([!final!] this.value);
+      }
+      ```
+
+      The following code produces this diagnostic because the super parameter in
+      `B` has the keyword `final`:
+
+      ```dart
+      class A {
+        A(int value);
+      }
+
+      class B extends A {
+        B([!final!] super.value);
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the unnecessary `final` keyword:
+
+      ```dart
+      class A {
+        A(int value);
+      }
+
+      class B extends A {
+        B(super.value);
+      }
+      ```
   UNNECESSARY_IGNORE:
     problemMessage: "The diagnostic '{0}' isn't produced at this location so it doesn't need to be ignored."
     correctionMessage: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 342e26d..aa551dd 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -5053,16 +5053,20 @@
   }
 
   test_error_undefinedMethod_typeLiteral_conditional() async {
-    // When applied to a type literal, the conditional access operator '?.'
-    // cannot be used to access instance methods of Type.
-    await assertErrorsInCode(r'''
+    await assertErrorsInCode(
+      r'''
 class A {}
 main() {
   A?.toString();
 }
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_METHOD, 25, 8),
-    ]);
+''',
+      expectedErrorsByNullability(nullable: [
+        error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 23, 2),
+        error(CompileTimeErrorCode.UNDEFINED_METHOD, 25, 8),
+      ], legacy: [
+        error(CompileTimeErrorCode.UNDEFINED_METHOD, 25, 8),
+      ]),
+    );
   }
 
   test_error_undefinedSuperMethod() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
index 60e0fd0..bc80d9b 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
@@ -171,7 +171,7 @@
   }
 
   test_getter_class() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 class C {
   static int x = 0;
 }
@@ -179,11 +179,13 @@
 f() {
   C?.x;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 42, 2),
+    ]);
   }
 
   test_getter_extension() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 extension E on int {
   static int x = 0;
 }
@@ -191,7 +193,9 @@
 f() {
   E?.x;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 53, 2),
+    ]);
   }
 
   test_getter_legacy() async {
@@ -213,7 +217,7 @@
   }
 
   test_getter_mixin() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 mixin M {
   static int x = 0;
 }
@@ -221,7 +225,9 @@
 f() {
   M?.x;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 42, 2),
+    ]);
   }
 
   test_getter_nonNullable() async {
@@ -303,7 +309,7 @@
   }
 
   test_method_class() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 class C {
   static void foo() {}
 }
@@ -311,11 +317,31 @@
 f() {
   C?.foo();
 }
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 45, 2),
+    ]);
+  }
+
+  test_method_class_prefixed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class C {
+  static void foo() {}
+}
 ''');
+
+    await assertErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.C?.foo();
+}
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 49, 2),
+    ]);
   }
 
   test_method_extension() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 extension E on int {
   static void foo() {}
 }
@@ -323,7 +349,27 @@
 f() {
   E?.foo();
 }
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 56, 2),
+    ]);
+  }
+
+  test_method_extension_prefixed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+extension E on int {
+  static void foo() {}
+}
 ''');
+
+    await assertErrorsInCode('''
+import 'a.dart' as prefix;
+
+f() {
+  prefix.E?.foo();
+}
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 44, 2),
+    ]);
   }
 
   test_method_legacy() async {
@@ -345,7 +391,7 @@
   }
 
   test_method_mixin() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 mixin M {
   static void foo() {}
 }
@@ -353,7 +399,27 @@
 f() {
   M?.foo();
 }
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 45, 2),
+    ]);
+  }
+
+  test_method_mixin_prefixed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+mixin M {
+  static void foo() {}
+}
 ''');
+
+    await assertErrorsInCode('''
+import 'a.dart' as prefix;
+
+f() {
+  prefix.M?.foo();
+}
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 44, 2),
+    ]);
   }
 
   test_method_nonNullable() async {
@@ -377,6 +443,22 @@
 ''');
   }
 
+  test_method_typeAlias_class() async {
+    await assertErrorsInCode('''
+class A {
+  static void foo() {}
+}
+
+typedef B = A; 
+
+f() {
+  B?.foo();
+}
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 62, 2),
+    ]);
+  }
+
   test_nonNullableSpread_nullableType() async {
     await assertNoErrorsInCode('''
 f(List<int> x) {
@@ -421,7 +503,7 @@
   }
 
   test_setter_class() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 class C {
   static int x = 0;
 }
@@ -429,11 +511,13 @@
 f() {
   C?.x = 0;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 42, 2),
+    ]);
   }
 
   test_setter_extension() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 extension E on int {
   static int x = 0;
 }
@@ -441,11 +525,13 @@
 f() {
   E?.x = 0;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 53, 2),
+    ]);
   }
 
   test_setter_mixin() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 mixin M {
   static int x = 0;
 }
@@ -453,7 +539,9 @@
 f() {
   M?.x = 0;
 }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 42, 2),
+    ]);
   }
 
   /// Here we test that analysis does not crash while checking whether to
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 2f1bacb..1fe9cd4 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -479,15 +479,18 @@
     ]);
   }
 
-  test_static_conditionalAcces_defined() async {
-    // The conditional access operator '?.' can be used to access static
-    // fields.
-    await assertNoErrorsInCode('''
+  test_static_conditionalAccess_defined() async {
+    await assertErrorsInCode(
+      '''
 class A {
   static var x;
 }
 var a = A?.x;
-''');
+''',
+      expectedErrorsByNullability(nullable: [
+        error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 37, 2),
+      ], legacy: []),
+    );
   }
 
   test_static_definedInSuperclass() async {
@@ -527,14 +530,18 @@
   }
 
   test_typeLiteral_conditionalAccess() async {
-    // When applied to a type literal, the conditional access operator '?.'
-    // cannot be used to access instance getters of Type.
-    await assertErrorsInCode('''
+    await assertErrorsInCode(
+      '''
 class A {}
 f() => A?.hashCode;
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 21, 8),
-    ]);
+''',
+      expectedErrorsByNullability(nullable: [
+        error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 19, 2),
+        error(CompileTimeErrorCode.UNDEFINED_GETTER, 21, 8),
+      ], legacy: [
+        error(CompileTimeErrorCode.UNDEFINED_GETTER, 21, 8),
+      ]),
+    );
   }
 
   test_typeSubstitution_defined() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
index ed18c21..6b5bc62 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
@@ -228,14 +228,14 @@
   }
 
   test_static_conditionalAccess_defined() async {
-    // The conditional access operator '?.' can be used to access static
-    // methods.
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 class A {
   static void m() {}
 }
 f() { A?.m(); }
-''');
+''', [
+      error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 40, 2),
+    ]);
   }
 
   test_static_mixinApplication_superConstructorIsFactory() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index f234428..9882644 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -212,14 +212,17 @@
   }
 
   test_static_conditionalAccess_defined() async {
-    // The conditional access operator '?.' can be used to access static
-    // fields.
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode(
+      '''
 class A {
   static var x;
 }
 f() { A?.x = 1; }
-''');
+''',
+      expectedErrorsByNullability(nullable: [
+        error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 35, 2),
+      ], legacy: []),
+    );
   }
 
   test_static_definedInSuperclass() async {
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 969970e..14ab1b7 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -296,6 +296,221 @@
 [meta-visibleForOverriding]: https://pub.dev/documentation/meta/latest/meta/visibleForOverriding-constant.html
 [meta-visibleForTesting]: https://pub.dev/documentation/meta/latest/meta/visibleForTesting-constant.html
 
+### abi_specific_integer_invalid
+
+_Classes extending 'AbiSpecificInteger' must have exactly one const constructor,
+no other members, and no type parameters._
+
+#### Description
+
+The analyzer produces this diagnostic when a class that extends
+`AbiSpecificInteger` doesn't meet all of the following requirements:
+- there must be exactly one constructor
+- the constructor must be marked `const`
+- there must not be any members of other than the one constructor
+- there must not be any type parameters
+
+#### Examples
+
+The following code produces this diagnostic because the class `C` doesn't
+define a const constructor:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class [!C!] extends AbiSpecificInteger {
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the constructor isn't
+a `const` constructor:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class [!C!] extends AbiSpecificInteger {
+  C();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `C` defines
+multiple constructors:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class [!C!] extends AbiSpecificInteger {
+  const C.zero();
+  const C.one();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `C` defineS
+a field:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class [!C!] extends AbiSpecificInteger {
+  final int i;
+
+  const C(this.i);
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `C` has a
+type parameter:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class [!C!]<T> extends AbiSpecificInteger { // type parameters
+  const C();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Change the class so that it meets the requirements of having no type
+parameters and a single member that is a `const` constructor:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+### abi_specific_integer_mapping_extra
+
+_Classes extending 'AbiSpecificInteger' must have exactly one
+'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size._
+
+#### Description
+
+The analyzer produces this diagnostic when a class that extends
+`AbiSpecificInteger` has more than one `AbiSpecificIntegerMapping`
+annotation.
+
+#### Example
+
+The following code produces this diagnostic because there are two
+`AbiSpecificIntegerMapping` annotations on the class `C`:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+@[!AbiSpecificIntegerMapping!]({Abi.linuxX64 : Uint16()})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Remove all but one of the annotations, merging the arguments as
+appropriate:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8(), Abi.linuxX64 : Uint16()})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+### abi_specific_integer_mapping_missing
+
+_Classes extending 'AbiSpecificInteger' must have exactly one
+'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size._
+
+#### Description
+
+The analyzer produces this diagnostic when a class that extends
+`AbiSpecificInteger` doesn't have an `AbiSpecificIntegerMapping`
+annotation.
+
+#### Example
+
+The following code produces this diagnostic because there's no
+`AbiSpecificIntegerMapping` annotation on the class `C`:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+class [!C!] extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Add an `AbiSpecificIntegerMapping` annotation to the class:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+### abi_specific_integer_mapping_unsupported
+
+_Only mappings to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16',
+'UInt32', and 'Uint64' are supported._
+
+#### Description
+
+The analyzer produces this diagnostic when a value in the map argument of
+an `AbiSpecificIntegerMapping` annotation is anything other than one of
+the following integer types:
+- `Int8`
+- `Int16`
+- `Int32`
+- `Int64`
+- `Uint8`
+- `Uint16`
+- `UInt32`
+- `Uint64`
+
+#### Example
+
+The following code produces this diagnostic because the value of the map
+entry is `Array<Uint8>`, which isn't a valid integer type:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@[!AbiSpecificIntegerMapping!]({Abi.macosX64 : Array<Uint8>(4)})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Use one of the valid types as a value in the map:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
+class C extends AbiSpecificInteger {
+  const C();
+}
+{% endprettify %}
+
 ### abstract_field_initializer
 
 _Abstract fields can't have initializers._
@@ -3845,6 +4060,33 @@
 }
 {% endprettify %}
 
+### division_optimization
+
+_The operator x ~/ y is more efficient than (x / y).toInt()._
+
+#### Description
+
+The analyzer produces this diagnostic when the result of dividing two
+numbers is converted to an integer using `toInt`. Dart has a built-in
+integer division operator that is both more efficient and more concise.
+
+#### Example
+
+The following code produces this diagnostic because the result of dividing
+`x` and `y` is converted to an integer using `toInt`:
+
+{% prettify dart tag=pre+code %}
+int divide(num x, num y) => [!(x / y).toInt()!];
+{% endprettify %}
+
+#### Common fixes
+
+Use the integer division operator (`~/`):
+
+{% prettify dart tag=pre+code %}
+int divide(num x, num y) => x ~/ y;
+{% endprettify %}
+
 ### duplicate_constructor
 
 _The constructor with name '{0}' is already defined._
@@ -6731,14 +6973,15 @@
 
 ### implements_super_class
 
-_'{0}' can't be used in both 'extends' and 'with' clauses._
-
 _'{0}' can't be used in both the 'extends' and 'implements' clauses._
 
+_'{0}' can't be used in both the 'extends' and 'with' clauses._
+
 #### Description
 
-The analyzer produces this diagnostic when one class is listed in both the
-`extends` and `implements` clauses of another class.
+The analyzer produces this diagnostic when a class is listed in the
+`extends` clause of a class declaration and also in either the
+`implements` or `with` clause of the same declaration.
 
 #### Example
 
@@ -6751,6 +6994,15 @@
 class B extends A implements [!A!] {}
 {% endprettify %}
 
+The following code produces this diagnostic because the class `A` is used
+in both the `extends` and `with` clauses for the class `B`:
+
+{% prettify dart tag=pre+code %}
+class A {}
+
+class B extends A with [!A!] {}
+{% endprettify %}
+
 #### Common fixes
 
 If you want to inherit the implementation from the class, then remove the
@@ -8662,6 +8914,83 @@
 }
 {% endprettify %}
 
+### invalid_non_virtual_annotation
+
+_The annotation '@nonVirtual' can only be applied to a concrete instance
+member._
+
+#### Description
+
+The analyzer produces this diagnostic when the `nonVirtual` annotation is
+found on a declaration other than a member of a class, mixin, or enum, or
+if the member isn't a concrete instance member.
+
+#### Examples
+
+The following code produces this diagnostic because the annotation is on a
+class declaration rather than a member inside the class:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+[!@nonVirtual!]
+class C {}
+{% endprettify %}
+
+The following code produces this diagnostic because the method `m` is an
+abstract method:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+abstract class C {
+  [!@nonVirtual!]
+  void m();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the method `m` is a
+static method:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+abstract class C {
+  [!@nonVirtual!]
+  static void m() {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the declaration isn't a member of a class, mixin, or enum, then remove
+the annotation:
+
+{% prettify dart tag=pre+code %}
+class C {}
+{% endprettify %}
+
+If the member is intended to be a concrete instance member, then make it
+so:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+abstract class C {
+  @nonVirtual
+  void m() {}
+}
+{% endprettify %}
+
+If the member is not intended to be a concrete instance member, then
+remove the annotation:
+
+{% prettify dart tag=pre+code %}
+abstract class C {
+  static void m() {}
+}
+{% endprettify %}
+
 ### invalid_null_aware_operator
 
 _The receiver can't be null because of short-circuiting, so the null-aware
@@ -8799,6 +9128,67 @@
 }
 {% endprettify %}
 
+### invalid_override_of_non_virtual_member
+
+_The member '{0}' is declared non-virtual in '{1}' and can't be overridden in
+subclasses._
+
+#### Description
+
+The analyzer produces this diagnostic when a member of a class, mixin, or
+enum overrides a member that has the `@nonVirtual` annotation on it.
+
+#### Example
+
+The following code produces this diagnostic because the method `m` in `B`
+overrides the method `m` in `A`, and the method `m` in `A` is annotated
+with the `@nonVirtual` annotation:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class A {
+  @nonVirtual
+  void m() {}
+}
+
+class B extends A {
+  @override
+  void [!m!]() {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the annotation on the method in the superclass is correct (the method
+in the superclass is not intended to be overridden), then remove or rename
+the overriding method:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class A {
+  @nonVirtual
+  void m() {}
+}
+
+class B extends A {}
+{% endprettify %}
+
+If the method in the superclass is intended to be overridden, then remove
+the `@nonVirtual` annotation:
+
+{% prettify dart tag=pre+code %}
+class A {
+  void m() {}
+}
+
+class B extends A {
+  @override
+  void m() {}
+}
+{% endprettify %}
+
 ### invalid_reference_to_generative_enum_constructor
 
 _Generative enum constructors can only be used as targets of redirection._
@@ -8946,6 +9336,39 @@
 }
 {% endprettify %}
 
+### invalid_sealed_annotation
+
+_The annotation '@sealed' can only be applied to classes._
+
+#### Description
+
+The analyzer produces this diagnostic when a declaration other than a
+class declaration has the `@sealed` annotation on it.
+
+#### Example
+
+The following code produces this diagnostic because the `@sealed`
+annotation is on a method declaration:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class A {
+  [!@sealed!]
+  void m() {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+Remove the annotation:
+
+{% prettify dart tag=pre+code %}
+class A {
+  void m() {}
+}
+{% endprettify %}
+
 ### invalid_super_formal_parameter_location
 
 _Super parameters can only be used in non-redirecting generative constructors._
@@ -9249,6 +9672,61 @@
 
 Remove the invalid use of the member.
 
+### invalid_use_of_visible_for_testing_member
+
+_The member '{0}' can only be used within '{1}' or a test._
+
+#### Description
+
+The analyzer produces this diagnostic when a member annotated with
+`@visibleForTesting` is referenced anywhere other than the library in
+which it is declared or in a library in the `test` directory.
+
+#### Example
+
+Given a file named `c.dart` that contains the following:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class C {
+  @visibleForTesting
+  void m() {}
+}
+{% endprettify %}
+
+The following code, when not inside the `test` directory, produces this
+diagnostic because the method `m` is marked as being visible only for
+tests:
+
+{% prettify dart tag=pre+code %}
+import 'c.dart';
+
+void f(C c) {
+  c.[!m!]();
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the annotated member should not be referenced outside of tests, then
+remove the reference:
+
+{% prettify dart tag=pre+code %}
+import 'c.dart';
+
+void f(C c) {}
+{% endprettify %}
+
+If it's OK to reference the annotated member outside of tests, then remove
+the annotation:
+
+{% prettify dart tag=pre+code %}
+class C {
+  void m() {}
+}
+{% endprettify %}
+
 ### invalid_visibility_annotation
 
 _The member '{0}' is annotated with '{1}', but this annotation is only
@@ -10941,6 +11419,44 @@
 class, then consider adding a field and delegating to the wrapped instance
 of the sealed class.
 
+### mixin_super_class_constraint_deferred_class
+
+_Deferred classes can't be used as superclass constraints._
+
+#### Description
+
+The analyzer produces this diagnostic when a superclass constraint of a
+mixin is imported from a deferred library.
+
+#### Example
+
+The following code produces this diagnostic because the superclass
+constraint of `math.Random` is imported from a deferred library:
+
+{% prettify dart tag=pre+code %}
+import 'dart:async' deferred as async;
+
+mixin M<T> on [!async.Stream<T>!] {}
+{% endprettify %}
+
+#### Common fixes
+
+If the import doesn't need to be deferred, then remove the `deferred`
+keyword:
+
+{% prettify dart tag=pre+code %}
+import 'dart:async' as async;
+
+mixin M<T> on async.Stream<T> {}
+{% endprettify %}
+
+If the import does need to be deferred, then remove the superclass
+constraint:
+
+{% prettify dart tag=pre+code %}
+mixin M<T> {}
+{% endprettify %}
+
 ### mixin_super_class_constraint_non_interface
 
 _Only classes and mixins can be used as superclass constraints._
@@ -18479,6 +18995,58 @@
   meta: ^1.0.2
 ```
 
+### unnecessary_final
+
+_The keyword 'final' isn't necessary because the parameter is implicitly
+'final'._
+
+#### Description
+
+The analyzer produces this diagnostic when either a field initializing
+parameter or a super parameter in a constructor has the keyword `final`.
+In both cases the keyword is unnecessary because the parameter is
+implicitly `final`.
+
+#### Examples
+
+The following code produces this diagnostic because the field initializing
+parameter has the keyword `final`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  int value;
+
+  A([!final!] this.value);
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the super parameter in
+`B` has the keyword `final`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int value);
+}
+
+class B extends A {
+  B([!final!] super.value);
+}
+{% endprettify %}
+
+#### Common fixes
+
+Remove the unnecessary `final` keyword:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int value);
+}
+
+class B extends A {
+  B(super.value);
+}
+{% endprettify %}
+
 ### unnecessary_import
 
 _The import of '{0}' is unnecessary because all of the used elements are also
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 1428a2b..e059a81 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -878,7 +878,7 @@
     // Standard flatbuffers only support one root type.  We support multiple
     // root types.  For now work around this by forcing PackageBundle to be the
     // root type.  TODO(paulberry): come up with a better solution.
-    idl_model.ClassDeclaration rootType = _idl.classes['PackageBundle']!;
+    final rootType = _idl.classes['AnalysisDriverResolvedUnit']!;
     out('root_type ${rootType.name};');
     var rootFileIdentifier = rootType.fileIdentifier;
     if (rootFileIdentifier != null) {
diff --git a/pkg/analyzer/tool/summary/stats.dart b/pkg/analyzer/tool/summary/stats.dart
deleted file mode 100644
index a9c094e..0000000
--- a/pkg/analyzer/tool/summary/stats.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// This file contains code for collecting statistics about the use of fields in
-/// a summary file.
-import 'dart:io';
-import 'dart:mirrors';
-
-import 'package:analyzer/src/summary/base.dart';
-import 'package:analyzer/src/summary/idl.dart';
-
-main(List<String> args) {
-  if (args.length != 1) {
-    _printUsage();
-    exitCode = 1;
-    return;
-  }
-
-  String inputFilePath = args[0];
-
-  // Read the input.
-  PackageBundle bundle =
-      PackageBundle.fromBuffer(File(inputFilePath).readAsBytesSync());
-
-  // Compute and output stats.
-  Stats stats = Stats();
-  stats.record(bundle);
-  stats.dump();
-}
-
-/// The name of the stats tool.
-const String BINARY_NAME = "stats";
-
-/// Print information about how to use the stats tool.
-void _printUsage() {
-  print('Usage: $BINARY_NAME input_file_path');
-}
-
-/// An instance of [Stats] keeps track of statistics about the use of fields in
-/// summary objects.
-class Stats {
-  /// Map from type to field name to a count of how often the field is used.
-  Map<Type, Map<String, int>> counts = <Type, Map<String, int>>{};
-
-  /// Print out statistics gathered so far.
-  void dump() {
-    counts.forEach((Type type, Map<String, int> typeCounts) {
-      print(type);
-      List<String> keys = typeCounts.keys.toList();
-      keys.sort((a, b) => typeCounts[b]!.compareTo(typeCounts[a]!));
-      for (String key in keys) {
-        print('  $key: ${typeCounts[key]}');
-      }
-      print('');
-    });
-  }
-
-  /// Record statistics for [obj] and all objects it refers to.
-  void record(SummaryClass obj) {
-    Map<String, int> typeCounts =
-        counts.putIfAbsent(obj.runtimeType, () => <String, int>{});
-    obj.toMap().forEach((key, value) {
-      if (value == null ||
-          value == 0 ||
-          value == false ||
-          value == '' ||
-          value is List && value.isEmpty ||
-          // TODO(srawlins): Remove this and enumerate each enum which may
-          // be encountered.
-          // ignore: avoid_dynamic_calls
-          reflect(value).type.isEnum && (value as dynamic).index == 0) {
-        return;
-      }
-      typeCounts.update(key, (value) => value + 1, ifAbsent: () => 0);
-      if (value is SummaryClass) {
-        record(value);
-      } else if (value is List) {
-        for (var element in value) {
-          if (element is SummaryClass) {
-            record(element);
-          }
-        }
-      }
-    });
-  }
-}
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index a1b132b..bf08b01 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -1180,7 +1180,7 @@
       {LibraryEntity library}) {
     if (compiler.options.dumpInfo) {
       _entityToNodes.putIfAbsent(entity, () => <jsAst.Node>[]).add(code);
-      _nodeData[code] ??= useBinaryFormat ? CodeSpan() : _CodeData();
+      _nodeData[code] ??= useBinaryFormat ? CodeSpan.empty() : _CodeData();
     }
   }
 
@@ -1189,7 +1189,7 @@
       assert(_constantToNode[constant] == null ||
           _constantToNode[constant] == code);
       _constantToNode[constant] = code;
-      _nodeData[code] ??= useBinaryFormat ? CodeSpan() : _CodeData();
+      _nodeData[code] ??= useBinaryFormat ? CodeSpan.empty() : _CodeData();
     }
   }
 
@@ -1495,6 +1495,8 @@
   @override
   String get text => '$_text';
   int get length => end - start;
+
+  _CodeData() : super.empty();
 }
 
 /// Holds dump-info's mutable state.
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 997b340..6eef392 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -3,7 +3,7 @@
   {
   "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 131,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -11,7 +11,7 @@
   {
   "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 49,
   "outputUnit": "outputUnit/main",
   "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -19,7 +19,7 @@
   {
   "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 41,
   "outputUnit": "outputUnit/main",
   "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -27,7 +27,7 @@
   {
   "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 43,
   "outputUnit": "outputUnit/main",
   "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -35,7 +35,7 @@
   {
   "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 59,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -216,7 +216,8 @@
   "sideEffects": "SideEffects(reads nothing; writes field)",
   "inlinedCount": 0,
   "code": "Class1$($T) {\n      var t1 = new A.Class1(new A.Class1_field_closure($T), null, $T._eval$1(\"Class1<0>\"));\n      t1.Class1$0($T);\n      return t1;\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 3
 }],
    holding=[
     {"id":"function/dart:_rti::Rti._eval","mask":null},
@@ -255,7 +256,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "Class1$setFunc(funcField, $T) {\n      return new A.Class1(new A.Class1_field_closure($T), funcField, $T._eval$1(\"Class1<0>\"));\n    }",
-  "type": "dynamic Function(dynamic)"
+  "type": "dynamic Function(dynamic)",
+  "functionKind": 3
 }],
    holding=[
     {"id":"function/dart:_rti::Rti._eval","mask":null},
@@ -284,7 +286,8 @@
   "sideEffects": "SideEffects(reads nothing; writes field)",
   "inlinedCount": 1,
   "code": "",
-  "type": "Class1<#A> Function<#A extends Object?>()"
+  "type": "Class1<#A> Function<#A extends Object?>()",
+  "functionKind": 3
 }]*/
   factory Class1.fact() => new Class1<T>();
   /*member: Class1.fact2:
@@ -319,7 +322,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "Class1_Class1$fact2($T) {\n      return A.Class1$setFunc(new A.Class1_Class1$fact2_closure($T), $T);\n    }",
-  "type": "Class1<#A> Function<#A extends Object?>()"
+  "type": "Class1<#A> Function<#A extends Object?>()",
+  "functionKind": 3
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -349,7 +353,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 2
 }]*/
   method1() => T;
   /*member: Class1.method2:
@@ -384,7 +389,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "method2$0() {\n      return new A.Class1_method2_closure(this);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 2
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -415,7 +421,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 2
 }]*/
   method3<S>() => S;
   /*member: Class1.method4:
@@ -450,7 +457,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "method4$1$0($S) {\n      return new A.Class1_method4_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 2
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -504,7 +512,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "method5$0() {\n      return new A.Class1_method5_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 2
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -583,7 +592,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "method6$1$0($S) {\n      return new A.Class1_method6_closure(this, $S).call$1(new A.Class1_method6_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 2
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -624,7 +634,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }]*/
   static staticMethod1<S>() => S;
   /*member: Class1.staticMethod2:
@@ -659,7 +670,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "Class1_staticMethod2($S) {\n      return new A.Class1_staticMethod2_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -713,7 +725,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "Class1_staticMethod3() {\n      return new A.Class1_staticMethod3_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -792,7 +805,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "Class1_staticMethod4($S) {\n      return new A.Class1_staticMethod4_closure($S).call$1(new A.Class1_staticMethod4_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }],
    holding=[
     {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -834,7 +848,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }]*/
 topLevelMethod1<S>() => S;
 
@@ -870,7 +885,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "topLevelMethod2($S) {\n      return new A.topLevelMethod2_closure($S);\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -924,7 +940,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "topLevelMethod3() {\n      return new A.topLevelMethod3_local().call$1$0(type$.double);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1003,7 +1020,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "topLevelMethod4($S) {\n      return new A.topLevelMethod4_closure($S).call$1(new A.topLevelMethod4_local($S).call$1$0(type$.double));\n    }",
-  "type": "dynamic Function<#A extends Object?>()"
+  "type": "dynamic Function<#A extends Object?>()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1067,7 +1085,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "twoLocals() {\n      return new A.twoLocals_local2(new A.twoLocals_local1());\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1125,7 +1144,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "nested() {\n      var t1 = {};\n      t1.x = null;\n      new A.nested_nested1(t1).call$0();\n      t1.x.call$0();\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1196,7 +1216,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "nested2() {\n      A.print(new A.nested2_local1().call$0());\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1267,7 +1288,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "siblings() {\n      A.print(new A.siblings_local1().call$0());\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_rti::_setArrayType","mask":null},
@@ -1307,7 +1329,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "main() {\n      var t2,\n        t1 = type$.int;\n      A.createRuntimeType(A.Class1$(t1).$ti._precomputed1);\n      A.Class1$(t1).method2$0();\n      A.Class1_Class1$fact2(t1).funcField.call$0();\n      A.Class1$(t1);\n      t2 = type$.double;\n      A.createRuntimeType(t2);\n      A.Class1$(t1).method4$1$0(t2);\n      A.Class1$(t1).method5$0();\n      A.Class1$(t1).method6$1$0(t2);\n      A.createRuntimeType(t2);\n      A.Class1_staticMethod2(t2);\n      A.Class1_staticMethod3();\n      A.Class1_staticMethod4(t2);\n      A.createRuntimeType(t2);\n      A.topLevelMethod2(t2);\n      A.topLevelMethod3();\n      A.topLevelMethod4(t2);\n      A.twoLocals();\n      A.nested();\n      A.nested2();\n      A.siblings();\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"field/dart:_rti::Rti._precomputed1","mask":null},
diff --git a/pkg/compiler/test/dump_info/data/deferred/lib.dart b/pkg/compiler/test/dump_info/data/deferred/lib.dart
index 6339eb2..1ebff2d 100644
--- a/pkg/compiler/test/dump_info/data/deferred/lib.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/lib.dart
@@ -36,7 +36,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "_static_0(A, \"lib__defaultArg$closure\", \"defaultArg\", 0);\n\ndefaultArg() {\n      return \"\";\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }]*/
 defaultArg() => "";
 
@@ -66,7 +67,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "_static(A, \"lib__funky$closure\", 0, null, [\"call$1\", \"call$0\"], [\"funky\", function() {\n      return A.funky(A.lib__defaultArg$closure());\n    }], 1, 0);\n\nfunky(x) {\n      return x.call$0();\n    }",
-  "type": "dynamic Function([dynamic])"
+  "type": "dynamic Function([dynamic])",
+  "functionKind": 0
 }]*/
 funky([x = defaultArg]) => x();
 
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 84240fe..4baf1e1 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -9,7 +9,7 @@
   {
   "id": "constant/B.C_Deferred = A.lib__funky$closure();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 39,
   "outputUnit": "outputUnit/1",
   "code": "B.C_Deferred = A.lib__funky$closure();\n"
@@ -17,7 +17,7 @@
   {
   "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 131,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -25,7 +25,7 @@
   {
   "id": "constant/B.C__RootZone = new A._RootZone();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 35,
   "outputUnit": "outputUnit/main",
   "code": "B.C__RootZone = new A._RootZone();\n"
@@ -33,7 +33,7 @@
   {
   "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 51,
   "outputUnit": "outputUnit/main",
   "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
@@ -41,7 +41,7 @@
   {
   "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 49,
   "outputUnit": "outputUnit/main",
   "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -49,7 +49,7 @@
   {
   "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 41,
   "outputUnit": "outputUnit/main",
   "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -57,7 +57,7 @@
   {
   "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 37,
   "outputUnit": "outputUnit/main",
   "code": "B.JSInt_methods = J.JSInt.prototype;\n"
@@ -65,7 +65,7 @@
   {
   "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 43,
   "outputUnit": "outputUnit/main",
   "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -73,7 +73,7 @@
   {
   "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 59,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -153,7 +153,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "main() {\n      return A.loadDeferredLibrary(\"lib\").then$1$1(new A.main_closure(), type$.Null);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_js_helper::loadDeferredLibrary","mask":null},
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index 572c050..bfcfa23 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -52,7 +52,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 2
 }]*/
   method() {}
 }
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index 896b6cc..e95b65c 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -7,7 +7,7 @@
   {
   "id": "constant/B.C_A = new A.A();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 19,
   "outputUnit": "outputUnit/1",
   "code": "B.C_A = new A.A();\n"
@@ -15,7 +15,7 @@
   {
   "id": "constant/B.C_Deferred = B.C_A;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 22,
   "outputUnit": "outputUnit/1",
   "code": "B.C_Deferred = B.C_A;\n"
@@ -23,7 +23,7 @@
   {
   "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 131,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -31,7 +31,7 @@
   {
   "id": "constant/B.C__RootZone = new A._RootZone();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 35,
   "outputUnit": "outputUnit/main",
   "code": "B.C__RootZone = new A._RootZone();\n"
@@ -39,7 +39,7 @@
   {
   "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 51,
   "outputUnit": "outputUnit/main",
   "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
@@ -47,7 +47,7 @@
   {
   "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 49,
   "outputUnit": "outputUnit/main",
   "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -55,7 +55,7 @@
   {
   "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 41,
   "outputUnit": "outputUnit/main",
   "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -63,7 +63,7 @@
   {
   "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 37,
   "outputUnit": "outputUnit/main",
   "code": "B.JSInt_methods = J.JSInt.prototype;\n"
@@ -71,7 +71,7 @@
   {
   "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 43,
   "outputUnit": "outputUnit/main",
   "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -79,7 +79,7 @@
   {
   "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 59,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -152,7 +152,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "main() {\n      var $async$goto = 0,\n        $async$completer = A._makeAsyncAwaitCompleter(type$.dynamic);\n      var $async$main = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {\n        if ($async$errorCode === 1)\n          return A._asyncRethrow($async$result, $async$completer);\n        while (true)\n          switch ($async$goto) {\n            case 0:\n              // Function start\n              $async$goto = 2;\n              return A._asyncAwait(A.loadDeferredLibrary(\"lib1\"), $async$main);\n            case 2:\n              // returning from await.\n              A.checkDeferredIsLoaded(\"lib1\");\n              A.checkDeferredIsLoaded(\"lib1\");\n              // implicit return\n              return A._asyncReturn(null, $async$completer);\n          }\n      });\n      return A._asyncStartSync($async$main, $async$completer);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_js_helper::checkDeferredIsLoaded","mask":null},
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index ded91e2..81cdb3e 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -3,7 +3,7 @@
   {
   "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 131,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -11,7 +11,7 @@
   {
   "id": "constant/B.C_JS_CONST0 = function() {\n  var toStringFunction = Object.prototype.toString;\n  function getTag(o) {\n    var s = toStringFunction.call(o);\n    return s.substring(8, s.length - 1);\n  }\n  function getUnknownTag(object, tag) {\n    if (/^HTML[A-Z].*Element$/.test(tag)) {\n      var name = toStringFunction.call(object);\n      if (name == \"[object Object]\") return null;\n      return \"HTMLElement\";\n    }\n  }\n  function getUnknownTagGenericBrowser(object, tag) {\n    if (self.HTMLElement && object instanceof HTMLElement) return \"HTMLElement\";\n    return getUnknownTag(object, tag);\n  }\n  function prototypeForTag(tag) {\n    if (typeof window == \"undefined\") return null;\n    if (typeof window[tag] == \"undefined\") return null;\n    var constructor = window[tag];\n    if (typeof constructor != \"function\") return null;\n    return constructor.prototype;\n  }\n  function discriminator(tag) { return null; }\n  var isBrowser = typeof navigator == \"object\";\n  return {\n    getTag: getTag,\n    getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,\n    prototypeForTag: prototypeForTag,\n    discriminator: discriminator };\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 1133,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST0 = function() {\n  var toStringFunction = Object.prototype.toString;\n  function getTag(o) {\n    var s = toStringFunction.call(o);\n    return s.substring(8, s.length - 1);\n  }\n  function getUnknownTag(object, tag) {\n    if (/^HTML[A-Z].*Element$/.test(tag)) {\n      var name = toStringFunction.call(object);\n      if (name == \"[object Object]\") return null;\n      return \"HTMLElement\";\n    }\n  }\n  function getUnknownTagGenericBrowser(object, tag) {\n    if (self.HTMLElement && object instanceof HTMLElement) return \"HTMLElement\";\n    return getUnknownTag(object, tag);\n  }\n  function prototypeForTag(tag) {\n    if (typeof window == \"undefined\") return null;\n    if (typeof window[tag] == \"undefined\") return null;\n    var constructor = window[tag];\n    if (typeof constructor != \"function\") return null;\n    return constructor.prototype;\n  }\n  function discriminator(tag) { return null; }\n  var isBrowser = typeof navigator == \"object\";\n  return {\n    getTag: getTag,\n    getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,\n    prototypeForTag: prototypeForTag,\n    discriminator: discriminator };\n};\n"
@@ -19,7 +19,7 @@
   {
   "id": "constant/B.C_JS_CONST1 = function(hooks) {\n  if (typeof dartExperimentalFixupGetTag != \"function\") return hooks;\n  hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 167,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST1 = function(hooks) {\n  if (typeof dartExperimentalFixupGetTag != \"function\") return hooks;\n  hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);\n};\n"
@@ -27,7 +27,7 @@
   {
   "id": "constant/B.C_JS_CONST2 = function(hooks) {\n  var getTag = hooks.getTag;\n  var prototypeForTag = hooks.prototypeForTag;\n  function getTagFixed(o) {\n    var tag = getTag(o);\n    if (tag == \"Document\") {\n      if (!!o.xmlVersion) return \"!Document\";\n      return \"!HTMLDocument\";\n    }\n    return tag;\n  }\n  function prototypeForTagFixed(tag) {\n    if (tag == \"Document\") return null;\n    return prototypeForTag(tag);\n  }\n  hooks.getTag = getTagFixed;\n  hooks.prototypeForTag = prototypeForTagFixed;\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 491,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST2 = function(hooks) {\n  var getTag = hooks.getTag;\n  var prototypeForTag = hooks.prototypeForTag;\n  function getTagFixed(o) {\n    var tag = getTag(o);\n    if (tag == \"Document\") {\n      if (!!o.xmlVersion) return \"!Document\";\n      return \"!HTMLDocument\";\n    }\n    return tag;\n  }\n  function prototypeForTagFixed(tag) {\n    if (tag == \"Document\") return null;\n    return prototypeForTag(tag);\n  }\n  hooks.getTag = getTagFixed;\n  hooks.prototypeForTag = prototypeForTagFixed;\n};\n"
@@ -35,7 +35,7 @@
   {
   "id": "constant/B.C_JS_CONST3 = function(hooks) { return hooks; }\n;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 52,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST3 = function(hooks) { return hooks; }\n;\n"
@@ -43,7 +43,7 @@
   {
   "id": "constant/B.C_JS_CONST4 = function(hooks) {\n  var userAgent = typeof navigator == \"object\" ? navigator.userAgent : \"\";\n  if (userAgent.indexOf(\"Trident/\") == -1) return hooks;\n  var getTag = hooks.getTag;\n  var quickMap = {\n    \"BeforeUnloadEvent\": \"Event\",\n    \"DataTransfer\": \"Clipboard\",\n    \"HTMLDDElement\": \"HTMLElement\",\n    \"HTMLDTElement\": \"HTMLElement\",\n    \"HTMLPhraseElement\": \"HTMLElement\",\n    \"Position\": \"Geoposition\"\n  };\n  function getTagIE(o) {\n    var tag = getTag(o);\n    var newTag = quickMap[tag];\n    if (newTag) return newTag;\n    if (tag == \"Object\") {\n      if (window.DataView && (o instanceof window.DataView)) return \"DataView\";\n    }\n    return tag;\n  }\n  function prototypeForTagIE(tag) {\n    var constructor = window[tag];\n    if (constructor == null) return null;\n    return constructor.prototype;\n  }\n  hooks.getTag = getTagIE;\n  hooks.prototypeForTag = prototypeForTagIE;\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 900,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST4 = function(hooks) {\n  var userAgent = typeof navigator == \"object\" ? navigator.userAgent : \"\";\n  if (userAgent.indexOf(\"Trident/\") == -1) return hooks;\n  var getTag = hooks.getTag;\n  var quickMap = {\n    \"BeforeUnloadEvent\": \"Event\",\n    \"DataTransfer\": \"Clipboard\",\n    \"HTMLDDElement\": \"HTMLElement\",\n    \"HTMLDTElement\": \"HTMLElement\",\n    \"HTMLPhraseElement\": \"HTMLElement\",\n    \"Position\": \"Geoposition\"\n  };\n  function getTagIE(o) {\n    var tag = getTag(o);\n    var newTag = quickMap[tag];\n    if (newTag) return newTag;\n    if (tag == \"Object\") {\n      if (window.DataView && (o instanceof window.DataView)) return \"DataView\";\n    }\n    return tag;\n  }\n  function prototypeForTagIE(tag) {\n    var constructor = window[tag];\n    if (constructor == null) return null;\n    return constructor.prototype;\n  }\n  hooks.getTag = getTagIE;\n  hooks.prototypeForTag = prototypeForTagIE;\n};\n"
@@ -51,7 +51,7 @@
   {
   "id": "constant/B.C_JS_CONST5 = function(hooks) {\n  var userAgent = typeof navigator == \"object\" ? navigator.userAgent : \"\";\n  if (userAgent.indexOf(\"Firefox\") == -1) return hooks;\n  var getTag = hooks.getTag;\n  var quickMap = {\n    \"BeforeUnloadEvent\": \"Event\",\n    \"DataTransfer\": \"Clipboard\",\n    \"GeoGeolocation\": \"Geolocation\",\n    \"Location\": \"!Location\",\n    \"WorkerMessageEvent\": \"MessageEvent\",\n    \"XMLDocument\": \"!Document\"};\n  function getTagFirefox(o) {\n    var tag = getTag(o);\n    return quickMap[tag] || tag;\n  }\n  hooks.getTag = getTagFirefox;\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 548,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST5 = function(hooks) {\n  var userAgent = typeof navigator == \"object\" ? navigator.userAgent : \"\";\n  if (userAgent.indexOf(\"Firefox\") == -1) return hooks;\n  var getTag = hooks.getTag;\n  var quickMap = {\n    \"BeforeUnloadEvent\": \"Event\",\n    \"DataTransfer\": \"Clipboard\",\n    \"GeoGeolocation\": \"Geolocation\",\n    \"Location\": \"!Location\",\n    \"WorkerMessageEvent\": \"MessageEvent\",\n    \"XMLDocument\": \"!Document\"};\n  function getTagFirefox(o) {\n    var tag = getTag(o);\n    return quickMap[tag] || tag;\n  }\n  hooks.getTag = getTagFirefox;\n};\n"
@@ -59,7 +59,7 @@
   {
   "id": "constant/B.C_JS_CONST6 = function(getTagFallback) {\n  return function(hooks) {\n    if (typeof navigator != \"object\") return hooks;\n    var ua = navigator.userAgent;\n    if (ua.indexOf(\"DumpRenderTree\") >= 0) return hooks;\n    if (ua.indexOf(\"Chrome\") >= 0) {\n      function confirm(p) {\n        return typeof window == \"object\" && window[p] && window[p].name == p;\n      }\n      if (confirm(\"Window\") && confirm(\"HTMLElement\")) return hooks;\n    }\n    hooks.getTag = getTagFallback;\n  };\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 482,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST6 = function(getTagFallback) {\n  return function(hooks) {\n    if (typeof navigator != \"object\") return hooks;\n    var ua = navigator.userAgent;\n    if (ua.indexOf(\"DumpRenderTree\") >= 0) return hooks;\n    if (ua.indexOf(\"Chrome\") >= 0) {\n      function confirm(p) {\n        return typeof window == \"object\" && window[p] && window[p].name == p;\n      }\n      if (confirm(\"Window\") && confirm(\"HTMLElement\")) return hooks;\n    }\n    hooks.getTag = getTagFallback;\n  };\n};\n"
@@ -67,7 +67,7 @@
   {
   "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 49,
   "outputUnit": "outputUnit/main",
   "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -75,7 +75,7 @@
   {
   "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 41,
   "outputUnit": "outputUnit/main",
   "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -83,7 +83,7 @@
   {
   "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 43,
   "outputUnit": "outputUnit/main",
   "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -91,7 +91,7 @@
   {
   "id": "constant/B.JavaScriptFunction_methods = J.JavaScriptFunction.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 63,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptFunction_methods = J.JavaScriptFunction.prototype;\n"
@@ -99,7 +99,7 @@
   {
   "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 59,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -107,7 +107,7 @@
   {
   "id": "constant/B.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 69,
   "outputUnit": "outputUnit/main",
   "code": "B.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype;\n"
@@ -115,7 +115,7 @@
   {
   "id": "constant/B.UnknownJavaScriptObject_methods = J.UnknownJavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 73,
   "outputUnit": "outputUnit/main",
   "code": "B.UnknownJavaScriptObject_methods = J.UnknownJavaScriptObject.prototype;\n"
@@ -196,7 +196,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "singleArg$1(receiver, p0) {\n      return receiver.singleArg(p0);\n    }",
-  "type": "dynamic Function(dynamic)"
+  "type": "dynamic Function(dynamic)",
+  "functionKind": 2
 }]*/
   external singleArg(a);
   /*member: Foo.singlePositionalArg:function=[{
@@ -225,7 +226,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "singlePositionalArg$1(receiver, p0) {\n      return receiver.singlePositionalArg(p0);\n    }\nsinglePositionalArg$0(receiver) {\n      return receiver.singlePositionalArg();\n    }",
-  "type": "dynamic Function([dynamic])"
+  "type": "dynamic Function([dynamic])",
+  "functionKind": 2
 }]*/
   external singlePositionalArg([dynamic? a]);
   /*member: Foo.mixedPositionalArgs:function=[{
@@ -259,7 +261,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "mixedPositionalArgs$1(receiver, p0) {\n      return receiver.mixedPositionalArgs(p0);\n    }\nmixedPositionalArgs$2(receiver, p0, p1) {\n      return receiver.mixedPositionalArgs(p0, p1);\n    }",
-  "type": "dynamic Function(dynamic,[dynamic])"
+  "type": "dynamic Function(dynamic,[dynamic])",
+  "functionKind": 2
 }]*/
   external mixedPositionalArgs(a, [dynamic? b]);
 }
@@ -308,7 +311,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "main() {\n      var foo, t1;\n      self.eval(\"    function Foo() {}\\n    Foo.prototype.singleArg = function(a) {\\n      return a;\\n    }\\n    Foo.prototype.singlePositionalArg = singleArg;\\n    Foo.prototype.mixedPositionalArgs = function(a, b) {\\n      if (arguments.length == 0) return a;\\n      return arguments[arguments.length - 1];\\n    }\\n    var Bar = {\\n      singleArg: function(a) {\\n        return a;\\n      },\\n      singlePositionalArg: singleArg,\\n      mixedPositionalArgs: function(a, b) {\\n        if (arguments.length == 0) return a;\\n        return arguments[arguments.length - 1];\\n      },\\n    };\\n    function singleArg(a) {\\n      return a;\\n    }\\n    var singlePositionalArg = singleArg;\\n    function mixedPositionalArgs(a, b) {\\n      if (arguments.length == 0) return a;\\n      return arguments[arguments.length - 1];\\n    }\\n  \");\n      foo = new self.Foo();\n      t1 = J.getInterceptor$x(foo);\n      A.Expect_equals(t1.singleArg$1(foo, 2), 2);\n      A.Expect_equals(t1.singlePositionalArg$1(foo, 2), 2);\n      A.Expect_equals(t1.singlePositionalArg$0(foo), null);\n      A.Expect_equals(t1.mixedPositionalArgs$1(foo, 3), 3);\n      A.Expect_equals(t1.mixedPositionalArgs$2(foo, 3, 4), 4);\n      A.Expect_equals(self.Bar.singleArg(2), 2);\n      A.Expect_equals(self.Bar.singlePositionalArg(2), 2);\n      A.Expect_equals(self.Bar.singlePositionalArg(), null);\n      A.Expect_equals(self.Bar.mixedPositionalArgs(3), 3);\n      A.Expect_equals(self.Bar.mixedPositionalArgs(3, 4), 4);\n      A.Expect_equals(self.singleArg(2), 2);\n      A.Expect_equals(self.singlePositionalArg(2), 2);\n      A.Expect_equals(self.singlePositionalArg(), null);\n      A.Expect_equals(self.mixedPositionalArgs(3), 3);\n      A.Expect_equals(self.mixedPositionalArgs(3, 4), 4);\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"function/dart:_interceptors::getNativeInterceptor","mask":null},
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index 4093694..5fa0d76 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -3,7 +3,7 @@
   {
   "id": "constant/B.C_A = new A.A();\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 19,
   "outputUnit": "outputUnit/main",
   "code": "B.C_A = new A.A();\n"
@@ -11,7 +11,7 @@
   {
   "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 131,
   "outputUnit": "outputUnit/main",
   "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -19,7 +19,7 @@
   {
   "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 49,
   "outputUnit": "outputUnit/main",
   "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -27,7 +27,7 @@
   {
   "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 41,
   "outputUnit": "outputUnit/main",
   "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -35,7 +35,7 @@
   {
   "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 43,
   "outputUnit": "outputUnit/main",
   "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -43,7 +43,7 @@
   {
   "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 59,
   "outputUnit": "outputUnit/main",
   "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -51,7 +51,7 @@
   {
   "id": "constant/B.List_A = A._setArrayType(makeConstList([B.C_A]), A.findType(\"JSArray<A>\"));\n",
   "kind": "constant",
-  "name": null,
+  "name": "",
   "size": 78,
   "outputUnit": "outputUnit/main",
   "code": "B.List_A = A._setArrayType(makeConstList([B.C_A]), A.findType(\"JSArray<A>\"));\n"
@@ -174,7 +174,8 @@
   "sideEffects": "SideEffects(reads static; writes static)",
   "inlinedCount": 1,
   "code": "",
-  "type": "bool Function()"
+  "type": "bool Function()",
+  "functionKind": 0
 }]*/
   static bool compute() {
     C.counter += 1;
@@ -207,7 +208,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function(Object)"
+  "type": "dynamic Function(Object)",
+  "functionKind": 3
 }]*/
   C._default(Object message) : value = message;
 
@@ -238,7 +240,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "C Function(dynamic)"
+  "type": "C Function(dynamic)",
+  "functionKind": 3
 }],
    holding=[
     {"id":"function/dart:core::Error.Error","mask":"inlined"},
@@ -269,7 +272,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 0,
   "code": "F() {\n    }\n_static_0(A, \"main__F$closure\", \"F\", 0);\n",
-  "type": "void Function()"
+  "type": "void Function()",
+  "functionKind": 0
 }]*/
 void F() {}
 
@@ -333,7 +337,8 @@
   "sideEffects": "SideEffects(reads nothing; writes nothing)",
   "inlinedCount": 1,
   "code": "",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 3
 }]*/
   const A() : a = "hello";
 }
@@ -375,7 +380,8 @@
   "sideEffects": "SideEffects(reads anything; writes anything)",
   "inlinedCount": 0,
   "code": "main() {\n      var r = [];\n      r.push([B.List_A, B.C_A, A.main__F$closure(), $.$get$C_y(), false, \"hello\"]);\n      r.push(B.C_A);\n      r.push(new A.C());\n      A.printString(A.S(r));\n    }",
-  "type": "dynamic Function()"
+  "type": "dynamic Function()",
+  "functionKind": 0
 }],
  holding=[
   {"id":"field/memory:sdk/tests/web/native/main.dart::C.y","mask":null},
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
index 043c93b..ace3a48 100644
--- a/pkg/dart2js_info/lib/binary_serialization.dart
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -183,6 +183,7 @@
   void visitFunction(FunctionInfo function) {
     sink.writeCached(function, (FunctionInfo info) {
       _visitBasicInfo(info);
+      sink.writeInt(info.functionKind);
       sink.writeList(info.closures, visitClosure);
       _visitFunctionModifiers(info.modifiers);
       sink.writeString(info.returnType);
@@ -279,14 +280,14 @@
           "$version.$minorVersion, but decoded with "
           "${info.version}.${info.minorVersion}");
     }
-    info.libraries = source.readList(readLibrary);
-    info.classes = source.readList(readClass);
-    info.classTypes = source.readList(readClassType);
-    info.functions = source.readList(readFunction);
-    info.typedefs = source.readList(readTypedef);
-    info.fields = source.readList(readField);
-    info.constants = source.readList(readConstant);
-    info.closures = source.readList(readClosure);
+    info.libraries.addAll(source.readList(readLibrary));
+    info.classes.addAll(source.readList(readClass));
+    info.classTypes.addAll(source.readList(readClassType));
+    info.functions.addAll(source.readList(readFunction));
+    info.typedefs.addAll(source.readList(readTypedef));
+    info.fields.addAll(source.readList(readField));
+    info.constants.addAll(source.readList(readConstant));
+    info.closures.addAll(source.readList(readClosure));
 
     void readDependencies(CodeInfo info) {
       info.uses = source.readList(_readDependencyInfo);
@@ -303,7 +304,7 @@
       dependenciesTotal--;
     }
 
-    info.outputUnits = source.readList(readOutput);
+    info.outputUnits.addAll(source.readList(readOutput));
 
     Map<String, Map<String, dynamic>> map =
         jsonDecode(source.readString()).cast<String, Map<String, dynamic>>();
@@ -324,21 +325,33 @@
   }
 
   ProgramInfo readProgram() {
-    var info = ProgramInfo();
-    info.entrypoint = readFunction();
-    info.size = source.readInt();
-    info.dart2jsVersion = source.readStringOrNull();
-    info.compilationMoment = readDate();
-    info.compilationDuration = readDuration();
-    info.toJsonDuration = Duration(microseconds: 0);
-    info.dumpInfoDuration = readDuration();
-    info.noSuchMethodEnabled = source.readBool();
-    info.isRuntimeTypeUsed = source.readBool();
-    info.isIsolateInUse = source.readBool();
-    info.isFunctionApplyUsed = source.readBool();
-    info.isMirrorsUsed = source.readBool();
-    info.minified = source.readBool();
-    return info;
+    final entrypoint = readFunction();
+    final size = source.readInt();
+    final dart2jsVersion = source.readStringOrNull();
+    final compilationMoment = readDate();
+    final compilationDuration = readDuration();
+    final toJsonDuration = Duration(microseconds: 0);
+    final dumpInfoDuration = readDuration();
+    final noSuchMethodEnabled = source.readBool();
+    final isRuntimeTypeUsed = source.readBool();
+    final isIsolateInUse = source.readBool();
+    final isFunctionApplyUsed = source.readBool();
+    final isMirrorsUsed = source.readBool();
+    final minified = source.readBool();
+    return ProgramInfo(
+        entrypoint: entrypoint,
+        size: size,
+        dart2jsVersion: dart2jsVersion,
+        compilationMoment: compilationMoment,
+        compilationDuration: compilationDuration,
+        toJsonDuration: toJsonDuration,
+        dumpInfoDuration: dumpInfoDuration,
+        noSuchMethodEnabled: noSuchMethodEnabled,
+        isRuntimeTypeUsed: isRuntimeTypeUsed,
+        isIsolateInUse: isIsolateInUse,
+        isFunctionApplyUsed: isFunctionApplyUsed,
+        isMirrorsUsed: isMirrorsUsed,
+        minified: minified);
   }
 
   void _readBasicInfo(BasicInfo info) {
@@ -353,11 +366,11 @@
         LibraryInfo info = LibraryInfo.internal();
         info.uri = source.readUri();
         _readBasicInfo(info);
-        info.topLevelFunctions = source.readList(readFunction);
-        info.topLevelVariables = source.readList(readField);
-        info.classes = source.readList(readClass);
-        info.classTypes = source.readList(readClassType);
-        info.typedefs = source.readList(readTypedef);
+        info.topLevelFunctions.addAll(source.readList(readFunction));
+        info.topLevelVariables.addAll(source.readList(readField));
+        info.classes.addAll(source.readList(readClass));
+        info.classTypes.addAll(source.readList(readClassType));
+        info.typedefs.addAll(source.readList(readTypedef));
 
         setParent(BasicInfo child) => child.parent = info;
         info.topLevelFunctions.forEach(setParent);
@@ -372,8 +385,8 @@
         ClassInfo info = ClassInfo.internal();
         _readBasicInfo(info);
         info.isAbstract = source.readBool();
-        info.fields = source.readList(readField);
-        info.functions = source.readList(readFunction);
+        info.fields.addAll(source.readList(readField));
+        info.functions.addAll(source.readList(readFunction));
 
         setParent(BasicInfo child) => child.parent = info;
         info.fields.forEach(setParent);
@@ -405,10 +418,10 @@
       });
 
   CodeSpan _readCodeSpan() {
-    return CodeSpan()
-      ..start = source.readIntOrNull()
-      ..end = source.readIntOrNull()
-      ..text = source.readStringOrNull();
+    final start = source.readIntOrNull();
+    final end = source.readIntOrNull();
+    final text = source.readStringOrNull();
+    return CodeSpan(start: start, end: end, text: text);
   }
 
   ConstantInfo _readConstantOrNull() {
@@ -441,6 +454,7 @@
   FunctionInfo readFunction() => source.readCached<FunctionInfo>(() {
         FunctionInfo info = FunctionInfo.internal();
         _readBasicInfo(info);
+        info.functionKind = source.readInt();
         info.closures = source.readList(readClosure);
         info.modifiers = _readFunctionModifiers();
         info.returnType = source.readString();
@@ -484,7 +498,7 @@
         OutputUnitInfo info = OutputUnitInfo.internal();
         _readBasicInfo(info);
         info.filename = source.readStringOrNull();
-        info.imports = source.readList(source.readString);
+        info.imports.addAll(source.readList(source.readString));
         return info;
       });
 }
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
index d274125..55c3c50 100644
--- a/pkg/dart2js_info/lib/info.dart
+++ b/pkg/dart2js_info/lib/info.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.11
-
 /// Data produced by dart2js when run with the `--dump-info` flag.
 library dart2js_info.info;
 
@@ -15,21 +13,21 @@
   InfoKind get kind;
 
   /// Name of the element associated with this info.
-  String name;
+  String get name;
 
   /// Id used by the compiler when instrumenting code for code coverage.
   // TODO(sigmund): It would be nice if we could use the same id for
   // serialization and for coverage. Could we unify them?
-  String coverageId;
+  String? get coverageId;
 
   /// Bytes used in the generated code for the corresponding element.
-  int size;
+  int get size;
 
   /// Info of the enclosing element.
-  Info parent;
+  Info? get parent;
 
   /// At which stage of the compiler this component was treeshaken.
-  TreeShakenStatus treeShakenStatus;
+  TreeShakenStatus get treeShakenStatus;
 
   T accept<T>(InfoVisitor<T> visitor);
 }
@@ -45,20 +43,20 @@
   final InfoKind kind;
 
   @override
-  String coverageId;
+  String? coverageId;
   @override
-  int size;
+  late int size;
   @override
-  Info parent;
+  Info? parent;
   @override
   TreeShakenStatus treeShakenStatus = TreeShakenStatus.Dead;
 
   @override
-  String name;
+  late String name;
 
   /// If using deferred libraries, where the element associated with this info
   /// is generated.
-  OutputUnitInfo outputUnit;
+  OutputUnitInfo? outputUnit;
 
   BasicInfo(this.kind, this.name, this.outputUnit, this.size, this.coverageId);
 
@@ -78,45 +76,45 @@
 /// The entire information produced while compiling a program.
 class AllInfo {
   /// Summary information about the program.
-  ProgramInfo program;
+  ProgramInfo? program;
 
   /// Information about each library processed by the compiler.
-  List<LibraryInfo> libraries = <LibraryInfo>[];
+  final List<LibraryInfo> libraries = <LibraryInfo>[];
 
   /// Information about each function (includes methods and getters in any
   /// library)
-  List<FunctionInfo> functions = <FunctionInfo>[];
+  final List<FunctionInfo> functions = <FunctionInfo>[];
 
   /// Information about type defs in the program.
-  List<TypedefInfo> typedefs = <TypedefInfo>[];
+  final List<TypedefInfo> typedefs = <TypedefInfo>[];
 
   /// Information about each class (in any library).
-  List<ClassInfo> classes = <ClassInfo>[];
+  final List<ClassInfo> classes = <ClassInfo>[];
 
   /// Information about each class type (in any library).
-  List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
+  final List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
 
   /// Information about fields (in any class).
-  List<FieldInfo> fields = <FieldInfo>[];
+  final List<FieldInfo> fields = <FieldInfo>[];
 
   /// Information about constants anywhere in the program.
   // TODO(sigmund): expand docs about canonicalization. We don't put these
   // inside library because a single constant can be used in more than one lib,
   // and we'll include it only once in the output.
-  List<ConstantInfo> constants = <ConstantInfo>[];
+  final List<ConstantInfo> constants = <ConstantInfo>[];
 
   /// Information about closures anywhere in the program.
-  List<ClosureInfo> closures = <ClosureInfo>[];
+  final List<ClosureInfo> closures = <ClosureInfo>[];
 
   /// Information about output units (should be just one entry if not using
   /// deferred loading).
-  List<OutputUnitInfo> outputUnits = <OutputUnitInfo>[];
+  final List<OutputUnitInfo> outputUnits = <OutputUnitInfo>[];
 
   /// Details about all deferred imports and what files would be loaded when the
   /// import is resolved.
   // TODO(sigmund): use a different format for dump-info. This currently emits
   // the same map that is created for the `--deferred-map` flag.
-  Map<String, Map<String, dynamic>> deferredFiles;
+  Map<String, Map<String, dynamic>>? deferredFiles;
 
   /// A new representation of dependencies from one info to another. An entry in
   /// this map indicates that an [Info] depends on another (e.g. a function
@@ -142,45 +140,45 @@
 }
 
 class ProgramInfo {
-  FunctionInfo entrypoint;
-  int size;
-  String dart2jsVersion;
-  DateTime compilationMoment;
-  Duration compilationDuration;
-  Duration toJsonDuration;
-  Duration dumpInfoDuration;
+  final FunctionInfo entrypoint;
+  final int size;
+  final String? dart2jsVersion;
+  final DateTime compilationMoment;
+  final Duration compilationDuration;
+  final Duration toJsonDuration;
+  final Duration dumpInfoDuration;
 
   /// `true` if `noSuchMethod` is used.
-  bool noSuchMethodEnabled;
+  final bool noSuchMethodEnabled;
 
   /// `true` if `Object.runtimeType` is used.
-  bool isRuntimeTypeUsed;
+  final bool isRuntimeTypeUsed;
 
   /// `true` if the `dart:isolate` library is in use.
-  bool isIsolateInUse;
+  final bool isIsolateInUse;
 
   /// `true` if `Function.apply` is used.
-  bool isFunctionApplyUsed;
+  final bool isFunctionApplyUsed;
 
   /// `true` if `dart:mirrors` features are used.
-  bool isMirrorsUsed;
+  final bool isMirrorsUsed;
 
-  bool minified;
+  final bool minified;
 
   ProgramInfo(
-      {this.entrypoint,
-      this.size,
-      this.dart2jsVersion,
-      this.compilationMoment,
-      this.compilationDuration,
-      this.toJsonDuration,
-      this.dumpInfoDuration,
-      this.noSuchMethodEnabled,
-      this.isRuntimeTypeUsed,
-      this.isIsolateInUse,
-      this.isFunctionApplyUsed,
-      this.isMirrorsUsed,
-      this.minified});
+      {required this.entrypoint,
+      required this.size,
+      required this.dart2jsVersion,
+      required this.compilationMoment,
+      required this.compilationDuration,
+      required this.toJsonDuration,
+      required this.dumpInfoDuration,
+      required this.noSuchMethodEnabled,
+      required this.isRuntimeTypeUsed,
+      required this.isIsolateInUse,
+      required this.isFunctionApplyUsed,
+      required this.isMirrorsUsed,
+      required this.minified});
 
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitProgram(this);
 }
@@ -188,22 +186,22 @@
 /// Info associated with a library element.
 class LibraryInfo extends BasicInfo {
   /// Canonical uri that identifies the library.
-  Uri uri;
+  late final Uri uri;
 
   /// Top level functions defined within the library.
-  List<FunctionInfo> topLevelFunctions = <FunctionInfo>[];
+  final List<FunctionInfo> topLevelFunctions = <FunctionInfo>[];
 
   /// Top level fields defined within the library.
-  List<FieldInfo> topLevelVariables = <FieldInfo>[];
+  final List<FieldInfo> topLevelVariables = <FieldInfo>[];
 
   /// Classes defined within the library.
-  List<ClassInfo> classes = <ClassInfo>[];
+  final List<ClassInfo> classes = <ClassInfo>[];
 
   /// Class types defined within the library.
-  List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
+  final List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
 
   /// Typedefs defined within the library.
-  List<TypedefInfo> typedefs = <TypedefInfo>[];
+  final List<TypedefInfo> typedefs = <TypedefInfo>[];
 
   // TODO(sigmund): add here a list of parts. That can help us improve how we
   // encode source-span information in metrics (rather than include the uri on
@@ -229,10 +227,10 @@
 /// program unless the application uses deferred imports, in which case there
 /// would be an additional output unit per deferred chunk.
 class OutputUnitInfo extends BasicInfo {
-  String filename;
+  late final String filename;
 
   /// The deferred imports that will load this output unit.
-  List<String> imports = <String>[];
+  final List<String> imports = <String>[];
 
   OutputUnitInfo(this.filename, String name, int size)
       : super(InfoKind.outputUnit, name, null, size, null);
@@ -246,19 +244,22 @@
 /// Information about a class element.
 class ClassInfo extends BasicInfo {
   /// Whether the class is abstract.
-  bool isAbstract;
+  late final bool isAbstract;
 
   // TODO(sigmund): split static vs instance vs closures
   /// Functions (static or instance) defined in the class.
-  List<FunctionInfo> functions = <FunctionInfo>[];
+  final List<FunctionInfo> functions = <FunctionInfo>[];
 
   /// Fields defined in the class.
   // TODO(sigmund): currently appears to only be populated with instance fields,
   // but this should be fixed.
-  List<FieldInfo> fields = <FieldInfo>[];
+  final List<FieldInfo> fields = <FieldInfo>[];
 
   ClassInfo(
-      {String name, this.isAbstract, OutputUnitInfo outputUnit, int size = 0})
+      {required String name,
+      required this.isAbstract,
+      OutputUnitInfo? outputUnit,
+      int size = 0})
       : super(InfoKind.clazz, name, outputUnit, size, null);
 
   ClassInfo.internal() : super.internal(InfoKind.clazz);
@@ -271,7 +272,8 @@
 /// [ClassInfo] because a class and its type may end up in different output
 /// units.
 class ClassTypeInfo extends BasicInfo {
-  ClassTypeInfo({String name, OutputUnitInfo outputUnit, int size = 0})
+  ClassTypeInfo(
+      {required String name, OutputUnitInfo? outputUnit, int size = 0})
       : super(InfoKind.classType, name, outputUnit, size, null);
 
   ClassTypeInfo.internal() : super.internal(InfoKind.classType);
@@ -285,27 +287,28 @@
 /// file of [BasicInfo.outputUnit].
 class CodeSpan {
   /// Start offset in the generated file.
-  int start;
+  late final int start;
 
   /// end offset in the generated file.
-  int end;
+  late final int end;
 
   /// The actual code (optional, blank when using a compact representation of
   /// the encoding).
-  String text;
+  String? text;
 
-  CodeSpan({this.start, this.end, this.text});
+  CodeSpan({required this.start, required this.end, this.text});
+  CodeSpan.empty();
 }
 
 /// Information about a constant value.
 // TODO(sigmund): add dependency data for ConstantInfo
 class ConstantInfo extends BasicInfo {
   /// The actual generated code for the constant.
-  List<CodeSpan> code;
+  late final List<CodeSpan> code;
 
   // TODO(sigmund): Add coverage support to constants?
-  ConstantInfo({int size = 0, this.code, OutputUnitInfo outputUnit})
-      : super(InfoKind.constant, null, outputUnit, size, null);
+  ConstantInfo({int size = 0, required this.code, OutputUnitInfo? outputUnit})
+      : super(InfoKind.constant, '', outputUnit, size, null);
 
   ConstantInfo.internal() : super.internal(InfoKind.constant);
 
@@ -316,33 +319,32 @@
 /// Information about a field element.
 class FieldInfo extends BasicInfo with CodeInfo {
   /// The type of the field.
-  String type;
+  late final String type;
 
   /// The type inferred by dart2js's whole program analysis
-  String inferredType;
+  late final String inferredType;
 
   /// Nested closures seen in the field initializer.
-  List<ClosureInfo> closures;
+  late final List<ClosureInfo> closures;
 
   /// The actual generated code for the field.
-  List<CodeSpan> code;
+  late final List<CodeSpan> code;
 
   /// Whether this corresponds to a const field declaration.
-  bool isConst;
+  late final bool isConst;
 
   /// When [isConst] is true, the constant initializer expression.
-  ConstantInfo initializer;
+  late final ConstantInfo initializer;
 
   FieldInfo(
-      {String name,
-      String coverageId,
+      {required String name,
+      String? coverageId,
       int size = 0,
-      this.type,
-      this.inferredType,
-      this.closures,
-      this.code,
-      OutputUnitInfo outputUnit,
-      this.isConst})
+      required this.type,
+      required this.inferredType,
+      required this.code,
+      OutputUnitInfo? outputUnit,
+      required this.isConst})
       : super(InfoKind.field, name, outputUnit, size, coverageId);
 
   FieldInfo.internal() : super.internal(InfoKind.field);
@@ -354,7 +356,7 @@
 /// Information about a typedef declaration.
 class TypedefInfo extends BasicInfo {
   /// The declared type.
-  String type;
+  late final String type;
 
   TypedefInfo(String name, this.type, OutputUnitInfo outputUnit)
       : super(InfoKind.typedef, name, outputUnit, 0, null);
@@ -373,51 +375,50 @@
   static const int CONSTRUCTOR_FUNCTION_KIND = 3;
 
   /// Kind of function (top-level function, closure, method, or constructor).
-  int functionKind;
+  late final int functionKind;
 
   /// Modifiers applied to this function.
-  FunctionModifiers modifiers;
+  late final FunctionModifiers modifiers;
 
   /// Nested closures that appear within the body of this function.
-  List<ClosureInfo> closures;
+  late final List<ClosureInfo> closures;
 
   /// The type of this function.
-  String type;
+  late final String type;
 
   /// The declared return type.
-  String returnType;
+  late final String returnType;
 
   /// The inferred return type.
-  String inferredReturnType;
+  late final String inferredReturnType;
 
   /// Name and type information for each parameter.
-  List<ParameterInfo> parameters;
+  late final List<ParameterInfo> parameters;
 
   /// Side-effects.
   // TODO(sigmund): serialize more precisely, not just a string representation.
-  String sideEffects;
+  late final String sideEffects;
 
   /// How many function calls were inlined into this function.
-  int inlinedCount;
+  late final int inlinedCount;
 
   /// The actual generated code.
-  List<CodeSpan> code;
+  late final List<CodeSpan> code;
 
   FunctionInfo(
-      {String name,
-      String coverageId,
-      OutputUnitInfo outputUnit,
+      {required String name,
+      String? coverageId,
+      OutputUnitInfo? outputUnit,
       int size = 0,
-      this.functionKind,
-      this.modifiers,
-      this.closures,
-      this.type,
-      this.returnType,
-      this.inferredReturnType,
-      this.parameters,
-      this.sideEffects,
-      this.inlinedCount,
-      this.code})
+      required this.functionKind,
+      required this.modifiers,
+      required this.type,
+      required this.returnType,
+      required this.inferredReturnType,
+      required this.parameters,
+      required this.sideEffects,
+      required this.inlinedCount,
+      required this.code})
       : super(InfoKind.function, name, outputUnit, size, coverageId);
 
   FunctionInfo.internal() : super.internal(InfoKind.function);
@@ -429,10 +430,9 @@
 /// Information about a closure, also known as a local function.
 class ClosureInfo extends BasicInfo {
   /// The function that is wrapped by this closure.
-  FunctionInfo function;
+  late final FunctionInfo function;
 
-  ClosureInfo(
-      {String name, OutputUnitInfo outputUnit, int size = 0, this.function})
+  ClosureInfo({required String name, OutputUnitInfo? outputUnit, int size = 0})
       : super(InfoKind.closure, name, outputUnit, size, null);
 
   ClosureInfo.internal() : super.internal(InfoKind.closure);
@@ -477,8 +477,8 @@
     this.isConst = false,
     this.isFactory = false,
     this.isExternal = false,
-    this.isGetter,
-    this.isSetter,
+    this.isGetter = false,
+    this.isSetter = false,
   });
 }
 
@@ -495,7 +495,7 @@
   closure,
 }
 
-String kindToString(InfoKind kind) {
+String? kindToString(InfoKind kind) {
   switch (kind) {
     case InfoKind.library:
       return 'library';
@@ -520,7 +520,7 @@
   }
 }
 
-InfoKind kindFromString(String kind) {
+InfoKind? kindFromString(String kind) {
   switch (kind) {
     case 'library':
       return InfoKind.library;
diff --git a/pkg/dart2js_info/lib/json_info_codec.dart b/pkg/dart2js_info/lib/json_info_codec.dart
index a6a4a71..16dd5c4 100644
--- a/pkg/dart2js_info/lib/json_info_codec.dart
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -176,6 +176,7 @@
   ConstantInfo parseConstant(Map json) {
     ConstantInfo result = parseId(json['id']);
     return result
+      ..name = json['name']
       ..code = parseCode(json['code'])
       ..size = json['size']
       ..outputUnit = parseId(json['outputUnit']);
@@ -191,43 +192,36 @@
   }
 
   ProgramInfo parseProgram(Map json) {
-    var programInfo = ProgramInfo()
-      ..entrypoint = parseId(json['entrypoint'])
-      ..size = json['size']
-      ..compilationMoment = DateTime.parse(json['compilationMoment'])
-      ..dart2jsVersion = json['dart2jsVersion']
-      ..noSuchMethodEnabled = json['noSuchMethodEnabled']
-      ..isRuntimeTypeUsed = json['isRuntimeTypeUsed']
-      ..isIsolateInUse = json['isIsolateInUse']
-      ..isFunctionApplyUsed = json['isFunctionApplyUsed']
-      ..isMirrorsUsed = json['isMirrorsUsed']
-      ..minified = json['minified'];
-
     // TODO(het): Revert this when the dart2js with the new codec is in stable
-    var compilationDuration = json['compilationDuration'];
-    if (compilationDuration is String) {
-      programInfo.compilationDuration = _parseDuration(compilationDuration);
-    } else {
-      assert(compilationDuration is int);
-      programInfo.compilationDuration =
-          Duration(microseconds: compilationDuration);
-    }
+    final compilationDuration = json['compilationDuration'];
+    final compilationDurationParsed = compilationDuration is String
+        ? _parseDuration(compilationDuration)
+        : Duration(microseconds: compilationDuration as int);
 
-    var toJsonDuration = json['toJsonDuration'];
-    if (toJsonDuration is String) {
-      programInfo.toJsonDuration = _parseDuration(toJsonDuration);
-    } else {
-      assert(toJsonDuration is int);
-      programInfo.toJsonDuration = Duration(microseconds: toJsonDuration);
-    }
+    final toJsonDuration = json['toJsonDuration'];
+    final toJsonDurationParsed = toJsonDuration is String
+        ? _parseDuration(toJsonDuration)
+        : Duration(microseconds: toJsonDuration as int);
 
-    var dumpInfoDuration = json['dumpInfoDuration'];
-    if (dumpInfoDuration is String) {
-      programInfo.dumpInfoDuration = _parseDuration(dumpInfoDuration);
-    } else {
-      assert(dumpInfoDuration is int);
-      programInfo.dumpInfoDuration = Duration(microseconds: dumpInfoDuration);
-    }
+    final dumpInfoDuration = json['dumpInfoDuration'];
+    final dumpInfoDurationParsed = dumpInfoDuration is String
+        ? _parseDuration(dumpInfoDuration)
+        : Duration(microseconds: dumpInfoDuration as int);
+
+    final programInfo = ProgramInfo(
+        entrypoint: parseId(json['entrypoint']),
+        size: json['size'],
+        compilationMoment: DateTime.parse(json['compilationMoment']),
+        dart2jsVersion: json['dart2jsVersion'],
+        noSuchMethodEnabled: json['noSuchMethodEnabled'],
+        isRuntimeTypeUsed: json['isRuntimeTypeUsed'],
+        isIsolateInUse: json['isIsolateInUse'],
+        isFunctionApplyUsed: json['isFunctionApplyUsed'],
+        isMirrorsUsed: json['isMirrorsUsed'],
+        minified: json['minified'],
+        compilationDuration: compilationDurationParsed,
+        toJsonDuration: toJsonDurationParsed,
+        dumpInfoDuration: dumpInfoDurationParsed);
 
     return programInfo;
   }
@@ -258,6 +252,7 @@
       ..coverageId = json['coverageId']
       ..outputUnit = parseId(json['outputUnit'])
       ..size = json['size']
+      ..functionKind = json['functionKind']
       ..type = json['type']
       ..returnType = json['returnType']
       ..inferredReturnType = json['inferredReturnType']
@@ -370,7 +365,7 @@
     String name;
     if (info is ConstantInfo) {
       // No name and no parent, so `longName` isn't helpful
-      assert(info.name == null);
+      assert(info.name.isEmpty);
       assert(info.parent == null);
       assert(info.code != null);
       // Instead, use the content of the code.
@@ -592,6 +587,7 @@
         'inlinedCount': info.inlinedCount,
         'code': _serializeCode(info.code),
         'type': info.type,
+        'functionKind': info.functionKind,
         // Note: version 3.2 of dump-info serializes `uses` in a section called
         // `holding` at the top-level.
       });
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
index 60bd5fa..7007203 100644
--- a/pkg/dart2js_info/lib/proto_info_codec.dart
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -43,7 +43,7 @@
     int id;
     if (info is ConstantInfo) {
       // No name and no parent, so `longName` isn't helpful
-      assert(info.name == null);
+      assert(info.name.isEmpty);
       assert(info.parent == null);
       assert(info.code != null);
       // Instead, use the content of the code.
diff --git a/pkg/dart2js_info/lib/src/binary/sink.dart b/pkg/dart2js_info/lib/src/binary/sink.dart
index 7c1f821..c430fa7 100644
--- a/pkg/dart2js_info/lib/src/binary/sink.dart
+++ b/pkg/dart2js_info/lib/src/binary/sink.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.11
-
 import 'dart:convert';
 import 'dart:typed_data';
 
@@ -89,7 +87,7 @@
 /// Mixin that implements all convenience methods of [DataSink].
 abstract class DataSinkMixin implements DataSink {
   @override
-  void writeIntOrNull(int value) {
+  void writeIntOrNull(int? value) {
     writeBool(value != null);
     if (value != null) {
       writeInt(value);
@@ -97,7 +95,7 @@
   }
 
   @override
-  void writeStringOrNull(String value) {
+  void writeStringOrNull(String? value) {
     writeBool(value != null);
     if (value != null) {
       writeString(value);
@@ -105,7 +103,7 @@
   }
 
   @override
-  void writeStrings(Iterable<String> values, {bool allowNull = false}) {
+  void writeStrings(Iterable<String>? values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -118,7 +116,7 @@
   }
 
   @override
-  void writeStringMap<V>(Map<String, V> map, void Function(V value) f,
+  void writeStringMap<V>(Map<String, V>? map, void Function(V value) f,
       {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
@@ -133,7 +131,7 @@
   }
 
   @override
-  void writeList<E>(Iterable<E> values, void Function(E value) f,
+  void writeList<E>(Iterable<E>? values, void Function(E value) f,
       {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
@@ -165,7 +163,7 @@
   /// If [value] has not been canonicalized yet, [writeValue] is called to
   /// serialize the [value] itself.
   void write(E value, void Function(E value) writeValue) {
-    int index = _cache[value];
+    int? index = _cache[value];
     if (index == null) {
       index = _cache.length;
       _cache[value] = index;
@@ -180,8 +178,8 @@
 /// Base implementation of [DataSink] using [DataSinkMixin] to implement
 /// convenience methods.
 abstract class AbstractDataSink extends DataSinkMixin implements DataSink {
-  IndexedSink<String> _stringIndex;
-  IndexedSink<Uri> _uriIndex;
+  late final IndexedSink<String> _stringIndex;
+  late final IndexedSink<Uri> _uriIndex;
   final Map<Type, IndexedSink> _generalCaches = {};
 
   AbstractDataSink() {
@@ -202,25 +200,21 @@
 
   @override
   void writeBool(bool value) {
-    assert(value != null);
     _writeIntInternal(value ? 1 : 0);
   }
 
   @override
   void writeUri(Uri value) {
-    assert(value != null);
     _writeUri(value);
   }
 
   @override
   void writeString(String value) {
-    assert(value != null);
     _writeString(value);
   }
 
   @override
   void writeInt(int value) {
-    assert(value != null);
     assert(value >= 0 && value >> 30 == 0);
     _writeIntInternal(value);
   }
@@ -252,7 +246,8 @@
 /// This data sink works together with [BinarySource].
 class BinarySink extends AbstractDataSink {
   final Sink<List<int>> sink;
-  BufferedSink _bufferedSink;
+  // Nullable so we can allow it to be GCed on close.
+  BufferedSink? _bufferedSink;
   int _length = 0;
 
   BinarySink(this.sink) : _bufferedSink = BufferedSink(sink);
@@ -266,7 +261,7 @@
   void _writeStringInternal(String value) {
     List<int> bytes = utf8.encode(value);
     _writeIntInternal(bytes.length);
-    _bufferedSink.addBytes(bytes);
+    _bufferedSink!.addBytes(bytes);
     _length += bytes.length;
   }
 
@@ -274,13 +269,13 @@
   void _writeIntInternal(int value) {
     assert(value >= 0 && value >> 30 == 0);
     if (value < 0x80) {
-      _bufferedSink.addByte(value);
+      _bufferedSink!.addByte(value);
       _length += 1;
     } else if (value < 0x4000) {
-      _bufferedSink.addByte2((value >> 8) | 0x80, value & 0xFF);
+      _bufferedSink!.addByte2((value >> 8) | 0x80, value & 0xFF);
       _length += 2;
     } else {
-      _bufferedSink.addByte4((value >> 24) | 0xC0, (value >> 16) & 0xFF,
+      _bufferedSink!.addByte4((value >> 24) | 0xC0, (value >> 16) & 0xFF,
           (value >> 8) & 0xFF, value & 0xFF);
       _length += 4;
     }
@@ -293,7 +288,7 @@
 
   @override
   void close() {
-    _bufferedSink.flushAndDestroy();
+    _bufferedSink!.flushAndDestroy();
     _bufferedSink = null;
     sink.close();
   }
@@ -316,19 +311,20 @@
   int flushedLength = 0;
 
   final Float64List _doubleBuffer = Float64List(1);
-  Uint8List _doubleBufferUint8;
+  Uint8List? _doubleBufferUint8;
 
   int get offset => length + flushedLength;
 
   BufferedSink(this._sink);
 
   void addDouble(double d) {
-    _doubleBufferUint8 ??= _doubleBuffer.buffer.asUint8List();
+    final doubleBufferUint8 =
+        _doubleBufferUint8 ??= _doubleBuffer.buffer.asUint8List();
     _doubleBuffer[0] = d;
-    addByte4(_doubleBufferUint8[0], _doubleBufferUint8[1],
-        _doubleBufferUint8[2], _doubleBufferUint8[3]);
-    addByte4(_doubleBufferUint8[4], _doubleBufferUint8[5],
-        _doubleBufferUint8[6], _doubleBufferUint8[7]);
+    addByte4(doubleBufferUint8[0], doubleBufferUint8[1], doubleBufferUint8[2],
+        doubleBufferUint8[3]);
+    addByte4(doubleBufferUint8[4], doubleBufferUint8[5], doubleBufferUint8[6],
+        doubleBufferUint8[7]);
   }
 
   void addByte(int byte) {
diff --git a/pkg/dart2js_info/lib/src/binary/source.dart b/pkg/dart2js_info/lib/src/binary/source.dart
index ef68784..e158364 100644
--- a/pkg/dart2js_info/lib/src/binary/source.dart
+++ b/pkg/dart2js_info/lib/src/binary/source.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.11
-
 import 'dart:convert';
 import 'dart:typed_data';
 
@@ -19,14 +17,14 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeValueOrNull].
-  E readValueOrNull<E>(E Function() f);
+  E? readValueOrNull<E>(E Function() f);
 
   /// Reads a list of [E] values from this data source. If [emptyAsNull] is
   /// `true`, `null` is returned instead of an empty list.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeList].
-  List<E> readList<E>(E Function() f, {bool emptyAsNull = false});
+  List<E>? readList<E>(E Function() f, {bool emptyAsNull = false});
 
   /// Reads a boolean value from this data source.
   bool readBool();
@@ -39,7 +37,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeIntOrNull].
-  int readIntOrNull();
+  int? readIntOrNull();
 
   /// Reads a string value from this data source.
   String readString();
@@ -48,14 +46,14 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStringOrNull].
-  String readStringOrNull();
+  String? readStringOrNull();
 
   /// Reads a list of string values from this data source. If [emptyAsNull] is
   /// `true`, `null` is returned instead of an empty list.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStrings].
-  List<String> readStrings({bool emptyAsNull = false});
+  List<String>? readStrings({bool emptyAsNull = false});
 
   /// Reads a map from string values to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -63,7 +61,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStringMap].
-  Map<String, V> readStringMap<V>(V Function() f, {bool emptyAsNull = false});
+  Map<String, V>? readStringMap<V>(V Function() f, {bool emptyAsNull = false});
 
   /// Reads an enum value from the list of enum [values] from this data source.
   ///
@@ -83,7 +81,7 @@
 /// Mixin that implements all convenience methods of [DataSource].
 abstract class DataSourceMixin implements DataSource {
   @override
-  E readValueOrNull<E>(E Function() f) {
+  E? readValueOrNull<E>(E Function() f) {
     bool hasValue = readBool();
     if (hasValue) {
       return f();
@@ -92,14 +90,14 @@
   }
 
   @override
-  List<E> readList<E>(E Function() f, {bool emptyAsNull = false}) {
+  List<E>? readList<E>(E Function() f, {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     return List.generate(count, (i) => f());
   }
 
   @override
-  int readIntOrNull() {
+  int? readIntOrNull() {
     bool hasValue = readBool();
     if (hasValue) {
       return readInt();
@@ -108,7 +106,7 @@
   }
 
   @override
-  String readStringOrNull() {
+  String? readStringOrNull() {
     bool hasValue = readBool();
     if (hasValue) {
       return readString();
@@ -117,14 +115,14 @@
   }
 
   @override
-  List<String> readStrings({bool emptyAsNull = false}) {
+  List<String>? readStrings({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     return List.generate(count, (index) => readString());
   }
 
   @override
-  Map<String, V> readStringMap<V>(V Function() f, {bool emptyAsNull = false}) {
+  Map<String, V>? readStringMap<V>(V Function() f, {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<String, V> map = {};
@@ -140,7 +138,7 @@
 /// Data source helper reads canonicalized [E] values through indices.
 class IndexedSource<E> {
   final int Function() _readInt;
-  final List<E> _cache = [];
+  final List<E?> _cache = [];
   final Set<int> _pending = {};
 
   IndexedSource(this._readInt);
@@ -160,7 +158,7 @@
       _cache[index] = value;
       return value;
     } else {
-      return _cache[index];
+      return _cache[index]!;
     }
   }
 }
@@ -169,8 +167,8 @@
 /// convenience methods.
 abstract class AbstractDataSource extends DataSourceMixin
     implements DataSource {
-  IndexedSource<String> _stringIndex;
-  IndexedSource<Uri> _uriIndex;
+  late final IndexedSource<String> _stringIndex;
+  late final IndexedSource<Uri> _uriIndex;
   final Map<Type, IndexedSource> _generalCaches = {};
 
   AbstractDataSource() {
diff --git a/pkg/dart2js_info/lib/src/graph.dart b/pkg/dart2js_info/lib/src/graph.dart
index 3c80ba2..c416b05 100644
--- a/pkg/dart2js_info/lib/src/graph.dart
+++ b/pkg/dart2js_info/lib/src/graph.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.11
-
 /// A library to work with graphs. It contains a couple algorithms, including
 /// Tarjan's algorithm to compute strongly connected components in a graph and
 /// Cooper et al's dominator algorithm.
@@ -74,7 +72,7 @@
   /// Returns a list of nodes that form a cycle containing the given node. If
   /// the node is not part of a cycle in this graph, then a list containing only
   /// the node itself will be returned.
-  List<N> findCycleContaining(N node) {
+  List<N>? findCycleContaining(N node) {
     assert(node != null);
     _SccFinder<N> finder = _SccFinder<N>(this);
     return finder._componentContaining(node);
@@ -105,10 +103,10 @@
   /// Internally we compute dominators using (Cooper, Harvey, and Kennedy's
   /// algorithm)[http://www.cs.rice.edu/~keith/EMBED/dom.pdf].
   Graph<N> dominatorTree(N root) {
-    var iDom = (_DominatorFinder(this)..run(root)).immediateDominators;
-    var graph = EdgeListGraph<N>();
+    final iDom = (_DominatorFinder(this)..run(root)).immediateDominators;
+    final graph = EdgeListGraph<N>();
     for (N node in iDom.keys) {
-      if (node != root) graph.addEdge(iDom[node], node);
+      if (node != root) graph.addEdge(iDom[node] as N, node);
     }
     return graph;
   }
@@ -136,12 +134,10 @@
   Iterable<N> sourcesOf(N source) => _revEdges[source] ?? _empty;
 
   void addEdge(N source, N target) {
-    assert(source != null);
-    assert(target != null);
     addNode(source);
     addNode(target);
-    _edges[source].add(target);
-    _revEdges[target].add(source);
+    _edges[source]!.add(target);
+    _revEdges[target]!.add(source);
   }
 
   void addNode(N node) {
@@ -165,7 +161,7 @@
     var sources = _revEdges[node];
     if (sources == null) return;
     for (var source in sources) {
-      _edges[source].remove(node);
+      _edges[source]!.remove(node);
     }
   }
 
@@ -189,7 +185,7 @@
   bool onStack = false;
 
   /// Component that contains the corresponding node.
-  List<N> component;
+  List<N>? component;
 
   _NodeInfo(int depth)
       : index = depth,
@@ -221,7 +217,7 @@
 
   /// Return a list containing the nodes that are part of the strongly connected
   /// component that contains the given node.
-  List<N> _componentContaining(N node) => _strongConnect(node).component;
+  List<N>? _componentContaining(N node) => _strongConnect(node).component;
 
   /// Run Tarjan's algorithm and return the resulting list of strongly connected
   /// components. The list is in topological sort order (each node in a strongly
@@ -238,13 +234,13 @@
   /// Remove and return the top-most element from the stack.
   N _pop() {
     N node = _stack.removeAt(_stack.length - 1);
-    _info[node].onStack = false;
+    _info[node]!.onStack = false;
     return node;
   }
 
   /// Add the given node to the stack.
   void _push(N node) {
-    _info[node].onStack = true;
+    _info[node]!.onStack = true;
     _stack.add(node);
   }
 
@@ -276,7 +272,7 @@
       do {
         w = _pop();
         component.add(w);
-        _info[w].component = component;
+        _info[w]!.component = component;
       } while (!identical(w, v));
       _allComponents.add(component);
     }
@@ -306,7 +302,7 @@
       for (var n in nodesInReversedPostOrder) {
         if (n == root) continue;
         bool first = true;
-        N idom;
+        late N idom;
         for (var p in _graph.sourcesOf(n)) {
           if (immediateDominators[p] != null) {
             if (first) {
@@ -329,11 +325,11 @@
     var finger1 = b1;
     var finger2 = b2;
     while (finger1 != finger2) {
-      while (postOrderId[finger1] < postOrderId[finger2]) {
-        finger1 = immediateDominators[finger1];
+      while (postOrderId[finger1]! < postOrderId[finger2]!) {
+        finger1 = immediateDominators[finger1] as N;
       }
-      while (postOrderId[finger2] < postOrderId[finger1]) {
-        finger2 = immediateDominators[finger2];
+      while (postOrderId[finger2]! < postOrderId[finger1]!) {
+        finger2 = immediateDominators[finger2] as N;
       }
     }
     return finger1;
diff --git a/pkg/dart2js_info/test/binary_serialization_test.dart b/pkg/dart2js_info/test/binary_serialization_test.dart
index 3abdf36..73869d5 100644
--- a/pkg/dart2js_info/test/binary_serialization_test.dart
+++ b/pkg/dart2js_info/test/binary_serialization_test.dart
@@ -28,6 +28,8 @@
       var helloWorld = File.fromUri(uri);
       var contents = helloWorld.readAsStringSync();
       var json = jsonDecode(contents);
+      // Clear toJsonDuration for consistency.
+      json['program']['toJsonDuration'] = 0;
       var info = AllInfoJsonCodec().decode(json);
 
       var sink = ByteSink();
@@ -35,7 +37,6 @@
       var info2 = binary.decode(sink.builder.toBytes());
       var json2 = AllInfoJsonCodec().encode(info2);
 
-      info.program.toJsonDuration = Duration(milliseconds: 0);
       var json1 = AllInfoJsonCodec().encode(info);
       var contents1 = const JsonEncoder.withIndent("  ").convert(json1);
       var contents2 = const JsonEncoder.withIndent("  ").convert(json2);
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
index 69acf21..9006151 100644
--- a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -15,7 +15,7 @@
         "id": "library/dart:_interceptors::",
         "kind": "library",
         "name": "_interceptors",
-        "size": 4197,
+        "size": 3634,
         "children": [
           "class/dart:_interceptors::ArrayIterator",
           "class/dart:_interceptors::Interceptor",
@@ -43,21 +43,11 @@
         ],
         "canonicalUri": "dart:_internal"
       },
-      "dart:_js_embedded_names::": {
-        "id": "library/dart:_js_embedded_names::",
-        "kind": "library",
-        "name": "dart2js._embedded_names",
-        "size": 0,
-        "children": [
-          "class/dart:_js_embedded_names::RtiUniverseFieldNames"
-        ],
-        "canonicalUri": "dart:_js_embedded_names"
-      },
       "dart:_js_helper::": {
         "id": "library/dart:_js_helper::",
         "kind": "library",
         "name": "_js_helper",
-        "size": 13726,
+        "size": 12952,
         "children": [
           "class/dart:_js_helper::BoundClosure",
           "class/dart:_js_helper::Closure",
@@ -65,10 +55,7 @@
           "class/dart:_js_helper::RuntimeError",
           "class/dart:_js_helper::StaticClosure",
           "class/dart:_js_helper::TearOffClosure",
-          "class/dart:_js_helper::_AssertionError",
           "function/dart:_js_helper::S",
-          "function/dart:_js_helper::assertThrow",
-          "function/dart:_js_helper::boolConversionCheck",
           "function/dart:_js_helper::closureFromTearOff",
           "function/dart:_js_helper::constructorNameFallback",
           "function/dart:_js_helper::diagnoseIndexError",
@@ -103,11 +90,21 @@
         ],
         "canonicalUri": "dart:_js_primitives"
       },
+      "dart:_js_shared_embedded_names::": {
+        "id": "library/dart:_js_shared_embedded_names::",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames"
+        ],
+        "canonicalUri": "dart:_js_shared_embedded_names"
+      },
       "dart:_late_helper::": {
         "id": "library/dart:_late_helper::",
         "kind": "library",
         "name": "_late_helper",
-        "size": 160,
+        "size": 155,
         "children": [
           "function/dart:_late_helper::throwLateFieldADI"
         ],
@@ -116,7 +113,7 @@
       "dart:_recipe_syntax::": {
         "id": "library/dart:_recipe_syntax::",
         "kind": "library",
-        "name": "dart2js._recipe_syntax",
+        "name": "js_shared._recipe_syntax",
         "size": 0,
         "children": [
           "class/dart:_recipe_syntax::Recipe"
@@ -127,7 +124,7 @@
         "id": "library/dart:_rti::",
         "kind": "library",
         "name": "rti",
-        "size": 52181,
+        "size": 52859,
         "children": [
           "class/dart:_rti::Rti",
           "class/dart:_rti::TypeRule",
@@ -233,7 +230,7 @@
         "id": "library/dart:core::",
         "kind": "library",
         "name": "dart.core",
-        "size": 5342,
+        "size": 5220,
         "children": [
           "class/dart:core::ArgumentError",
           "class/dart:core::AssertionError",
@@ -265,7 +262,7 @@
         "children": [
           "function/hello_world.dart::main"
         ],
-        "canonicalUri": "file:///Users/markzipan/Projects/dart-sdk/sdk/pkg/dart2js_info/test/hello_world/hello_world.dart"
+        "canonicalUri": "file:///usr/local/google/home/natebiggs/dart-sdk/sdk/pkg/dart2js_info/test/hello_world/hello_world.dart"
       }
     },
     "class": {
@@ -307,7 +304,7 @@
         "id": "class/dart:_interceptors::Interceptor",
         "kind": "class",
         "name": "Interceptor",
-        "size": 203,
+        "size": 198,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_interceptors::",
         "modifiers": {
@@ -408,7 +405,7 @@
         "id": "class/dart:_interceptors::JSString",
         "kind": "class",
         "name": "JSString",
-        "size": 390,
+        "size": 281,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_interceptors::",
         "modifiers": {
@@ -461,29 +458,11 @@
           "function/dart:_internal::LateError.toString"
         ]
       },
-      "dart:_js_embedded_names::RtiUniverseFieldNames": {
-        "id": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "kind": "class",
-        "name": "RtiUniverseFieldNames",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_js_embedded_names::",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.evalCache",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeRules"
-        ]
-      },
       "dart:_js_helper::BoundClosure": {
         "id": "class/dart:_js_helper::BoundClosure",
         "kind": "class",
         "name": "BoundClosure",
-        "size": 314,
+        "size": 304,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "modifiers": {
@@ -589,19 +568,22 @@
         },
         "children": []
       },
-      "dart:_js_helper::_AssertionError": {
-        "id": "class/dart:_js_helper::_AssertionError",
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
+        "id": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
         "kind": "class",
-        "name": "_AssertionError",
-        "size": 260,
+        "name": "RtiUniverseFieldNames",
+        "size": 0,
         "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_js_helper::",
+        "parent": "library/dart:_js_shared_embedded_names::",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "function/dart:_js_helper::_AssertionError._AssertionError",
-          "function/dart:_js_helper::_AssertionError.toString"
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
         ]
       },
       "dart:_recipe_syntax::Recipe": {
@@ -1009,7 +991,7 @@
         "id": "class/dart:core::CyclicInitializationError",
         "kind": "class",
         "name": "CyclicInitializationError",
-        "size": 413,
+        "size": 297,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -1041,7 +1023,7 @@
         "id": "class/dart:core::IndexError",
         "kind": "class",
         "name": "IndexError",
-        "size": 745,
+        "size": 618,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -1088,7 +1070,7 @@
         "id": "class/dart:core::Object",
         "kind": "class",
         "name": "Object",
-        "size": 263,
+        "size": 258,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -1251,7 +1233,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(JSArray<ArrayIterator.E>)"
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)",
+        "functionKind": 3
       },
       "dart:_interceptors::ArrayIterator.current": {
         "id": "function/dart:_interceptors::ArrayIterator.current",
@@ -1273,7 +1256,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "ArrayIterator.E Function()"
+        "type": "ArrayIterator.E Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::ArrayIterator.moveNext": {
         "id": "function/dart:_interceptors::ArrayIterator.moveNext",
@@ -1295,13 +1279,14 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "moveNext$0() {\n      var t2, _this = this,\n        t1 = _this._iterable,\n        $length = t1.length;\n      if (_this._length !== $length)\n        throw A.wrapException(A.throwConcurrentModificationError(t1));\n      t2 = _this._index;\n      if (t2 >= $length) {\n        _this.set$_current(null);\n        return false;\n      }\n      _this.set$_current(t1[t2]);\n      ++_this._index;\n      return true;\n    }",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::Interceptor.toString": {
         "id": "function/dart:_interceptors::Interceptor.toString",
         "kind": "function",
         "name": "toString",
-        "size": 109,
+        "size": 104,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_interceptors::Interceptor",
         "children": [],
@@ -1316,8 +1301,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(receiver)) + \"'\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.Primitives_objectTypeName(receiver) + \"'\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.add": {
         "id": "function/dart:_interceptors::JSArray.add",
@@ -1345,7 +1331,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "add$1(receiver, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.fixed$length)\n        A.throwExpression(A.UnsupportedError$(\"add\"));\n      receiver.push(value);\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.checkGrowable": {
         "id": "function/dart:_interceptors::JSArray.checkGrowable",
@@ -1373,7 +1360,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.isFixedLength": {
         "id": "function/dart:_interceptors::JSArray.isFixedLength",
@@ -1401,7 +1389,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.isGrowable": {
         "id": "function/dart:_interceptors::JSArray.isGrowable",
@@ -1429,7 +1418,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.iterator": {
         "id": "function/dart:_interceptors::JSArray.iterator",
@@ -1451,7 +1441,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Iterator<JSArray.E> Function()"
+        "type": "Iterator<JSArray.E> Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.length": {
         "id": "function/dart:_interceptors::JSArray.length",
@@ -1473,7 +1464,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(receiver) {\n      return receiver.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.markFixedList": {
         "id": "function/dart:_interceptors::JSArray.markFixedList",
@@ -1501,7 +1493,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.toString": {
         "id": "function/dart:_interceptors::JSArray.toString",
@@ -1523,7 +1516,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return A.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSBool.toString": {
         "id": "function/dart:_interceptors::JSBool.toString",
@@ -1545,7 +1539,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNull.toString": {
         "id": "function/dart:_interceptors::JSNull.toString",
@@ -1567,7 +1562,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return \"null\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNumber.toString": {
         "id": "function/dart:_interceptors::JSNumber.toString",
@@ -1589,13 +1585,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      if (receiver === 0 && 1 / receiver < 0)\n        return \"-0.0\";\n      else\n        return \"\" + receiver;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.+": {
         "id": "function/dart:_interceptors::JSString.+",
         "kind": "function",
         "name": "+",
-        "size": 169,
+        "size": 60,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_interceptors::JSString",
         "children": [],
@@ -1610,14 +1607,15 @@
         "parameters": [
           {
             "name": "other",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$add(receiver, other) {\n      if (typeof other != \"string\")\n        throw A.wrapException(A.ArgumentError$value(other, null, null));\n      return receiver + other;\n    }",
-        "type": "String Function(String)"
+        "code": "$add(receiver, other) {\n      return receiver + other;\n    }",
+        "type": "String Function(String)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.isEmpty": {
         "id": "function/dart:_interceptors::JSString.isEmpty",
@@ -1639,7 +1637,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.length": {
         "id": "function/dart:_interceptors::JSString.length",
@@ -1661,7 +1660,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(receiver) {\n      return receiver.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.toString": {
         "id": "function/dart:_interceptors::JSString.toString",
@@ -1683,7 +1683,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return receiver;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_internal::LateError.LateError.fieldADI": {
         "id": "function/dart:_internal::LateError.LateError.fieldADI",
@@ -1704,14 +1705,15 @@
         "parameters": [
           {
             "name": "fieldName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_internal::LateError.toString": {
         "id": "function/dart:_internal::LateError.toString",
@@ -1733,7 +1735,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"LateInitializationError: \" + this._message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_internal::printToConsole": {
         "id": "function/dart:_internal::printToConsole",
@@ -1761,7 +1764,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.BoundClosure": {
         "id": "function/dart:_js_helper::BoundClosure.BoundClosure",
@@ -1794,7 +1798,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::BoundClosure._computeFieldNamed": {
         "id": "function/dart:_js_helper::BoundClosure._computeFieldNamed",
@@ -1822,7 +1827,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure__computeFieldNamed(fieldName) {\n      var names, i, $name,\n        template = new A.BoundClosure(\"receiver\", \"interceptor\"),\n        t1 = Object.getOwnPropertyNames(template);\n      t1.fixed$length = Array;\n      names = t1;\n      for (t1 = names.length, i = 0; i < t1; ++i) {\n        $name = names[i];\n        if (template[$name] === fieldName)\n          return $name;\n      }\n      throw A.wrapException(new A.ArgumentError(false, null, null, \"Field name \" + fieldName + \" not found.\"));\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure._name": {
         "id": "function/dart:_js_helper::BoundClosure._name",
@@ -1844,7 +1850,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::BoundClosure.evalRecipe": {
         "id": "function/dart:_js_helper::BoundClosure.evalRecipe",
@@ -1861,7 +1868,7 @@
           "external": false
         },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "closure",
@@ -1877,7 +1884,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "BoundClosure_evalRecipe(closure, recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, A.instanceType(closure._receiver), recipe);\n    }",
-        "type": "dynamic Function(BoundClosure,String)"
+        "type": "dynamic Function(BoundClosure,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.interceptorFieldName": {
         "id": "function/dart:_js_helper::BoundClosure.interceptorFieldName",
@@ -1899,7 +1907,8 @@
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.interceptorOf": {
         "id": "function/dart:_js_helper::BoundClosure.interceptorOf",
@@ -1927,7 +1936,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure_interceptorOf(closure) {\n      return closure._interceptor;\n    }",
-        "type": "dynamic Function(BoundClosure)"
+        "type": "dynamic Function(BoundClosure)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.receiverFieldName": {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
@@ -1949,7 +1959,8 @@
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 3,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.receiverOf": {
         "id": "function/dart:_js_helper::BoundClosure.receiverOf",
@@ -1977,13 +1988,14 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure_receiverOf(closure) {\n      return closure._receiver;\n    }",
-        "type": "dynamic Function(BoundClosure)"
+        "type": "dynamic Function(BoundClosure)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.toString": {
         "id": "function/dart:_js_helper::BoundClosure.toString",
         "kind": "function",
         "name": "toString",
-        "size": 153,
+        "size": 143,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::BoundClosure",
         "children": [],
@@ -1998,14 +2010,15 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Closure '\" + A.S(this.$_name) + \"' of \" + (\"Instance of '\" + A.S(A.Primitives_objectTypeName(this._receiver)) + \"'\");\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Closure '\" + this.$_name + \"' of \" + (\"Instance of '\" + A.Primitives_objectTypeName(this._receiver) + \"'\");\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::Closure._computeSignatureFunctionNewRti": {
         "id": "function/dart:_js_helper::Closure._computeSignatureFunctionNewRti",
         "kind": "function",
         "name": "_computeSignatureFunctionNewRti",
-        "size": 596,
+        "size": 573,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -2020,30 +2033,31 @@
         "parameters": [
           {
             "name": "functionType",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "isStatic",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "isIntercepted",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (A.boolConversionCheck(isStatic))\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
-        "type": "dynamic Function(Object,bool,bool)"
+        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (isStatic)\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
+        "type": "dynamic Function(Object,bool,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.cspForwardCall": {
         "id": "function/dart:_js_helper::Closure.cspForwardCall",
         "kind": "function",
         "name": "cspForwardCall",
-        "size": 1644,
+        "size": 1621,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -2063,12 +2077,12 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           },
           {
@@ -2079,14 +2093,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
-        "type": "dynamic Function(int,bool,String?,dynamic)"
+        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (needsDirectAccess ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.cspForwardInterceptedCall": {
         "id": "function/dart:_js_helper::Closure.cspForwardInterceptedCall",
         "kind": "function",
         "name": "cspForwardInterceptedCall",
-        "size": 2256,
+        "size": 2233,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -2106,12 +2121,12 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           },
           {
@@ -2122,14 +2137,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
-        "type": "dynamic Function(int,bool,String?,dynamic)"
+        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (needsDirectAccess ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.forwardCallTo": {
         "id": "function/dart:_js_helper::Closure.forwardCallTo",
         "kind": "function",
         "name": "forwardCallTo",
-        "size": 377,
+        "size": 354,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -2144,7 +2160,7 @@
         "parameters": [
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -2154,19 +2170,20 @@
           },
           {
             "name": "isIntercepted",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1;\n      if (A.boolConversionCheck(isIntercepted))\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
-        "type": "dynamic Function(String,dynamic,bool,bool)"
+        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1;\n      if (isIntercepted)\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
+        "type": "dynamic Function(String,dynamic,bool,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.forwardInterceptedCallTo": {
         "id": "function/dart:_js_helper::Closure.forwardInterceptedCallTo",
@@ -2187,7 +2204,7 @@
         "parameters": [
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -2197,20 +2214,21 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess) {\n      var arity, t1;\n      if ($.BoundClosure__interceptorFieldNameCache == null)\n        $.BoundClosure__interceptorFieldNameCache = A.BoundClosure__computeFieldNamed(\"interceptor\");\n      if ($.BoundClosure__receiverFieldNameCache == null)\n        $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(\"receiver\");\n      arity = $function.length;\n      t1 = A.Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
-        "type": "dynamic Function(String,dynamic,bool)"
+        "type": "dynamic Function(String,dynamic,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.fromTearOff": {
         "id": "function/dart:_js_helper::Closure.fromTearOff",
         "kind": "function",
         "name": "fromTearOff",
-        "size": 2339,
+        "size": 2300,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -2231,8 +2249,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      A.boolConversionCheck(isStatic);\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else\n        $constructor = function tear_off(a, b) {\n          this.$initialize(a, b);\n        };\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
-        "type": "dynamic Function(Object?)"
+        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else\n        $constructor = function tear_off(a, b) {\n          this.$initialize(a, b);\n        };\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
+        "type": "dynamic Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.isCsp": {
         "id": "function/dart:_js_helper::Closure.isCsp",
@@ -2254,7 +2273,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.toString": {
         "id": "function/dart:_js_helper::Closure.toString",
@@ -2276,7 +2296,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var $constructor = this.constructor,\n        $name = $constructor == null ? null : $constructor.name;\n      return \"Closure '\" + A.unminifyOrTag($name == null ? \"unknown\" : $name) + \"'\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::Primitives._objectTypeNameNewRti": {
         "id": "function/dart:_js_helper::Primitives._objectTypeNameNewRti",
@@ -2293,7 +2314,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -2304,7 +2325,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Primitives__objectTypeNameNewRti(object) {\n      var interceptor, dispatchName, t1, $constructor, constructorName;\n      if (object instanceof A.Object)\n        return A._rtiToString(A.instanceType(object), null);\n      interceptor = J.getInterceptor$(object);\n      if (interceptor === B.Interceptor_methods || interceptor === B.JavaScriptObject_methods || false) {\n        dispatchName = B.C_JS_CONST(object);\n        t1 = dispatchName !== \"Object\" && dispatchName !== \"\";\n        if (t1)\n          return dispatchName;\n        $constructor = object.constructor;\n        if (typeof $constructor == \"function\") {\n          constructorName = $constructor.name;\n          if (typeof constructorName == \"string\")\n            t1 = constructorName !== \"Object\" && constructorName !== \"\";\n          else\n            t1 = false;\n          if (t1)\n            return constructorName;\n        }\n      }\n      return A._rtiToString(A.instanceType(object), null);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives._saneNativeClassName": {
         "id": "function/dart:_js_helper::Primitives._saneNativeClassName",
@@ -2332,7 +2354,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.flattenString": {
         "id": "function/dart:_js_helper::Primitives.flattenString",
@@ -2360,7 +2383,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.objectToHumanReadableString": {
         "id": "function/dart:_js_helper::Primitives.objectToHumanReadableString",
@@ -2388,7 +2412,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.objectTypeName": {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
@@ -2405,7 +2430,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -2416,7 +2441,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Primitives_objectTypeName(object) {\n      return A.Primitives__objectTypeNameNewRti(object);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.stringConcatUnchecked": {
         "id": "function/dart:_js_helper::Primitives.stringConcatUnchecked",
@@ -2449,7 +2475,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "String Function(String,String)"
+        "type": "String Function(String,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::RuntimeError.RuntimeError": {
         "id": "function/dart:_js_helper::RuntimeError.RuntimeError",
@@ -2477,7 +2504,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::RuntimeError.toString": {
         "id": "function/dart:_js_helper::RuntimeError.toString",
@@ -2499,13 +2527,14 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"RuntimeError: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::S": {
         "id": "function/dart:_js_helper::S",
         "kind": "function",
         "name": "S",
-        "size": 550,
+        "size": 407,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -2526,8 +2555,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "S(value) {\n      var result;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      result = J.toString$0$(value);\n      if (typeof result != \"string\")\n        throw A.wrapException(A.ArgumentError$value(value, \"object\", \"toString method returned 'null'\"));\n      return result;\n    }",
-        "type": "String Function(dynamic)"
+        "code": "S(value) {\n      var result;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      result = J.toString$0$(value);\n      return result;\n    }",
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::StaticClosure.StaticClosure": {
         "id": "function/dart:_js_helper::StaticClosure.StaticClosure",
@@ -2549,7 +2579,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_js_helper::StaticClosure.toString": {
         "id": "function/dart:_js_helper::StaticClosure.toString",
@@ -2571,113 +2602,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var $name = this.$static_name;\n      if ($name == null)\n        return \"Closure of unknown static method\";\n      return \"Closure '\" + A.unminifyOrTag($name) + \"'\";\n    }",
-        "type": "String Function()"
-      },
-      "dart:_js_helper::_AssertionError._AssertionError": {
-        "id": "function/dart:_js_helper::_AssertionError._AssertionError",
-        "kind": "function",
-        "name": "_AssertionError",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_helper::_AssertionError",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=_AssertionError]",
-        "parameters": [
-          {
-            "name": "message",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": "",
-        "type": "dynamic Function(Object)"
-      },
-      "dart:_js_helper::_AssertionError.toString": {
-        "id": "function/dart:_js_helper::_AssertionError.toString",
-        "kind": "function",
-        "name": "toString",
-        "size": 93,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_helper::_AssertionError",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Assertion failed: \" + A.Error_safeToString(this.message);\n    }",
-        "type": "String Function()"
-      },
-      "dart:_js_helper::assertThrow": {
-        "id": "function/dart:_js_helper::assertThrow",
-        "kind": "function",
-        "name": "assertThrow",
-        "size": 89,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_js_helper::",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "void",
-        "inferredReturnType": "[empty]",
-        "parameters": [
-          {
-            "name": "message",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "assertThrow(message) {\n      throw A.wrapException(new A._AssertionError(message));\n    }",
-        "type": "void Function(Object)"
-      },
-      "dart:_js_helper::boolConversionCheck": {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "kind": "function",
-        "name": "boolConversionCheck",
-        "size": 141,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_js_helper::",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "value",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "boolConversionCheck(value) {\n      if (value == null)\n        A.assertThrow(\"boolean expression must not be null\");\n      return value;\n    }",
-        "type": "bool Function(dynamic)"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::closureFromTearOff": {
         "id": "function/dart:_js_helper::closureFromTearOff",
@@ -2705,7 +2631,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "closureFromTearOff(parameters) {\n      return A.Closure_fromTearOff(parameters);\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::constructorNameFallback": {
         "id": "function/dart:_js_helper::constructorNameFallback",
@@ -2733,7 +2660,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(dynamic)"
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::diagnoseIndexError": {
         "id": "function/dart:_js_helper::diagnoseIndexError",
@@ -2766,7 +2694,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "diagnoseIndexError(indexable, index) {\n      var $length, _s5_ = \"index\";\n      if (!A._isInt(index))\n        return new A.ArgumentError(true, index, _s5_, null);\n      $length = J.get$length$as(indexable);\n      if (index < 0 || index >= $length)\n        return new A.IndexError($length, true, index, _s5_, \"Index out of range\");\n      return new A.RangeError(true, index, _s5_, \"Value not in range\");\n    }",
-        "type": "Error Function(dynamic,dynamic)"
+        "type": "Error Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::ioore": {
         "id": "function/dart:_js_helper::ioore",
@@ -2799,7 +2728,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "ioore(receiver, index) {\n      if (receiver == null)\n        J.get$length$as(receiver);\n      throw A.wrapException(A.diagnoseIndexError(receiver, index));\n    }",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::jsonEncodeNative": {
         "id": "function/dart:_js_helper::jsonEncodeNative",
@@ -2827,7 +2757,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwConcurrentModificationError": {
         "id": "function/dart:_js_helper::throwConcurrentModificationError",
@@ -2855,7 +2786,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "throwConcurrentModificationError(collection) {\n      throw A.wrapException(new A.ConcurrentModificationError(collection));\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwCyclicInit": {
         "id": "function/dart:_js_helper::throwCyclicInit",
@@ -2883,7 +2815,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "throwCyclicInit(staticName) {\n      throw A.wrapException(new A.CyclicInitializationError(staticName));\n    }",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwExpression": {
         "id": "function/dart:_js_helper::throwExpression",
@@ -2911,7 +2844,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "throwExpression(ex) {\n      throw A.wrapException(ex);\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::toStringWrapper": {
         "id": "function/dart:_js_helper::toStringWrapper",
@@ -2928,12 +2862,13 @@
           "external": false
         },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toStringWrapper() {\n      return J.toString$0$(this.dartException);\n    }",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::unminifyOrTag": {
         "id": "function/dart:_js_helper::unminifyOrTag",
@@ -2961,7 +2896,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::wrapException": {
         "id": "function/dart:_js_helper::wrapException",
@@ -2989,7 +2925,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "wrapException(ex) {\n      var wrapper, t1;\n      if (ex == null)\n        ex = new A.NullThrownError();\n      wrapper = new Error();\n      wrapper.dartException = ex;\n      t1 = A.toStringWrapper;\n      if (\"defineProperty\" in Object) {\n        Object.defineProperty(wrapper, \"message\", {get: t1});\n        wrapper.name = \"\";\n      } else\n        wrapper.toString = t1;\n      return wrapper;\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_names::unmangleGlobalNameIfPreservedAnyways": {
         "id": "function/dart:_js_names::unmangleGlobalNameIfPreservedAnyways",
@@ -3017,7 +2954,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String? Function(String)"
+        "type": "String? Function(String)",
+        "functionKind": 0
       },
       "dart:_js_primitives::printString": {
         "id": "function/dart:_js_primitives::printString",
@@ -3045,13 +2983,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "printString(string) {\n      if (typeof dartPrint == \"function\") {\n        dartPrint(string);\n        return;\n      }\n      if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n        console.log(string);\n        return;\n      }\n      if (typeof window == \"object\")\n        return;\n      if (typeof print == \"function\") {\n        print(string);\n        return;\n      }\n      throw \"Unable to print message: \" + String(string);\n    }",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_late_helper::throwLateFieldADI": {
         "id": "function/dart:_late_helper::throwLateFieldADI",
         "kind": "function",
         "name": "throwLateFieldADI",
-        "size": 160,
+        "size": 155,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_late_helper::",
         "children": [],
@@ -3072,8 +3011,9 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 0,
-        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + A.S(fieldName) + \"' has been assigned during initialization.\"));\n    }",
-        "type": "void Function(String)"
+        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + fieldName + \"' has been assigned during initialization.\"));\n    }",
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.digitValue": {
         "id": "function/dart:_recipe_syntax::Recipe.digitValue",
@@ -3101,7 +3041,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "int Function(int)"
+        "type": "int Function(int)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.isDigit": {
         "id": "function/dart:_recipe_syntax::Recipe.isDigit",
@@ -3129,7 +3070,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(int)"
+        "type": "bool Function(int)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.isIdentifierStart": {
         "id": "function/dart:_recipe_syntax::Recipe.isIdentifierStart",
@@ -3157,7 +3099,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(int)"
+        "type": "bool Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::Rti.Rti": {
         "id": "function/dart:_rti::Rti.Rti",
@@ -3179,7 +3122,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_rti::Rti._asCheck": {
         "id": "function/dart:_rti::Rti._asCheck",
@@ -3195,8 +3139,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "rti",
@@ -3212,7 +3156,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti,Object?)"
+        "type": "Object? Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._bind": {
         "id": "function/dart:_rti::Rti._bind",
@@ -3229,7 +3174,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "typeOrTuple",
@@ -3240,7 +3185,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_bind$1(typeOrTuple) {\n      return A._Universe_bind(init.typeUniverse, this, typeOrTuple);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 2
       },
       "dart:_rti::Rti._eval": {
         "id": "function/dart:_rti::Rti._eval",
@@ -3257,7 +3203,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "recipe",
@@ -3268,7 +3214,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_eval$1(recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, this, recipe);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 2
       },
       "dart:_rti::Rti._getBindCache": {
         "id": "function/dart:_rti::Rti._getBindCache",
@@ -3296,7 +3243,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getBindingArguments": {
         "id": "function/dart:_rti::Rti._getBindingArguments",
@@ -3317,14 +3265,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getBindingBase": {
         "id": "function/dart:_rti::Rti._getBindingBase",
@@ -3345,14 +3294,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getCanonicalRecipe": {
         "id": "function/dart:_rti::Rti._getCanonicalRecipe",
@@ -3373,14 +3323,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 9,
         "code": "Rti__getCanonicalRecipe(rti) {\n      return rti._canonicalRecipe;\n    }",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getEvalCache": {
         "id": "function/dart:_rti::Rti._getEvalCache",
@@ -3401,14 +3352,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFunctionParameters": {
         "id": "function/dart:_rti::Rti._getFunctionParameters",
@@ -3429,14 +3381,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "_FunctionParameters Function(Rti)"
+        "type": "_FunctionParameters Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFutureFromFutureOr": {
         "id": "function/dart:_rti::Rti._getFutureFromFutureOr",
@@ -3453,7 +3406,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -3462,14 +3415,15 @@
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Rti__getFutureFromFutureOr(universe, rti) {\n      var future = rti._precomputed1;\n      return future == null ? rti._precomputed1 = A._Universe__lookupInterfaceRti(universe, \"Future\", [rti._primary]) : future;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFutureOrArgument": {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
@@ -3490,14 +3444,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 10,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionBase": {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
@@ -3518,14 +3473,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionBounds": {
         "id": "function/dart:_rti::Rti._getGenericFunctionBounds",
@@ -3546,14 +3502,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionParameterIndex": {
         "id": "function/dart:_rti::Rti._getGenericFunctionParameterIndex",
@@ -3574,14 +3531,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "int Function(Rti)"
+        "type": "int Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getInterfaceName": {
         "id": "function/dart:_rti::Rti._getInterfaceName",
@@ -3602,14 +3560,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getInterfaceTypeArguments": {
         "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
@@ -3630,14 +3589,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 7,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getKind": {
         "id": "function/dart:_rti::Rti._getKind",
@@ -3658,14 +3618,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 26,
         "code": "",
-        "type": "int Function(Rti)"
+        "type": "int Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getPrecomputed1": {
         "id": "function/dart:_rti::Rti._getPrecomputed1",
@@ -3686,14 +3647,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getPrimary": {
         "id": "function/dart:_rti::Rti._getPrimary",
@@ -3714,14 +3676,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 48,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getQuestionArgument": {
         "id": "function/dart:_rti::Rti._getQuestionArgument",
@@ -3742,14 +3705,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getQuestionFromStar": {
         "id": "function/dart:_rti::Rti._getQuestionFromStar",
@@ -3766,7 +3730,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -3775,14 +3739,15 @@
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Rti__getQuestionFromStar(universe, rti) {\n      var question = rti._precomputed1;\n      return question == null ? rti._precomputed1 = A._Universe__lookupQuestionRti(universe, rti._primary, true) : question;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getRest": {
         "id": "function/dart:_rti::Rti._getRest",
@@ -3803,14 +3768,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 19,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getReturnType": {
         "id": "function/dart:_rti::Rti._getReturnType",
@@ -3831,14 +3797,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getSpecializedTestResource": {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
@@ -3866,7 +3833,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getStarArgument": {
         "id": "function/dart:_rti::Rti._getStarArgument",
@@ -3887,14 +3855,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 8,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._isCheck": {
         "id": "function/dart:_rti::Rti._isCheck",
@@ -3927,7 +3896,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "bool Function(Rti,Object?)"
+        "type": "bool Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._isUnionOfFunctionType": {
         "id": "function/dart:_rti::Rti._isUnionOfFunctionType",
@@ -3955,7 +3925,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "Rti__isUnionOfFunctionType(rti) {\n      var kind = rti._kind;\n      if (kind === 6 || kind === 7 || kind === 8)\n        return A.Rti__isUnionOfFunctionType(rti._primary);\n      return kind === 11 || kind === 12;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setAsCheckFunction": {
         "id": "function/dart:_rti::Rti._setAsCheckFunction",
@@ -3988,7 +3959,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setBindCache": {
         "id": "function/dart:_rti::Rti._setBindCache",
@@ -4021,7 +3993,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setCanonicalRecipe": {
         "id": "function/dart:_rti::Rti._setCanonicalRecipe",
@@ -4054,7 +4027,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 9,
         "code": "",
-        "type": "void Function(Rti,String)"
+        "type": "void Function(Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setEvalCache": {
         "id": "function/dart:_rti::Rti._setEvalCache",
@@ -4075,7 +4049,7 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -4087,7 +4061,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setIsTestFunction": {
         "id": "function/dart:_rti::Rti._setIsTestFunction",
@@ -4120,7 +4095,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setKind": {
         "id": "function/dart:_rti::Rti._setKind",
@@ -4153,7 +4129,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 9,
         "code": "",
-        "type": "void Function(Rti,int)"
+        "type": "void Function(Rti,int)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setPrecomputed1": {
         "id": "function/dart:_rti::Rti._setPrecomputed1",
@@ -4174,7 +4151,7 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -4186,7 +4163,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setPrimary": {
         "id": "function/dart:_rti::Rti._setPrimary",
@@ -4212,14 +4190,15 @@
           },
           {
             "name": "value",
-            "type": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+            "type": "Union([exact=JSString], [exact=Rti], [subclass=JSInt])",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 8,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setRest": {
         "id": "function/dart:_rti::Rti._setRest",
@@ -4252,7 +4231,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setSpecializedTestResource": {
         "id": "function/dart:_rti::Rti._setSpecializedTestResource",
@@ -4285,7 +4265,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti.allocate": {
         "id": "function/dart:_rti::Rti.allocate",
@@ -4307,7 +4288,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "Rti Function()"
+        "type": "Rti Function()",
+        "functionKind": 0
       },
       "dart:_rti::TypeRule.lookupSupertype": {
         "id": "function/dart:_rti::TypeRule.lookupSupertype",
@@ -4340,7 +4322,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic>? Function(Object?,String)"
+        "type": "JSArray<dynamic>? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::TypeRule.lookupTypeVariable": {
         "id": "function/dart:_rti::TypeRule.lookupTypeVariable",
@@ -4373,13 +4356,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String? Function(Object?,String)"
+        "type": "String? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Error.compose": {
         "id": "function/dart:_rti::_Error.compose",
         "kind": "function",
         "name": "compose",
-        "size": 323,
+        "size": 313,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Error",
         "children": [],
@@ -4404,14 +4388,15 @@
           },
           {
             "name": "checkedTypeDescription",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object);\n      return objectDescription + \": type '\" + A.S(A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null)) + \"' is not a subtype of type '\" + A.S(checkedTypeDescription) + \"'\";\n    }",
-        "type": "String Function(Object?,Rti?,String)"
+        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object);\n      return objectDescription + \": type '\" + A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null) + \"' is not a subtype of type '\" + checkedTypeDescription + \"'\";\n    }",
+        "type": "String Function(Object?,Rti?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Error.toString": {
         "id": "function/dart:_rti::_Error.toString",
@@ -4433,7 +4418,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return this.__rti$_message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_rti::_FunctionParameters._FunctionParameters": {
         "id": "function/dart:_rti::_FunctionParameters._FunctionParameters",
@@ -4455,7 +4441,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_rti::_FunctionParameters._getNamed": {
         "id": "function/dart:_rti::_FunctionParameters._getNamed",
@@ -4483,7 +4470,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._getOptionalPositional": {
         "id": "function/dart:_rti::_FunctionParameters._getOptionalPositional",
@@ -4511,7 +4499,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._getRequiredPositional": {
         "id": "function/dart:_rti::_FunctionParameters._getRequiredPositional",
@@ -4539,7 +4528,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setNamed": {
         "id": "function/dart:_rti::_FunctionParameters._setNamed",
@@ -4572,7 +4562,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setOptionalPositional": {
         "id": "function/dart:_rti::_FunctionParameters._setOptionalPositional",
@@ -4605,7 +4596,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setRequiredPositional": {
         "id": "function/dart:_rti::_FunctionParameters._setRequiredPositional",
@@ -4638,7 +4630,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters.allocate": {
         "id": "function/dart:_rti::_FunctionParameters.allocate",
@@ -4660,7 +4653,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "_FunctionParameters Function()"
+        "type": "_FunctionParameters Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.charCodeAt": {
         "id": "function/dart:_rti::_Parser.charCodeAt",
@@ -4693,7 +4687,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "int Function(String,int)"
+        "type": "int Function(String,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.collectArray": {
         "id": "function/dart:_rti::_Parser.collectArray",
@@ -4714,19 +4709,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.collectNamed": {
         "id": "function/dart:_rti::_Parser.collectNamed",
@@ -4747,19 +4743,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.create": {
         "id": "function/dart:_rti::_Parser.create",
@@ -4790,7 +4787,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -4802,7 +4799,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_Parser_create(universe, environment, recipe, normalize) {\n      return {u: universe, e: environment, r: recipe, s: [], p: 0, n: normalize};\n    }",
-        "type": "Object Function(Object?,Object?,String,bool)"
+        "type": "Object Function(Object?,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.environment": {
         "id": "function/dart:_rti::_Parser.environment",
@@ -4823,14 +4821,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 12,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleDigit": {
         "id": "function/dart:_rti::_Parser.handleDigit",
@@ -4866,14 +4865,15 @@
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleDigit(i, digit, source, stack) {\n      var t1, ch,\n        value = digit - 48;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (!(ch >= 48 && ch <= 57))\n          break;\n        value = value * 10 + (ch - 48);\n      }\n      stack.push(value);\n      return i;\n    }",
-        "type": "int Function(int,int,String,Object?)"
+        "type": "int Function(int,int,String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleExtendedOperations": {
         "id": "function/dart:_rti::_Parser.handleExtendedOperations",
@@ -4894,19 +4894,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleExtendedOperations(parser, stack) {\n      var $top = stack.pop();\n      if (0 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 1, \"0&\"));\n        return;\n      }\n      if (1 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 4, \"1&\"));\n        return;\n      }\n      throw A.wrapException(A.AssertionError$(\"Unexpected extended operation \" + A.S($top)));\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleFunctionArguments": {
         "id": "function/dart:_rti::_Parser.handleFunctionArguments",
@@ -4927,19 +4928,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleIdentifier": {
         "id": "function/dart:_rti::_Parser.handleIdentifier",
@@ -4960,7 +4962,7 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -4975,7 +4977,7 @@
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -4987,7 +4989,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleIdentifier(parser, start, source, stack, hasPeriod) {\n      var t1, ch, t2, string, environment, recipe,\n        i = start + 1;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (ch === 46) {\n          if (hasPeriod)\n            break;\n          hasPeriod = true;\n        } else {\n          if (!((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36))\n            t2 = ch >= 48 && ch <= 57;\n          else\n            t2 = true;\n          if (!t2)\n            break;\n        }\n      }\n      string = source.substring(start, i);\n      if (hasPeriod) {\n        t1 = parser.u;\n        environment = parser.e;\n        if (environment._kind === 10)\n          environment = environment._primary;\n        recipe = A._Universe_findRule(t1, environment._primary)[string];\n        if (recipe == null)\n          A.throwExpression('No \"' + string + '\" in \"' + A.Rti__getCanonicalRecipe(environment) + '\"');\n        stack.push(A._Universe_evalInEnvironment(t1, environment, recipe));\n      } else\n        stack.push(string);\n      return i;\n    }",
-        "type": "int Function(Object?,int,String,Object?,bool)"
+        "type": "int Function(Object?,int,String,Object?,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleNamedGroup": {
         "id": "function/dart:_rti::_Parser.handleNamedGroup",
@@ -5008,19 +5011,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleOptionalGroup": {
         "id": "function/dart:_rti::_Parser.handleOptionalGroup",
@@ -5041,19 +5045,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleTypeArguments": {
         "id": "function/dart:_rti::_Parser.handleTypeArguments",
@@ -5074,19 +5079,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.indexToType": {
         "id": "function/dart:_rti::_Parser.indexToType",
@@ -5124,7 +5130,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_indexToType(universe, environment, index) {\n      var typeArguments, len,\n        kind = environment._kind;\n      if (kind === 10) {\n        if (index === 0)\n          return environment._primary;\n        typeArguments = environment._rest;\n        len = typeArguments.length;\n        if (index <= len)\n          return typeArguments[index - 1];\n        index -= len;\n        environment = environment._primary;\n        kind = environment._kind;\n      } else if (index === 0)\n        return environment;\n      if (kind !== 9)\n        throw A.wrapException(A.AssertionError$(\"Indexed base must be an interface type\"));\n      typeArguments = environment._rest;\n      if (index <= typeArguments.length)\n        return typeArguments[index - 1];\n      throw A.wrapException(A.AssertionError$(\"Bad index \" + index + \" for \" + environment.toString$0(0)));\n    }",
-        "type": "Rti Function(Object?,Rti,int)"
+        "type": "Rti Function(Object?,Rti,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.normalize": {
         "id": "function/dart:_rti::_Parser.normalize",
@@ -5145,20 +5152,21 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.parse": {
         "id": "function/dart:_rti::_Parser.parse",
         "kind": "function",
         "name": "parse",
-        "size": 5256,
+        "size": 5040,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Parser",
         "children": [],
@@ -5169,18 +5177,19 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Parser_parse(parser) {\n      var t1, i, ch, universe, array, head, base, u, parameters, optionalPositional, named, item,\n        source = parser.r,\n        stack = parser.s;\n      for (t1 = source.length, i = 0; i < t1;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, stack);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              stack.push(false);\n              break;\n            case 33:\n              stack.push(true);\n              break;\n            case 59:\n              stack.push(A._Parser_toType(parser.u, parser.e, stack.pop()));\n              break;\n            case 94:\n              stack.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, stack.pop()));\n              break;\n            case 35:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 62:\n              universe = parser.u;\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              head = stack.pop();\n              if (typeof head == \"string\")\n                stack.push(A._Universe__lookupInterfaceRti(universe, head, array));\n              else {\n                base = A._Parser_toType(universe, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    stack.push(A._Universe__lookupGenericFunctionRti(universe, base, array, parser.n));\n                    break;\n                  default:\n                    stack.push(A._Universe__lookupBindingRti(universe, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, stack);\n              break;\n            case 42:\n              u = parser.u;\n              stack.push(A._Universe__lookupStarRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 63:\n              u = parser.u;\n              stack.push(A._Universe__lookupQuestionRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 47:\n              u = parser.u;\n              stack.push(A._Universe__lookupFutureOrRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 40:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 41:\n              universe = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = universe.sEA;\n              named = universe.sEA;\n              head = stack.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = stack.pop();\n                    break;\n                  case -2:\n                    named = stack.pop();\n                    break;\n                  default:\n                    stack.push(head);\n                    break;\n                }\n              else\n                stack.push(head);\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              stack.push(A._Universe__lookupFunctionRti(universe, A._Parser_toType(universe, parser.e, stack.pop()), parameters));\n              break;\n            case 91:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 93:\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-1);\n              break;\n            case 123:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 125:\n              array = stack.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = stack.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
-        "type": "Rti Function(Object?)"
+        "code": "_Parser_parse(parser) {\n      var t2, i, ch, t3, array, head, base, parameters, optionalPositional, named, item,\n        source = parser.r,\n        t1 = parser.s;\n      for (t2 = source.length, i = 0; i < t2;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, t1);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, t1, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, t1, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              t1.push(false);\n              break;\n            case 33:\n              t1.push(true);\n              break;\n            case 59:\n              t1.push(A._Parser_toType(parser.u, parser.e, t1.pop()));\n              break;\n            case 94:\n              t1.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, t1.pop()));\n              break;\n            case 35:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 62:\n              t3 = parser.u;\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              head = t1.pop();\n              if (typeof head == \"string\")\n                t1.push(A._Universe__lookupInterfaceRti(t3, head, array));\n              else {\n                base = A._Parser_toType(t3, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    t1.push(A._Universe__lookupGenericFunctionRti(t3, base, array, parser.n));\n                    break;\n                  default:\n                    t1.push(A._Universe__lookupBindingRti(t3, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, t1);\n              break;\n            case 42:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupStarRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 63:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupQuestionRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 47:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupFutureOrRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 40:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 41:\n              t3 = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = t3.sEA;\n              named = t3.sEA;\n              head = t1.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = t1.pop();\n                    break;\n                  case -2:\n                    named = t1.pop();\n                    break;\n                  default:\n                    t1.push(head);\n                    break;\n                }\n              else\n                t1.push(head);\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              t1.push(A._Universe__lookupFunctionRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parameters));\n              break;\n            case 91:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 93:\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              t1.push(array);\n              t1.push(-1);\n              break;\n            case 123:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 125:\n              array = t1.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              t1.push(array);\n              t1.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = t1.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.pop": {
         "id": "function/dart:_rti::_Parser.pop",
@@ -5201,14 +5210,15 @@
         "parameters": [
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 16,
         "code": "",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.position": {
         "id": "function/dart:_rti::_Parser.position",
@@ -5229,14 +5239,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 8,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.push": {
         "id": "function/dart:_rti::_Parser.push",
@@ -5257,7 +5268,7 @@
         "parameters": [
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -5269,7 +5280,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 29,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.pushStackFrame": {
         "id": "function/dart:_rti::_Parser.pushStackFrame",
@@ -5290,19 +5302,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.recipe": {
         "id": "function/dart:_rti::_Parser.recipe",
@@ -5323,14 +5336,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.setPosition": {
         "id": "function/dart:_rti::_Parser.setPosition",
@@ -5351,7 +5365,7 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -5363,7 +5377,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 8,
         "code": "",
-        "type": "void Function(Object?,int)"
+        "type": "void Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.stack": {
         "id": "function/dart:_rti::_Parser.stack",
@@ -5384,14 +5399,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toGenericFunctionParameter": {
         "id": "function/dart:_rti::_Parser.toGenericFunctionParameter",
@@ -5408,7 +5424,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -5424,7 +5440,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Object?)"
+        "type": "Rti Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toType": {
         "id": "function/dart:_rti::_Parser.toType",
@@ -5441,7 +5458,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -5462,7 +5479,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toType(universe, environment, item) {\n      if (typeof item == \"string\")\n        return A._Universe__lookupInterfaceRti(universe, item, universe.sEA);\n      else if (typeof item == \"number\")\n        return A._Parser_indexToType(universe, environment, item);\n      else\n        return item;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?)"
+        "type": "Rti Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toTypes": {
         "id": "function/dart:_rti::_Parser.toTypes",
@@ -5500,7 +5518,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toTypes(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 0; i < $length; ++i)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
-        "type": "void Function(Object?,Rti,Object?)"
+        "type": "void Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toTypesNamed": {
         "id": "function/dart:_rti::_Parser.toTypesNamed",
@@ -5538,7 +5557,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toTypesNamed(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 2; i < $length; i += 3)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
-        "type": "void Function(Object?,Rti,Object?)"
+        "type": "void Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.universe": {
         "id": "function/dart:_rti::_Parser.universe",
@@ -5559,14 +5579,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 18,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_TypeError._TypeError.forType": {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
@@ -5599,7 +5620,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_TypeError__TypeError$forType(object, type) {\n      return new A._TypeError(\"TypeError: \" + A._Error_compose(object, null, type));\n    }",
-        "type": "_TypeError Function(dynamic,String)"
+        "type": "_TypeError Function(dynamic,String)",
+        "functionKind": 3
       },
       "dart:_rti::_TypeError._TypeError.fromMessage": {
         "id": "function/dart:_rti::_TypeError._TypeError.fromMessage",
@@ -5627,7 +5649,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "_TypeError$fromMessage(message) {\n      return new A._TypeError(\"TypeError: \" + message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_rti::_Universe._canonicalRecipeJoin": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeJoin",
@@ -5655,7 +5678,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe__canonicalRecipeJoin($arguments) {\n      var s, sep, i,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; ++i, sep = \",\")\n        s += sep + $arguments[i]._canonicalRecipe;\n      return s;\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeJoinNamed": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeJoinNamed",
@@ -5683,7 +5707,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe__canonicalRecipeJoinNamed($arguments) {\n      var s, sep, i, t1, nameSep,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; i += 3, sep = \",\") {\n        t1 = $arguments[i];\n        nameSep = $arguments[i + 1] ? \"!\" : \":\";\n        s += sep + t1 + nameSep + $arguments[i + 2]._canonicalRecipe;\n      }\n      return s;\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfAny": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfAny",
@@ -5705,7 +5730,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfBinding": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfBinding",
@@ -5726,7 +5752,7 @@
         "parameters": [
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -5738,7 +5764,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,Object?)"
+        "type": "String Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfDynamic": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfDynamic",
@@ -5760,7 +5787,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfErased": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfErased",
@@ -5782,7 +5810,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFunction": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFunction",
@@ -5803,7 +5832,7 @@
         "parameters": [
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -5815,7 +5844,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,_FunctionParameters)"
+        "type": "String Function(Rti,_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFunctionParameters": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFunctionParameters",
@@ -5843,7 +5873,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(_FunctionParameters)"
+        "type": "String Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFutureOr": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFutureOr",
@@ -5864,14 +5895,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfGenericFunction": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfGenericFunction",
@@ -5892,7 +5924,7 @@
         "parameters": [
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -5904,7 +5936,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,Object?)"
+        "type": "String Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfGenericFunctionParameter": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfGenericFunctionParameter",
@@ -5932,7 +5965,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(int)"
+        "type": "String Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfInterface": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfInterface",
@@ -5953,7 +5987,7 @@
         "parameters": [
           {
             "name": "name",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -5965,7 +5999,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,Object?)"
+        "type": "String Function(String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfNever": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfNever",
@@ -5987,7 +6022,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfQuestion": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfQuestion",
@@ -6008,14 +6044,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfStar": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfStar",
@@ -6036,14 +6073,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfVoid": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfVoid",
@@ -6065,7 +6103,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createBindingRti": {
         "id": "function/dart:_rti::_Universe._createBindingRti",
@@ -6091,7 +6130,7 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6108,7 +6147,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,Object?,String)"
+        "type": "Rti Function(Object?,Rti,Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createFunctionRti": {
         "id": "function/dart:_rti::_Universe._createFunctionRti",
@@ -6129,12 +6169,12 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6151,13 +6191,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)"
+        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createFutureOrRti": {
         "id": "function/dart:_rti::_Universe._createFutureOrRti",
         "kind": "function",
         "name": "_createFutureOrRti",
-        "size": 841,
+        "size": 821,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -6172,12 +6213,12 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6193,8 +6234,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = baseType === type$.Object;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = false;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createGenericFunctionParameterRti": {
         "id": "function/dart:_rti::_Universe._createGenericFunctionParameterRti",
@@ -6232,7 +6274,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createGenericFunctionRti": {
         "id": "function/dart:_rti::_Universe._createGenericFunctionRti",
@@ -6249,16 +6292,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6280,7 +6323,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize) {\n      var $length, typeArguments, count, i, bound, substitutedBase, substitutedBounds, rti;\n      if (normalize) {\n        $length = bounds.length;\n        typeArguments = A._Utils_newArrayOrEmpty($length);\n        for (count = 0, i = 0; i < $length; ++i) {\n          bound = bounds[i];\n          if (bound._kind === 1) {\n            typeArguments[i] = bound;\n            ++count;\n          }\n        }\n        if (count > 0) {\n          substitutedBase = A._substitute(universe, baseFunctionType, typeArguments, 0);\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, 0);\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, bounds !== substitutedBounds);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 12;\n      rti._primary = baseFunctionType;\n      rti._rest = bounds;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,String,bool)"
+        "type": "Rti Function(Object?,Rti,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createInterfaceRti": {
         "id": "function/dart:_rti::_Universe._createInterfaceRti",
@@ -6306,7 +6350,7 @@
           },
           {
             "name": "name",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -6323,7 +6367,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,String,Object?,String)"
+        "type": "Rti Function(Object?,String,Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createQuestionRti": {
         "id": "function/dart:_rti::_Universe._createQuestionRti",
@@ -6349,7 +6394,7 @@
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6366,7 +6411,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createQuestionRti(universe, baseType, key, normalize) {\n      var baseKind, t1, starArgument, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.Null || baseType === type$.JSNull))\n            if (baseKind !== 7)\n              t1 = baseKind === 8 && A.isNullable(baseType._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n        else if (baseKind === 1 || baseType === type$.legacy_Never)\n          return type$.Null;\n        else if (baseKind === 6) {\n          starArgument = baseType._primary;\n          if (starArgument._kind === 8 && A.isNullable(starArgument._primary))\n            return starArgument;\n          else\n            return A.Rti__getQuestionFromStar(universe, baseType);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 7;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createStarRti": {
         "id": "function/dart:_rti::_Universe._createStarRti",
@@ -6383,16 +6429,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6409,7 +6455,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createStarRti(universe, baseType, key, normalize) {\n      var baseKind, t1, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          t1 = baseType === type$.Null || baseType === type$.JSNull || baseKind === 7 || baseKind === 6;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 6;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createTerminalRti": {
         "id": "function/dart:_rti::_Universe._createTerminalRti",
@@ -6447,7 +6494,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._findRule": {
         "id": "function/dart:_rti::_Universe._findRule",
@@ -6480,7 +6528,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._installRti": {
         "id": "function/dart:_rti::_Universe._installRti",
@@ -6497,7 +6546,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6518,7 +6567,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 9,
         "code": "",
-        "type": "Rti Function(Object?,String,Rti)"
+        "type": "Rti Function(Object?,String,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._installTypeTests": {
         "id": "function/dart:_rti::_Universe._installTypeTests",
@@ -6551,7 +6601,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__installTypeTests(universe, rti) {\n      rti._as = A._installSpecializedAsCheck;\n      rti._is = A._installSpecializedIsTest;\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupAnyRti": {
         "id": "function/dart:_rti::_Universe._lookupAnyRti",
@@ -6568,7 +6619,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6579,7 +6630,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupBindingRti": {
         "id": "function/dart:_rti::_Universe._lookupBindingRti",
@@ -6596,7 +6648,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6605,7 +6657,7 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6617,7 +6669,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupBindingRti(universe, base, $arguments) {\n      var newBase, newArguments, key, probe, rti, t1;\n      if (base._kind === 10) {\n        newBase = base._primary;\n        newArguments = base._rest.concat($arguments);\n      } else {\n        newArguments = $arguments;\n        newBase = base;\n      }\n      key = newBase._canonicalRecipe + (\";<\" + A._Universe__canonicalRecipeJoin(newArguments) + \">\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 10;\n      rti._primary = newBase;\n      rti._rest = newArguments;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?)"
+        "type": "Rti Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupDynamicRti": {
         "id": "function/dart:_rti::_Universe._lookupDynamicRti",
@@ -6634,7 +6687,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6645,7 +6698,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupErasedRti": {
         "id": "function/dart:_rti::_Universe._lookupErasedRti",
@@ -6662,7 +6716,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6673,7 +6727,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFunctionRti": {
         "id": "function/dart:_rti::_Universe._lookupFunctionRti",
@@ -6690,16 +6745,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6711,7 +6766,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupFunctionRti(universe, returnType, parameters) {\n      var sep, key, probe, rti, t1,\n        s = returnType._canonicalRecipe,\n        requiredPositional = parameters._requiredPositional,\n        requiredPositionalLength = requiredPositional.length,\n        optionalPositional = parameters._optionalPositional,\n        optionalPositionalLength = optionalPositional.length,\n        named = parameters._named,\n        namedLength = named.length,\n        recipe = \"(\" + A._Universe__canonicalRecipeJoin(requiredPositional);\n      if (optionalPositionalLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        recipe += sep + \"[\" + A._Universe__canonicalRecipeJoin(optionalPositional) + \"]\";\n      }\n      if (namedLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        recipe += sep + \"{\" + A._Universe__canonicalRecipeJoinNamed(named) + \"}\";\n      }\n      key = s + (recipe + \")\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 11;\n      rti._primary = returnType;\n      rti._rest = parameters;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,_FunctionParameters)"
+        "type": "Rti Function(Object?,Rti,_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFutureOrRti": {
         "id": "function/dart:_rti::_Universe._lookupFutureOrRti",
@@ -6728,16 +6784,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6749,7 +6805,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupFutureOrRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"/\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createFutureOrRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFutureRti": {
         "id": "function/dart:_rti::_Universe._lookupFutureRti",
@@ -6766,7 +6823,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6775,14 +6832,15 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupGenericFunctionParameterRti": {
         "id": "function/dart:_rti::_Universe._lookupGenericFunctionParameterRti",
@@ -6799,7 +6857,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6815,7 +6873,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupGenericFunctionParameterRti(universe, index) {\n      var rti, t1,\n        key = \"\" + index + \"^\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 13;\n      rti._primary = index;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,int)"
+        "type": "Rti Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupGenericFunctionRti": {
         "id": "function/dart:_rti::_Universe._lookupGenericFunctionRti",
@@ -6832,16 +6891,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6858,7 +6917,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupGenericFunctionRti(universe, baseFunctionType, bounds, normalize) {\n      var t1,\n        key = baseFunctionType._canonicalRecipe + (\"<\" + A._Universe__canonicalRecipeJoin(bounds) + \">\"),\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,bool)"
+        "type": "Rti Function(Object?,Rti,Object?,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupInterfaceRti": {
         "id": "function/dart:_rti::_Universe._lookupInterfaceRti",
@@ -6875,7 +6935,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6896,7 +6956,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupInterfaceRti(universe, $name, $arguments) {\n      var probe, rti, t1,\n        s = $name;\n      if ($arguments.length > 0)\n        s += \"<\" + A._Universe__canonicalRecipeJoin($arguments) + \">\";\n      probe = universe.eC.get(s);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 9;\n      rti._primary = $name;\n      rti._rest = $arguments;\n      if ($arguments.length > 0)\n        rti._precomputed1 = $arguments[0];\n      rti._canonicalRecipe = s;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(s, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,String,Object?)"
+        "type": "Rti Function(Object?,String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupNeverRti": {
         "id": "function/dart:_rti::_Universe._lookupNeverRti",
@@ -6913,7 +6974,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6924,7 +6985,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupQuestionRti": {
         "id": "function/dart:_rti::_Universe._lookupQuestionRti",
@@ -6941,7 +7003,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -6950,7 +7012,7 @@
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -6962,7 +7024,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupQuestionRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"?\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createQuestionRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupStarRti": {
         "id": "function/dart:_rti::_Universe._lookupStarRti",
@@ -6979,16 +7042,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -7000,7 +7063,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupStarRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"*\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createStarRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupTerminalRti": {
         "id": "function/dart:_rti::_Universe._lookupTerminalRti",
@@ -7017,7 +7081,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7038,7 +7102,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupTerminalRti(universe, kind, key) {\n      var rti, t1,\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = kind;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupVoidRti": {
         "id": "function/dart:_rti::_Universe._lookupVoidRti",
@@ -7055,7 +7120,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7066,7 +7131,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._parseRecipe": {
         "id": "function/dart:_rti::_Universe._parseRecipe",
@@ -7083,7 +7149,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7097,7 +7163,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -7109,7 +7175,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?,Object?,String,bool)"
+        "type": "Rti Function(Object?,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin": {
         "id": "function/dart:_rti::_Universe._recipeJoin",
@@ -7142,7 +7209,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "String Function(String,String)"
+        "type": "String Function(String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin3": {
         "id": "function/dart:_rti::_Universe._recipeJoin3",
@@ -7180,7 +7248,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,String,String)"
+        "type": "String Function(String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin4": {
         "id": "function/dart:_rti::_Universe._recipeJoin4",
@@ -7223,7 +7292,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function(String,String,String,String)"
+        "type": "String Function(String,String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin5": {
         "id": "function/dart:_rti::_Universe._recipeJoin5",
@@ -7271,7 +7341,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(String,String,String,String,String)"
+        "type": "String Function(String,String,String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.addErasedTypes": {
         "id": "function/dart:_rti::_Universe.addErasedTypes",
@@ -7304,7 +7375,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_addErasedTypes(universe, types) {\n      return A._Utils_objectAssign(universe.eT, types);\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.addRules": {
         "id": "function/dart:_rti::_Universe.addRules",
@@ -7337,7 +7409,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_addRules(universe, rules) {\n      return A._Utils_objectAssign(universe.tR, rules);\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.bind": {
         "id": "function/dart:_rti::_Universe.bind",
@@ -7354,7 +7427,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7375,7 +7448,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_bind(universe, environment, argumentsRti) {\n      var argumentsRecipe, probe, rti,\n        cache = environment._bindCache;\n      if (cache == null)\n        cache = environment._bindCache = new Map();\n      argumentsRecipe = argumentsRti._canonicalRecipe;\n      probe = cache.get(argumentsRecipe);\n      if (probe != null)\n        return probe;\n      rti = A._Universe__lookupBindingRti(universe, environment, argumentsRti._kind === 10 ? argumentsRti._rest : [argumentsRti]);\n      cache.set(argumentsRecipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti,Rti)"
+        "type": "Rti Function(Object?,Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.erasedTypes": {
         "id": "function/dart:_rti::_Universe.erasedTypes",
@@ -7403,13 +7477,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.eval": {
         "id": "function/dart:_rti::_Universe.eval",
         "kind": "function",
         "name": "eval",
-        "size": 307,
+        "size": 298,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -7420,7 +7495,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7429,7 +7504,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -7440,8 +7515,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        cache = universe.eC,\n        probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      cache.set(recipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,String,bool)"
+        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        t1 = universe.eC,\n        probe = t1.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      t1.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalCache": {
         "id": "function/dart:_rti::_Universe.evalCache",
@@ -7469,7 +7545,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 19,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalInEnvironment": {
         "id": "function/dart:_rti::_Universe.evalInEnvironment",
@@ -7486,7 +7563,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7495,19 +7572,20 @@
           },
           {
             "name": "environment",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_evalInEnvironment(universe, environment, recipe) {\n      var probe, rti,\n        cache = environment._evalCache;\n      if (cache == null)\n        cache = environment._evalCache = new Map();\n      probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, environment, recipe, true));\n      cache.set(recipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti,String)"
+        "type": "Rti Function(Object?,Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalTypeVariable": {
         "id": "function/dart:_rti::_Universe.evalTypeVariable",
@@ -7524,7 +7602,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7545,13 +7623,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,String)"
+        "type": "Rti Function(Object?,Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findErasedType": {
         "id": "function/dart:_rti::_Universe.findErasedType",
         "kind": "function",
         "name": "findErasedType",
-        "size": 686,
+        "size": 668,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -7562,7 +7641,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -7577,8 +7656,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        metadata = universe.eT,\n        probe = metadata[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        metadata[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
-        "type": "Rti Function(Object?,String)"
+        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        t1 = universe.eT,\n        probe = t1[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        t1[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
+        "type": "Rti Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findRule": {
         "id": "function/dart:_rti::_Universe.findRule",
@@ -7611,7 +7691,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe_findRule(universe, targetType) {\n      var rule = universe.tR[targetType];\n      for (; typeof rule == \"string\";)\n        rule = universe.tR[rule];\n      return rule;\n    }",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findTypeParameterVariances": {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
@@ -7644,7 +7725,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.sharedEmptyArray": {
         "id": "function/dart:_rti::_Universe.sharedEmptyArray",
@@ -7672,7 +7754,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?)"
+        "type": "JSArray<dynamic> Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.typeParameterVariances": {
         "id": "function/dart:_rti::_Universe.typeParameterVariances",
@@ -7700,7 +7783,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.typeRules": {
         "id": "function/dart:_rti::_Universe.typeRules",
@@ -7728,7 +7812,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayAt": {
         "id": "function/dart:_rti::_Utils.arrayAt",
@@ -7761,7 +7846,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 44,
         "code": "",
-        "type": "Object? Function(Object?,int)"
+        "type": "Object? Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayConcat": {
         "id": "function/dart:_rti::_Utils.arrayConcat",
@@ -7794,7 +7880,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayLength": {
         "id": "function/dart:_rti::_Utils.arrayLength",
@@ -7822,7 +7909,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 35,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arraySetAt": {
         "id": "function/dart:_rti::_Utils.arraySetAt",
@@ -7853,14 +7941,15 @@
           },
           {
             "name": "value",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 7,
         "code": "",
-        "type": "void Function(Object?,int,Object?)"
+        "type": "void Function(Object?,int,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arraySplice": {
         "id": "function/dart:_rti::_Utils.arraySplice",
@@ -7881,7 +7970,7 @@
         "parameters": [
           {
             "name": "array",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -7893,7 +7982,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,int)"
+        "type": "JSArray<dynamic> Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asBool": {
         "id": "function/dart:_rti::_Utils.asBool",
@@ -7921,7 +8011,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asDouble": {
         "id": "function/dart:_rti::_Utils.asDouble",
@@ -7949,7 +8040,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "double Function(Object?)"
+        "type": "double Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asInt": {
         "id": "function/dart:_rti::_Utils.asInt",
@@ -7977,7 +8069,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 42,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asNum": {
         "id": "function/dart:_rti::_Utils.asNum",
@@ -8005,7 +8098,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "num Function(Object?)"
+        "type": "num Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asRti": {
         "id": "function/dart:_rti::_Utils.asRti",
@@ -8033,7 +8127,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 96,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asRtiOrNull": {
         "id": "function/dart:_rti::_Utils.asRtiOrNull",
@@ -8061,7 +8156,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti? Function(Object?)"
+        "type": "Rti? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asString": {
         "id": "function/dart:_rti::_Utils.asString",
@@ -8089,7 +8185,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 33,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.instanceOf": {
         "id": "function/dart:_rti::_Utils.instanceOf",
@@ -8122,7 +8219,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isArray": {
         "id": "function/dart:_rti::_Utils.isArray",
@@ -8150,7 +8248,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isIdentical": {
         "id": "function/dart:_rti::_Utils.isIdentical",
@@ -8183,7 +8282,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 59,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isNotIdentical": {
         "id": "function/dart:_rti::_Utils.isNotIdentical",
@@ -8216,7 +8316,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isNum": {
         "id": "function/dart:_rti::_Utils.isNum",
@@ -8244,7 +8345,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isString": {
         "id": "function/dart:_rti::_Utils.isString",
@@ -8272,7 +8374,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.mapGet": {
         "id": "function/dart:_rti::_Utils.mapGet",
@@ -8298,14 +8401,15 @@
           },
           {
             "name": "key",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 12,
         "code": "",
-        "type": "Object? Function(Object?,Object?)"
+        "type": "Object? Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.mapSet": {
         "id": "function/dart:_rti::_Utils.mapSet",
@@ -8331,19 +8435,20 @@
           },
           {
             "name": "key",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           },
           {
             "name": "value",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 12,
         "code": "",
-        "type": "void Function(Object?,Object?,Object?)"
+        "type": "void Function(Object?,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.newArrayOrEmpty": {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
@@ -8371,7 +8476,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "_Utils_newArrayOrEmpty($length) {\n      return $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n    }",
-        "type": "Object? Function(int)"
+        "type": "Object? Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.objectAssign": {
         "id": "function/dart:_rti::_Utils.objectAssign",
@@ -8404,7 +8510,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Utils_objectAssign(o, other) {\n      var i, key,\n        keys = Object.keys(other),\n        $length = keys.length;\n      for (i = 0; i < $length; ++i) {\n        key = keys[i];\n        o[key] = other[key];\n      }\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.objectKeys": {
         "id": "function/dart:_rti::_Utils.objectKeys",
@@ -8432,7 +8539,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?)"
+        "type": "JSArray<dynamic> Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.stringLessThan": {
         "id": "function/dart:_rti::_Utils.stringLessThan",
@@ -8465,7 +8573,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(String,String)"
+        "type": "bool Function(String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.substring": {
         "id": "function/dart:_rti::_Utils.substring",
@@ -8503,7 +8612,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,int,int)"
+        "type": "String Function(String,int,int)",
+        "functionKind": 0
       },
       "dart:_rti::_areArgumentsSubtypes": {
         "id": "function/dart:_rti::_areArgumentsSubtypes",
@@ -8556,7 +8666,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_areArgumentsSubtypes(universe, sArgs, sVariances, sEnv, tArgs, tEnv) {\n      var i, t1, t2,\n        $length = sArgs.length;\n      for (i = 0; i < $length; ++i) {\n        t1 = sArgs[i];\n        t2 = tArgs[i];\n        if (!A._isSubtype(universe, t1, sEnv, t2, tEnv))\n          return false;\n      }\n      return true;\n    }",
-        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)"
+        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_arrayInstanceType": {
         "id": "function/dart:_rti::_arrayInstanceType",
@@ -8584,7 +8695,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_arrayInstanceType(object) {\n      var rti = object[init.arrayRti],\n        defaultRti = type$.JSArray_dynamic;\n      if (rti == null)\n        return defaultRti;\n      if (rti.constructor !== defaultRti.constructor)\n        return defaultRti;\n      return rti;\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asBool": {
         "id": "function/dart:_rti::_asBool",
@@ -8612,7 +8724,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBool(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asBoolQ": {
         "id": "function/dart:_rti::_asBoolQ",
@@ -8640,7 +8753,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBoolQ(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool?\"));\n    }",
-        "type": "bool? Function(dynamic)"
+        "type": "bool? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asBoolS": {
         "id": "function/dart:_rti::_asBoolS",
@@ -8668,7 +8782,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBoolS(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
-        "type": "bool? Function(dynamic)"
+        "type": "bool? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asDouble": {
         "id": "function/dart:_rti::_asDouble",
@@ -8696,7 +8811,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDouble(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
-        "type": "double Function(Object?)"
+        "type": "double Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asDoubleQ": {
         "id": "function/dart:_rti::_asDoubleQ",
@@ -8724,7 +8840,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDoubleQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double?\"));\n    }",
-        "type": "double? Function(dynamic)"
+        "type": "double? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asDoubleS": {
         "id": "function/dart:_rti::_asDoubleS",
@@ -8752,7 +8869,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDoubleS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
-        "type": "double? Function(dynamic)"
+        "type": "double? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asInt": {
         "id": "function/dart:_rti::_asInt",
@@ -8780,7 +8898,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asInt(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asIntQ": {
         "id": "function/dart:_rti::_asIntQ",
@@ -8808,7 +8927,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asIntQ(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int?\"));\n    }",
-        "type": "int? Function(dynamic)"
+        "type": "int? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asIntS": {
         "id": "function/dart:_rti::_asIntS",
@@ -8836,7 +8956,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asIntS(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
-        "type": "int? Function(dynamic)"
+        "type": "int? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asNum": {
         "id": "function/dart:_rti::_asNum",
@@ -8864,7 +8985,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNum(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
-        "type": "num Function(Object?)"
+        "type": "num Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asNumQ": {
         "id": "function/dart:_rti::_asNumQ",
@@ -8892,7 +9014,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNumQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num?\"));\n    }",
-        "type": "num? Function(dynamic)"
+        "type": "num? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asNumS": {
         "id": "function/dart:_rti::_asNumS",
@@ -8920,13 +9043,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNumS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
-        "type": "num? Function(dynamic)"
+        "type": "num? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asObject": {
         "id": "function/dart:_rti::_asObject",
         "kind": "function",
         "name": "_asObject",
-        "size": 46,
+        "size": 154,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -8947,8 +9071,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asObject(object) {\n      return object;\n    }",
-        "type": "Object? Function(Object?)"
+        "code": "_asObject(object) {\n      if (object != null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"Object\"));\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asString": {
         "id": "function/dart:_rti::_asString",
@@ -8976,7 +9101,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asString(object) {\n      if (typeof object == \"string\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asStringQ": {
         "id": "function/dart:_rti::_asStringQ",
@@ -9004,7 +9130,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asStringQ(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String?\"));\n    }",
-        "type": "String? Function(dynamic)"
+        "type": "String? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asStringS": {
         "id": "function/dart:_rti::_asStringS",
@@ -9032,7 +9159,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asStringS(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
-        "type": "String? Function(dynamic)"
+        "type": "String? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asTop": {
         "id": "function/dart:_rti::_asTop",
@@ -9060,7 +9188,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_asTop(object) {\n      return object;\n    }",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_failedAsCheck": {
         "id": "function/dart:_rti::_failedAsCheck",
@@ -9093,7 +9222,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_failedAsCheck(object, testRti) {\n      throw A.wrapException(A._TypeError$fromMessage(A._Error_compose(object, A.instanceOrFunctionType(object, testRti), A._rtiToString(testRti, null))));\n    }",
-        "type": "void Function(Object?,Rti)"
+        "type": "void Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_finishIsFn": {
         "id": "function/dart:_rti::_finishIsFn",
@@ -9131,13 +9261,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_finishIsFn(testRti, object, isFn) {\n      testRti._is = isFn;\n      return testRti._is(object);\n    }",
-        "type": "bool Function(Rti,Object?,Object?)"
+        "type": "bool Function(Rti,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_functionRtiToString": {
         "id": "function/dart:_rti::_functionRtiToString",
         "kind": "function",
         "name": "_functionRtiToString",
-        "size": 3339,
+        "size": 3219,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9152,7 +9283,7 @@
         "parameters": [
           {
             "name": "functionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -9168,14 +9299,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, t3, typeParametersText, typeSep, t4, t5, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, t3 = type$.Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          t4 = genericContext.length;\n          t5 = t4 - 1 - i;\n          if (!(t5 >= 0))\n            return A.ioore(genericContext, t5);\n          typeParametersText = B.JSString_methods.$add(typeParametersText + typeSep, genericContext[t5]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t4 = boundRti === t3;\n            else\n              t4 = true;\n          else\n            t4 = true;\n          if (!t4)\n            typeParametersText += B.JSString_methods.$add(\" extends \", A._rtiToString(boundRti, genericContext));\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += B.JSString_methods.$add(sep, A._rtiToString(requiredPositional[i], genericContext));\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += B.JSString_methods.$add(sep, A._rtiToString(optionalPositional[i], genericContext));\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += J.$add$ns(A._rtiToString(named[i + 2], genericContext), \" \") + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + A.S(returnTypeText);\n    }",
-        "type": "String Function(Rti,List<String>?,{Object? bounds})"
+        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, typeParametersText, typeSep, t3, t4, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          t3 = genericContext.length;\n          t4 = t3 - 1 - i;\n          if (!(t4 >= 0))\n            return A.ioore(genericContext, t4);\n          typeParametersText = B.JSString_methods.$add(typeParametersText + typeSep, genericContext[t4]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t3 = false;\n            else\n              t3 = true;\n          else\n            t3 = true;\n          if (!t3)\n            typeParametersText += \" extends \" + A._rtiToString(boundRti, genericContext);\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += sep + A._rtiToString(requiredPositional[i], genericContext);\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += sep + A._rtiToString(optionalPositional[i], genericContext);\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += A._rtiToString(named[i + 2], genericContext) + \" \" + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + returnTypeText;\n    }",
+        "type": "String Function(Rti,List<String>?,{Object? bounds})",
+        "functionKind": 0
       },
       "dart:_rti::_generalAsCheckImplementation": {
         "id": "function/dart:_rti::_generalAsCheckImplementation",
         "kind": "function",
         "name": "_generalAsCheckImplementation",
-        "size": 220,
+        "size": 282,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9196,8 +9328,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_generalAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
-        "type": "Object? Function(Object?)"
+        "code": "_generalAsCheckImplementation(object) {\n      var t1, testRti = this;\n      if (object == null) {\n        t1 = A.isNullable(testRti);\n        if (t1)\n          return object;\n      } else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalIsTestImplementation": {
         "id": "function/dart:_rti::_generalIsTestImplementation",
@@ -9225,7 +9358,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalIsTestImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      return A._isSubtype(init.typeUniverse, A.instanceOrFunctionType(object, testRti), null, testRti, null);\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalNullableAsCheckImplementation": {
         "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
@@ -9253,7 +9387,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalNullableAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalNullableIsTestImplementation": {
         "id": "function/dart:_rti::_generalNullableIsTestImplementation",
@@ -9281,13 +9416,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalNullableIsTestImplementation(object) {\n      if (object == null)\n        return true;\n      return this._primary._is(object);\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_installSpecializedAsCheck": {
         "id": "function/dart:_rti::_installSpecializedAsCheck",
         "kind": "function",
         "name": "_installSpecializedAsCheck",
-        "size": 505,
+        "size": 592,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9297,8 +9433,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "object",
@@ -9308,14 +9444,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_installSpecializedAsCheck(object) {\n      var t1, asFn, testRti = this;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else\n        asFn = A._generalNullableAsCheckImplementation;\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
-        "type": "bool Function(Object?)"
+        "code": "_installSpecializedAsCheck(object) {\n      var t1, testRti = this,\n        asFn = A._generalAsCheckImplementation;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else {\n        t1 = A.isNullable(testRti);\n        if (t1)\n          asFn = A._generalNullableAsCheckImplementation;\n      }\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_installSpecializedIsTest": {
         "id": "function/dart:_rti::_installSpecializedIsTest",
         "kind": "function",
         "name": "_installSpecializedIsTest",
-        "size": 1476,
+        "size": 1454,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9336,8 +9473,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_installSpecializedIsTest(object) {\n      var unstarred, isFn, $name, testRti = this,\n        t1 = type$.Object;\n      if (testRti === t1)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === t1;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
-        "type": "bool Function(Object?)"
+        "code": "_installSpecializedIsTest(object) {\n      var t1, unstarred, isFn, $name, testRti = this;\n      if (testRti === type$.Object)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceType": {
         "id": "function/dart:_rti::_instanceType",
@@ -9354,7 +9492,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -9365,7 +9503,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "_instanceType(object) {\n      var rti = object.$ti;\n      return rti != null ? rti : A._instanceTypeFromConstructor(object);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceTypeFromConstructor": {
         "id": "function/dart:_rti::_instanceTypeFromConstructor",
@@ -9382,7 +9521,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -9393,7 +9532,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_instanceTypeFromConstructor(instance) {\n      var $constructor = instance.constructor,\n        probe = $constructor.$ccache;\n      if (probe != null)\n        return probe;\n      return A._instanceTypeFromConstructorMiss(instance, $constructor);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceTypeFromConstructorMiss": {
         "id": "function/dart:_rti::_instanceTypeFromConstructorMiss",
@@ -9410,7 +9550,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -9426,7 +9566,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_instanceTypeFromConstructorMiss(instance, $constructor) {\n      var effectiveConstructor = instance instanceof A.Closure ? instance.__proto__.__proto__.constructor : $constructor,\n        rti = A._Universe_findErasedType(init.typeUniverse, effectiveConstructor.name);\n      $constructor.$ccache = rti;\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Object?)"
+        "type": "Rti Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isBool": {
         "id": "function/dart:_rti::_isBool",
@@ -9454,7 +9595,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isBool(object) {\n      return true === object || false === object;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isClosure": {
         "id": "function/dart:_rti::_isClosure",
@@ -9482,7 +9624,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isDartObject": {
         "id": "function/dart:_rti::_isDartObject",
@@ -9510,13 +9653,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isFunctionSubtype": {
         "id": "function/dart:_rti::_isFunctionSubtype",
         "kind": "function",
         "name": "_isFunctionSubtype",
-        "size": 2694,
+        "size": 3041,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9536,7 +9680,7 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -9546,7 +9690,7 @@
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -9557,8 +9701,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          if (sName < tName)\n            continue;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      return true;\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName, sIsRequired;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          sIsRequired = sNamed[sIndex - 2];\n          if (sName < tName) {\n            if (sIsRequired)\n              return false;\n            continue;\n          }\n          t1 = tNamed[tIndex + 1];\n          if (sIsRequired && !t1)\n            return false;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      for (; sIndex < sNamedLength;) {\n        if (sNamed[sIndex + 1])\n          return false;\n        sIndex += 3;\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isInt": {
         "id": "function/dart:_rti::_isInt",
@@ -9586,7 +9731,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "_isInt(object) {\n      return typeof object == \"number\" && Math.floor(object) === object;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isInterfaceSubtype": {
         "id": "function/dart:_rti::_isInterfaceSubtype",
@@ -9612,7 +9758,7 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -9622,7 +9768,7 @@
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -9634,7 +9780,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isInterfaceSubtype(universe, s, sEnv, t, tEnv) {\n      var rule, recipes, $length, supertypeArgs, i, t1, t2,\n        sName = s._primary,\n        tName = t._primary;\n      for (; sName !== tName;) {\n        rule = universe.tR[sName];\n        if (rule == null)\n          return false;\n        if (typeof rule == \"string\") {\n          sName = rule;\n          continue;\n        }\n        recipes = rule[tName];\n        if (recipes == null)\n          return false;\n        $length = recipes.length;\n        supertypeArgs = $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n        for (i = 0; i < $length; ++i)\n          supertypeArgs[i] = A._Universe_evalInEnvironment(universe, s, recipes[i]);\n        return A._areArgumentsSubtypes(universe, supertypeArgs, null, sEnv, t._rest, tEnv);\n      }\n      t1 = s._rest;\n      t2 = t._rest;\n      return A._areArgumentsSubtypes(universe, t1, null, sEnv, t2, tEnv);\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isListTestViaProperty": {
         "id": "function/dart:_rti::_isListTestViaProperty",
@@ -9662,7 +9809,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isListTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      if (typeof object != \"object\")\n        return false;\n      if (Array.isArray(object))\n        return true;\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isNum": {
         "id": "function/dart:_rti::_isNum",
@@ -9690,7 +9838,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
         "code": "_isNum(object) {\n      return typeof object == \"number\";\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isObject": {
         "id": "function/dart:_rti::_isObject",
@@ -9718,7 +9867,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isObject(object) {\n      return object != null;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isString": {
         "id": "function/dart:_rti::_isString",
@@ -9746,13 +9896,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "_isString(object) {\n      return typeof object == \"string\";\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isSubtype": {
         "id": "function/dart:_rti::_isSubtype",
         "kind": "function",
         "name": "_isSubtype",
-        "size": 3001,
+        "size": 3597,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9793,8 +9944,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = s === type$.Null || s === type$.JSNull;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = t._primary;\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return t1;\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t1;\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = false;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      t1 = s === type$.Null || s === type$.JSNull;\n      if (t1) {\n        if (tKind === 8)\n          return A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t === type$.Null || t === type$.JSNull || tKind === 7 || tKind === 6;\n      }\n      if (t === type$.Object) {\n        if (sKind === 8)\n          return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        if (sKind === 6)\n          return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return sKind !== 7;\n      }\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = A.Rti__getQuestionFromStar(universe, t);\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, type$.Null, sEnv, t, tEnv);\n        return t1 && A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, type$.Null, tEnv);\n        return t1 || A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isTestViaProperty": {
         "id": "function/dart:_rti::_isTestViaProperty",
@@ -9822,7 +9974,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isTop": {
         "id": "function/dart:_rti::_isTop",
@@ -9850,7 +10003,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isTop(object) {\n      return true;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_nullIs": {
         "id": "function/dart:_rti::_nullIs",
@@ -9878,13 +10032,14 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "_nullIs(testRti) {\n      var t1,\n        kind = testRti._kind;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          if (!(testRti === type$.legacy_Never))\n            if (kind !== 7)\n              t1 = kind === 8 && A._nullIs(testRti._primary) || testRti === type$.Null || testRti === type$.JSNull;\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiArrayToString": {
         "id": "function/dart:_rti::_rtiArrayToString",
         "kind": "function",
         "name": "_rtiArrayToString",
-        "size": 241,
+        "size": 217,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9910,8 +10065,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += B.JSString_methods.$add(sep, A._rtiToString(array[i], genericContext));\n      return s;\n    }",
-        "type": "String Function(Object?,List<String>?)"
+        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += sep + A._rtiToString(array[i], genericContext);\n      return s;\n    }",
+        "type": "String Function(Object?,List<String>?)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiBind": {
         "id": "function/dart:_rti::_rtiBind",
@@ -9928,7 +10084,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "environment",
@@ -9944,7 +10100,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Rti,Rti)"
+        "type": "Rti Function(Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiEval": {
         "id": "function/dart:_rti::_rtiEval",
@@ -9961,29 +10118,30 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "environment",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Rti,String)"
+        "type": "Rti Function(Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiToString": {
         "id": "function/dart:_rti::_rtiToString",
         "kind": "function",
         "name": "_rtiToString",
-        "size": 1597,
+        "size": 1527,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -9994,7 +10152,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "rti",
@@ -10009,8 +10167,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return J.$add$ns(argumentKind === 11 || argumentKind === 12 ? B.JSString_methods.$add(\"(\", s) + \")\" : s, \"?\");\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A.S(A._rtiToString(rti._primary, genericContext)) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        genericContext.toString;\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
-        "type": "String Function(Rti,List<String>?)"
+        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return (argumentKind === 11 || argumentKind === 12 ? \"(\" + s + \")\" : s) + \"?\";\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A._rtiToString(rti._primary, genericContext) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
+        "type": "String Function(Rti,List<String>?)",
+        "functionKind": 0
       },
       "dart:_rti::_setArrayType": {
         "id": "function/dart:_rti::_setArrayType",
@@ -10043,7 +10202,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_setArrayType(target, rti) {\n      target[init.arrayRti] = rti;\n      return target;\n    }",
-        "type": "Object? Function(Object?,Object?)"
+        "type": "Object? Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_simpleSpecializedIsTest": {
         "id": "function/dart:_rti::_simpleSpecializedIsTest",
@@ -10071,7 +10231,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_substitute": {
         "id": "function/dart:_rti::_substitute",
@@ -10088,16 +10249,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10114,7 +10275,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substitute(universe, rti, typeArguments, depth) {\n      var baseType, substitutedBaseType, interfaceTypeArguments, substitutedInterfaceTypeArguments, base, substitutedBase, $arguments, substitutedArguments, returnType, substitutedReturnType, functionParameters, substitutedFunctionParameters, bounds, substitutedBounds, index, argument,\n        kind = rti._kind;\n      switch (kind) {\n        case 5:\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n          return rti;\n        case 6:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupStarRti(universe, substitutedBaseType, true);\n        case 7:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupQuestionRti(universe, substitutedBaseType, true);\n        case 8:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupFutureOrRti(universe, substitutedBaseType, true);\n        case 9:\n          interfaceTypeArguments = rti._rest;\n          substitutedInterfaceTypeArguments = A._substituteArray(universe, interfaceTypeArguments, typeArguments, depth);\n          if (substitutedInterfaceTypeArguments === interfaceTypeArguments)\n            return rti;\n          return A._Universe__lookupInterfaceRti(universe, rti._primary, substitutedInterfaceTypeArguments);\n        case 10:\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          $arguments = rti._rest;\n          substitutedArguments = A._substituteArray(universe, $arguments, typeArguments, depth);\n          if (substitutedBase === base && substitutedArguments === $arguments)\n            return rti;\n          return A._Universe__lookupBindingRti(universe, substitutedBase, substitutedArguments);\n        case 11:\n          returnType = rti._primary;\n          substitutedReturnType = A._substitute(universe, returnType, typeArguments, depth);\n          functionParameters = rti._rest;\n          substitutedFunctionParameters = A._substituteFunctionParameters(universe, functionParameters, typeArguments, depth);\n          if (substitutedReturnType === returnType && substitutedFunctionParameters === functionParameters)\n            return rti;\n          return A._Universe__lookupFunctionRti(universe, substitutedReturnType, substitutedFunctionParameters);\n        case 12:\n          bounds = rti._rest;\n          depth += bounds.length;\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, depth);\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          if (substitutedBounds === bounds && substitutedBase === base)\n            return rti;\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, true);\n        case 13:\n          index = rti._primary;\n          if (index < depth)\n            return rti;\n          argument = typeArguments[index - depth];\n          if (argument == null)\n            return rti;\n          return argument;\n        default:\n          throw A.wrapException(A.AssertionError$(\"Attempted to substitute unexpected RTI kind \" + kind));\n      }\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,int)"
+        "type": "Rti Function(Object?,Rti,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteArray": {
         "id": "function/dart:_rti::_substituteArray",
@@ -10135,7 +10297,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -10157,7 +10319,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteArray(universe, rtiArray, typeArguments, depth) {\n      var changed, i, rti, substitutedRti,\n        $length = rtiArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; ++i) {\n        rti = rtiArray[i];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result[i] = substitutedRti;\n      }\n      return changed ? result : rtiArray;\n    }",
-        "type": "Object? Function(Object?,Object?,Object?,int)"
+        "type": "Object? Function(Object?,Object?,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteFunctionParameters": {
         "id": "function/dart:_rti::_substituteFunctionParameters",
@@ -10178,7 +10341,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -10200,7 +10363,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteFunctionParameters(universe, functionParameters, typeArguments, depth) {\n      var result,\n        requiredPositional = functionParameters._requiredPositional,\n        substitutedRequiredPositional = A._substituteArray(universe, requiredPositional, typeArguments, depth),\n        optionalPositional = functionParameters._optionalPositional,\n        substitutedOptionalPositional = A._substituteArray(universe, optionalPositional, typeArguments, depth),\n        named = functionParameters._named,\n        substitutedNamed = A._substituteNamed(universe, named, typeArguments, depth);\n      if (substitutedRequiredPositional === requiredPositional && substitutedOptionalPositional === optionalPositional && substitutedNamed === named)\n        return functionParameters;\n      result = new A._FunctionParameters();\n      result._requiredPositional = substitutedRequiredPositional;\n      result._optionalPositional = substitutedOptionalPositional;\n      result._named = substitutedNamed;\n      return result;\n    }",
-        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)"
+        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteNamed": {
         "id": "function/dart:_rti::_substituteNamed",
@@ -10221,7 +10385,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -10243,7 +10407,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteNamed(universe, namedArray, typeArguments, depth) {\n      var changed, i, t1, t2, rti, substitutedRti,\n        $length = namedArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; i += 3) {\n        t1 = namedArray[i];\n        t2 = namedArray[i + 1];\n        rti = namedArray[i + 2];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result.splice(i, 3, t1, t2, substitutedRti);\n      }\n      return changed ? result : namedArray;\n    }",
-        "type": "Object? Function(Object?,Object?,Object?,int)"
+        "type": "Object? Function(Object?,Object?,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_theUniverse": {
         "id": "function/dart:_rti::_theUniverse",
@@ -10265,7 +10430,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "Object? Function()"
+        "type": "Object? Function()",
+        "functionKind": 0
       },
       "dart:_rti::_unminifyOrTag": {
         "id": "function/dart:_rti::_unminifyOrTag",
@@ -10293,7 +10459,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_rti::closureFunctionType": {
         "id": "function/dart:_rti::closureFunctionType",
@@ -10321,7 +10488,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "closureFunctionType(closure) {\n      var signature = closure.$signature;\n      if (signature != null) {\n        if (typeof signature == \"number\")\n          return A.getTypeFromTypesTable(signature);\n        return closure.$signature();\n      }\n      return null;\n    }",
-        "type": "Rti? Function(Object?)"
+        "type": "Rti? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::evalInInstance": {
         "id": "function/dart:_rti::evalInInstance",
@@ -10338,7 +10506,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -10347,14 +10515,15 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,String)"
+        "type": "Rti Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::findType": {
         "id": "function/dart:_rti::findType",
@@ -10371,7 +10540,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "recipe",
@@ -10382,7 +10551,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "findType(recipe) {\n      return A._Universe_eval(init.typeUniverse, recipe, false);\n    }",
-        "type": "Rti Function(String)"
+        "type": "Rti Function(String)",
+        "functionKind": 0
       },
       "dart:_rti::getTypeFromTypesTable": {
         "id": "function/dart:_rti::getTypeFromTypesTable",
@@ -10399,7 +10569,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "index",
@@ -10410,7 +10580,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "getTypeFromTypesTable(index) {\n      var rti,\n        table = init.types,\n        type = table[index];\n      if (typeof type == \"string\") {\n        rti = A._Universe_eval(init.typeUniverse, type, false);\n        table[index] = rti;\n        return rti;\n      }\n      return type;\n    }",
-        "type": "Rti Function(int)"
+        "type": "Rti Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::instanceOrFunctionType": {
         "id": "function/dart:_rti::instanceOrFunctionType",
@@ -10427,7 +10598,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -10443,7 +10614,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "instanceOrFunctionType(object, testRti) {\n      var rti;\n      if (A.Rti__isUnionOfFunctionType(testRti))\n        if (object instanceof A.Closure) {\n          rti = A.closureFunctionType(object);\n          if (rti != null)\n            return rti;\n        }\n      return A.instanceType(object);\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::instanceType": {
         "id": "function/dart:_rti::instanceType",
@@ -10460,7 +10632,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -10471,7 +10643,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "instanceType(object) {\n      var rti;\n      if (object instanceof A.Object) {\n        rti = object.$ti;\n        return rti != null ? rti : A._instanceTypeFromConstructor(object);\n      }\n      if (Array.isArray(object))\n        return A._arrayInstanceType(object);\n      return A._instanceTypeFromConstructor(J.getInterceptor$(object));\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::instanceTypeName": {
         "id": "function/dart:_rti::instanceTypeName",
@@ -10488,7 +10661,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -10499,7 +10672,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::isBottomType": {
         "id": "function/dart:_rti::isBottomType",
@@ -10520,14 +10694,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isFunctionType": {
         "id": "function/dart:_rti::isFunctionType",
@@ -10548,14 +10723,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isJsFunctionType": {
         "id": "function/dart:_rti::isJsFunctionType",
@@ -10576,14 +10752,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isLegacyObjectType": {
         "id": "function/dart:_rti::isLegacyObjectType",
@@ -10604,14 +10781,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 7,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullType": {
         "id": "function/dart:_rti::isNullType",
@@ -10632,14 +10810,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 8,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullable": {
         "id": "function/dart:_rti::isNullable",
@@ -10667,7 +10846,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "isNullable(t) {\n      var t1,\n        kind = t._kind;\n      if (!(t === type$.Null || t === type$.JSNull))\n        if (!A.isStrongTopType(t))\n          if (kind !== 7)\n            if (!(kind === 6 && A.isNullable(t._primary)))\n              t1 = kind === 8 && A.isNullable(t._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullableObjectType": {
         "id": "function/dart:_rti::isNullableObjectType",
@@ -10688,14 +10868,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isObjectType": {
         "id": "function/dart:_rti::isObjectType",
@@ -10716,14 +10897,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 10,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isStrongTopType": {
         "id": "function/dart:_rti::isStrongTopType",
@@ -10744,14 +10926,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 1,
         "code": "isStrongTopType(t) {\n      var kind = t._kind;\n      return kind === 2 || kind === 3 || kind === 4 || kind === 5 || t === type$.nullable_Object;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isSubtype": {
         "id": "function/dart:_rti::isSubtype",
@@ -10777,25 +10960,26 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Object?,Rti,Rti)"
+        "type": "bool Function(Object?,Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isTopType": {
         "id": "function/dart:_rti::isTopType",
         "kind": "function",
         "name": "isTopType",
-        "size": 225,
+        "size": 212,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -10816,8 +11000,9 @@
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 5,
-        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:collection::IterableBase.iterableToFullString": {
         "id": "function/dart:collection::IterableBase.iterableToFullString",
@@ -10855,7 +11040,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "IterableBase_iterableToFullString(iterable, leftDelimiter, rightDelimiter) {\n      var buffer, t1;\n      if (A._isToStringVisiting(iterable))\n        return leftDelimiter + \"...\" + rightDelimiter;\n      buffer = new A.StringBuffer(leftDelimiter);\n      B.JSArray_methods.add$1($._toStringVisiting, iterable);\n      try {\n        t1 = buffer;\n        t1._contents = A.StringBuffer__writeAll(t1._contents, iterable, \", \");\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      buffer._contents += rightDelimiter;\n      t1 = buffer._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
-        "type": "String Function(Iterable<dynamic>,[String,String])"
+        "type": "String Function(Iterable<dynamic>,[String,String])",
+        "functionKind": 0
       },
       "dart:collection::ListBase.listToString": {
         "id": "function/dart:collection::ListBase.listToString",
@@ -10883,7 +11069,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(List<dynamic>)"
+        "type": "String Function(List<dynamic>)",
+        "functionKind": 0
       },
       "dart:collection::_isToStringVisiting": {
         "id": "function/dart:collection::_isToStringVisiting",
@@ -10911,7 +11098,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_isToStringVisiting(o) {\n      var t1, i;\n      for (t1 = $._toStringVisiting.length, i = 0; i < t1; ++i)\n        if (o === $._toStringVisiting[i])\n          return true;\n      return false;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 0
       },
       "dart:core::ArgumentError.ArgumentError": {
         "id": "function/dart:core::ArgumentError.ArgumentError",
@@ -10939,13 +11127,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([dynamic,String?])"
+        "type": "dynamic Function([dynamic,String?])",
+        "functionKind": 3
       },
       "dart:core::ArgumentError.ArgumentError.value": {
         "id": "function/dart:core::ArgumentError.ArgumentError.value",
         "kind": "function",
         "name": "ArgumentError.value",
-        "size": 113,
+        "size": 0,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::ArgumentError",
         "children": [],
@@ -10976,8 +11165,9 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": "ArgumentError$value(value, $name, message) {\n      return new A.ArgumentError(true, value, $name, message);\n    }",
-        "type": "dynamic Function(dynamic,[String?,dynamic])"
+        "code": "",
+        "type": "dynamic Function(dynamic,[String?,dynamic])",
+        "functionKind": 3
       },
       "dart:core::ArgumentError._errorExplanation": {
         "id": "function/dart:core::ArgumentError._errorExplanation",
@@ -10999,7 +11189,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorExplanation() {\n      return \"\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ArgumentError._errorName": {
         "id": "function/dart:core::ArgumentError._errorName",
@@ -11021,7 +11212,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ArgumentError.toString": {
         "id": "function/dart:core::ArgumentError.toString",
@@ -11043,7 +11235,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var _this = this,\n        $name = _this.name,\n        nameString = $name == null ? \"\" : \" (\" + $name + \")\",\n        message = _this.message,\n        messageString = message == null ? \"\" : \": \" + message,\n        prefix = _this.get$_errorName() + nameString + messageString;\n      if (!_this._hasValue)\n        return prefix;\n      return prefix + _this.get$_errorExplanation() + \": \" + A.Error_safeToString(_this.invalidValue);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::AssertionError.AssertionError": {
         "id": "function/dart:core::AssertionError.AssertionError",
@@ -11071,7 +11264,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "AssertionError$(message) {\n      return new A.AssertionError(message);\n    }",
-        "type": "dynamic Function([Object?])"
+        "type": "dynamic Function([Object?])",
+        "functionKind": 3
       },
       "dart:core::AssertionError.toString": {
         "id": "function/dart:core::AssertionError.toString",
@@ -11093,7 +11287,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var t1 = this.message;\n      if (t1 != null)\n        return \"Assertion failed: \" + A.Error_safeToString(t1);\n      return \"Assertion failed\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ConcurrentModificationError.ConcurrentModificationError": {
         "id": "function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
@@ -11121,7 +11316,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([Object?])"
+        "type": "dynamic Function([Object?])",
+        "functionKind": 3
       },
       "dart:core::ConcurrentModificationError.toString": {
         "id": "function/dart:core::ConcurrentModificationError.toString",
@@ -11143,7 +11339,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Concurrent modification during iteration: \" + A.Error_safeToString(this.modifiedObject) + \".\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::CyclicInitializationError.CyclicInitializationError": {
         "id": "function/dart:core::CyclicInitializationError.CyclicInitializationError",
@@ -11164,20 +11361,21 @@
         "parameters": [
           {
             "name": "variableName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([String?])"
+        "type": "dynamic Function([String?])",
+        "functionKind": 3
       },
       "dart:core::CyclicInitializationError.toString": {
         "id": "function/dart:core::CyclicInitializationError.toString",
         "kind": "function",
         "name": "toString",
-        "size": 231,
+        "size": 115,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::CyclicInitializationError",
         "children": [],
@@ -11192,14 +11390,15 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      var variableName = this.variableName;\n      return variableName == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + variableName + \"' during its initialization\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Reading static variable '\" + this.variableName + \"' during its initialization\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::Error._objectToString": {
         "id": "function/dart:core::Error._objectToString",
         "kind": "function",
         "name": "_objectToString",
-        "size": 192,
+        "size": 187,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Error",
         "children": [],
@@ -11220,8 +11419,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(object)) + \"'\";\n    }",
-        "type": "String Function(Object)"
+        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.Primitives_objectTypeName(object) + \"'\";\n    }",
+        "type": "String Function(Object)",
+        "functionKind": 0
       },
       "dart:core::Error._stringToSafeString": {
         "id": "function/dart:core::Error._stringToSafeString",
@@ -11249,7 +11449,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:core::Error.safeToString": {
         "id": "function/dart:core::Error.safeToString",
@@ -11277,7 +11478,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Error_safeToString(object) {\n      if (typeof object == \"number\" || A._isBool(object) || object == null)\n        return J.toString$0$(object);\n      if (typeof object == \"string\")\n        return JSON.stringify(object);\n      return A.Error__objectToString(object);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:core::IndexError.IndexError": {
         "id": "function/dart:core::IndexError.IndexError",
@@ -11325,13 +11527,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(int,dynamic,[String?,String?,int?])"
+        "type": "dynamic Function(int,dynamic,[String?,String?,int?])",
+        "functionKind": 3
       },
       "dart:core::IndexError._errorExplanation": {
         "id": "function/dart:core::IndexError._errorExplanation",
         "kind": "function",
         "name": "_errorExplanation",
-        "size": 387,
+        "size": 260,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::IndexError",
         "children": [],
@@ -11346,8 +11549,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_errorExplanation() {\n      var t1,\n        invalidValue = A._asIntS(this.invalidValue);\n      if (typeof invalidValue !== \"number\")\n        return invalidValue.$lt();\n      if (invalidValue < 0)\n        return \": index must not be negative\";\n      t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
-        "type": "String Function()"
+        "code": "get$_errorExplanation() {\n      if (A._asInt(this.invalidValue) < 0)\n        return \": index must not be negative\";\n      var t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::IndexError._errorName": {
         "id": "function/dart:core::IndexError._errorName",
@@ -11369,7 +11573,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::Null.toString": {
         "id": "function/dart:core::Null.toString",
@@ -11391,7 +11596,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"null\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::NullThrownError.NullThrownError": {
         "id": "function/dart:core::NullThrownError.NullThrownError",
@@ -11413,7 +11619,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:core::NullThrownError.toString": {
         "id": "function/dart:core::NullThrownError.toString",
@@ -11435,13 +11642,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Throw of null.\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::Object.toString": {
         "id": "function/dart:core::Object.toString",
         "kind": "function",
         "name": "toString",
-        "size": 98,
+        "size": 93,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Object",
         "children": [],
@@ -11456,8 +11664,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(this)) + \"'\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Instance of '\" + A.Primitives_objectTypeName(this) + \"'\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::RangeError.RangeError.value": {
         "id": "function/dart:core::RangeError.RangeError.value",
@@ -11490,7 +11699,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(num,[String?,String?])"
+        "type": "dynamic Function(num,[String?,String?])",
+        "functionKind": 3
       },
       "dart:core::RangeError._errorExplanation": {
         "id": "function/dart:core::RangeError._errorExplanation",
@@ -11512,7 +11722,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "get$_errorExplanation() {\n      return \"\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::RangeError._errorName": {
         "id": "function/dart:core::RangeError._errorName",
@@ -11534,7 +11745,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.StringBuffer": {
         "id": "function/dart:core::StringBuffer.StringBuffer",
@@ -11562,13 +11774,14 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([Object])"
+        "type": "dynamic Function([Object])",
+        "functionKind": 3
       },
       "dart:core::StringBuffer._writeAll": {
         "id": "function/dart:core::StringBuffer._writeAll",
         "kind": "function",
         "name": "_writeAll",
-        "size": 560,
+        "size": 804,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::StringBuffer",
         "children": [],
@@ -11599,8 +11812,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "StringBuffer__writeAll(string, objects, separator) {\n      var iterator = new J.ArrayIterator(objects, objects.length, A._arrayInstanceType(objects)._eval$1(\"ArrayIterator<1>\"));\n      if (!iterator.moveNext$0())\n        return string;\n      if (separator.length === 0) {\n        do\n          string += A.S(iterator._current);\n        while (iterator.moveNext$0());\n      } else {\n        string += A.S(iterator._current);\n        for (; iterator.moveNext$0();)\n          string = string + separator + A.S(iterator._current);\n      }\n      return string;\n    }",
-        "type": "String Function(String,Iterable<dynamic>,String)"
+        "code": "StringBuffer__writeAll(string, objects, separator) {\n      var t2,\n        t1 = A._arrayInstanceType(objects),\n        iterator = new J.ArrayIterator(objects, objects.length, t1._eval$1(\"ArrayIterator<1>\"));\n      if (!iterator.moveNext$0())\n        return string;\n      if (separator.length === 0) {\n        t1 = t1._precomputed1;\n        do {\n          t2 = iterator._current;\n          string += A.S(t2 == null ? t1._as(t2) : t2);\n        } while (iterator.moveNext$0());\n      } else {\n        t2 = iterator._current;\n        string += A.S(t2 == null ? t1._precomputed1._as(t2) : t2);\n        for (t1 = t1._precomputed1; iterator.moveNext$0();) {\n          t2 = iterator._current;\n          string = string + separator + A.S(t2 == null ? t1._as(t2) : t2);\n        }\n      }\n      return string;\n    }",
+        "type": "String Function(String,Iterable<dynamic>,String)",
+        "functionKind": 0
       },
       "dart:core::StringBuffer._writeOne": {
         "id": "function/dart:core::StringBuffer._writeOne",
@@ -11633,7 +11847,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(String,Object?)"
+        "type": "String Function(String,Object?)",
+        "functionKind": 0
       },
       "dart:core::StringBuffer._writeString": {
         "id": "function/dart:core::StringBuffer._writeString",
@@ -11661,7 +11876,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.length": {
         "id": "function/dart:core::StringBuffer.length",
@@ -11683,7 +11899,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(_) {\n      return this._contents.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.toString": {
         "id": "function/dart:core::StringBuffer.toString",
@@ -11705,7 +11922,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "toString$0(_) {\n      var t1 = this._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.write": {
         "id": "function/dart:core::StringBuffer.write",
@@ -11733,7 +11951,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.writeAll": {
         "id": "function/dart:core::StringBuffer.writeAll",
@@ -11766,7 +11985,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Iterable<dynamic>,[String])"
+        "type": "void Function(Iterable<dynamic>,[String])",
+        "functionKind": 2
       },
       "dart:core::UnsupportedError.UnsupportedError": {
         "id": "function/dart:core::UnsupportedError.UnsupportedError",
@@ -11794,7 +12014,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "UnsupportedError$(message) {\n      return new A.UnsupportedError(message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:core::UnsupportedError.toString": {
         "id": "function/dart:core::UnsupportedError.toString",
@@ -11816,7 +12037,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Unsupported operation: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::bool.toString": {
         "id": "function/dart:core::bool.toString",
@@ -11838,7 +12060,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::print": {
         "id": "function/dart:core::print",
@@ -11866,7 +12089,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 0
       },
       "hello_world.dart::main": {
         "id": "function/hello_world.dart::main",
@@ -11888,7 +12112,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "main() {\n      A.printString(\"Hello, World!\");\n    }",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       }
     },
     "typedef": {},
@@ -11977,66 +12202,6 @@
         "code": "",
         "type": "void Function(String)?"
       },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes",
-        "kind": "field",
-        "name": "erasedTypes",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"eT\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.evalCache": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.evalCache",
-        "kind": "field",
-        "name": "evalCache",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"eC\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
-        "kind": "field",
-        "name": "sharedEmptyArray",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"sEA\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
-        "kind": "field",
-        "name": "typeParameterVariances",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"tPV\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.typeRules": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeRules",
-        "kind": "field",
-        "name": "typeRules",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"tR\")",
-        "code": "",
-        "type": "String"
-      },
       "dart:_js_helper::BoundClosure._interceptor": {
         "id": "field/dart:_js_helper::BoundClosure._interceptor",
         "kind": "field",
@@ -12109,6 +12274,66 @@
         "code": "",
         "type": "dynamic"
       },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes",
+        "kind": "field",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eT\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache",
+        "kind": "field",
+        "name": "evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eC\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
+        "kind": "field",
+        "name": "sharedEmptyArray",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"sEA\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
+        "kind": "field",
+        "name": "typeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"tPV\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules",
+        "kind": "field",
+        "name": "typeRules",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"tR\")",
+        "code": "",
+        "type": "String"
+      },
       "dart:_rti::Rti._as": {
         "id": "field/dart:_rti::Rti._as",
         "kind": "field",
@@ -12429,7 +12654,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::CyclicInitializationError",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
+        "inferredType": "[exact=JSString]",
         "code": "",
         "type": "String?"
       },
@@ -12546,7 +12771,7 @@
       "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n": {
         "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 131,
         "outputUnit": "outputUnit/main",
         "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -12554,7 +12779,7 @@
       "B.Interceptor_methods = J.Interceptor.prototype;\n": {
         "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 49,
         "outputUnit": "outputUnit/main",
         "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -12562,7 +12787,7 @@
       "B.JSArray_methods = J.JSArray.prototype;\n": {
         "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 41,
         "outputUnit": "outputUnit/main",
         "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -12570,7 +12795,7 @@
       "B.JSString_methods = J.JSString.prototype;\n": {
         "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 43,
         "outputUnit": "outputUnit/main",
         "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -12578,7 +12803,7 @@
       "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n": {
         "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 59,
         "outputUnit": "outputUnit/main",
         "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -14867,10 +15092,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_interceptors::JSArray.add": [
@@ -15219,10 +15440,6 @@
     ],
     "function/dart:_interceptors::JSString.+": [
       {
-        "id": "function/dart:_js_helper::wrapException",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._bind",
         "mask": null
       },
@@ -15361,10 +15578,6 @@
       {
         "id": "function/dart:_rti::instanceType",
         "mask": null
-      },
-      {
-        "id": "function/dart:core::ArgumentError.ArgumentError.value",
-        "mask": null
       }
     ],
     "function/dart:_internal::LateError.toString": [
@@ -15469,10 +15682,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure._computeSignatureFunctionNewRti": [
@@ -15481,302 +15690,14 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.cspForwardCall": [
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverOf",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.cspForwardInterceptedCall": [
@@ -15797,162 +15718,18 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.forwardCallTo": [
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
@@ -15975,10 +15752,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._bind",
         "mask": null
       },
@@ -16335,10 +16108,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._bind",
         "mask": null
       },
@@ -16721,22 +16490,10 @@
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:_js_helper::_AssertionError.toString",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/dart:_js_helper::wrapException",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Error.toString",
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:core::ArgumentError.ArgumentError.value",
-        "mask": null
-      },
-      {
         "id": "function/dart:core::ArgumentError.toString",
         "mask": "[subclass=Object]"
       },
@@ -16783,36 +16540,6 @@
         "mask": null
       }
     ],
-    "function/dart:_js_helper::_AssertionError.toString": [
-      {
-        "id": "field/dart:core::AssertionError.message",
-        "mask": null
-      },
-      {
-        "id": "function/dart:core::Error.safeToString",
-        "mask": null
-      }
-    ],
-    "function/dart:_js_helper::assertThrow": [
-      {
-        "id": "function/dart:_js_helper::_AssertionError._AssertionError",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::_AssertionError._AssertionError",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_js_helper::wrapException",
-        "mask": null
-      }
-    ],
-    "function/dart:_js_helper::boolConversionCheck": [
-      {
-        "id": "function/dart:_js_helper::assertThrow",
-        "mask": null
-      }
-    ],
     "function/dart:_js_helper::closureFromTearOff": [
       {
         "id": "function/dart:_js_helper::Closure.fromTearOff",
@@ -17091,10 +16818,6 @@
         "mask": "[null|subclass=Object]"
       },
       {
-        "id": "function/dart:_js_helper::_AssertionError.toString",
-        "mask": "[null|subclass=Object]"
-      },
-      {
         "id": "function/dart:_rti::_Error.toString",
         "mask": "[null|subclass=Object]"
       },
@@ -17315,10 +17038,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::throwExpression",
         "mask": null
       }
@@ -18329,10 +18048,6 @@
     ],
     "function/dart:_rti::_Error.compose": [
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_rtiToString",
         "mask": null
       },
@@ -18480,17 +18195,17 @@
     "function/dart:_rti::_Parser.handleDigit": [
       {
         "id": "function/dart:_recipe_syntax::Recipe.digitValue",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
         "mask": null
       },
       {
+        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_recipe_syntax::Recipe.isDigit",
         "mask": null
       },
@@ -18499,14 +18214,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Parser.charCodeAt",
         "mask": null
       },
@@ -18516,143 +18223,11 @@
       },
       {
         "id": "function/dart:_rti::_Parser.push",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Parser.push",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
+        "mask": "inlined"
       }
     ],
     "function/dart:_rti::_Parser.handleExtendedOperations": [
@@ -19909,14 +19484,6 @@
     ],
     "function/dart:_rti::_Parser.toType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Parser.indexToType",
         "mask": null
       },
@@ -19942,11 +19509,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.asString",
@@ -19971,138 +19538,6 @@
       {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Parser.toTypes": [
@@ -20235,14 +19670,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getCanonicalRecipe",
         "mask": null
       },
@@ -20260,10 +19687,6 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
@@ -20275,7 +19698,7 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayLength",
+        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": "inlined"
       },
       {
@@ -20283,6 +19706,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.asBool",
         "mask": null
       },
@@ -20305,138 +19732,6 @@
       {
         "id": "function/dart:_rti::_Utils.asString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe._canonicalRecipeOfAny": [
@@ -22899,14 +22194,6 @@
     ],
     "function/dart:_rti::_Universe.findErasedType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfErased",
         "mask": null
       },
@@ -22956,11 +22243,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.isNum",
@@ -22973,147 +22260,11 @@
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe.findRule": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::_Universe._findRule",
         "mask": null
       },
       {
@@ -23122,10 +22273,6 @@
       },
       {
         "id": "function/dart:_rti::_Universe._findRule",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Universe._findRule",
         "mask": "inlined"
       },
       {
@@ -23147,138 +22294,6 @@
       {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe.findTypeParameterVariances": [
@@ -23595,14 +22610,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -23615,144 +22622,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asDoubleQ": [
@@ -23761,14 +22636,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -23781,144 +22648,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asDoubleS": [
@@ -23927,14 +22662,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -23947,144 +22674,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asInt": [
@@ -24093,14 +22688,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -24113,144 +22700,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asIntQ": [
@@ -24259,14 +22714,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -24279,144 +22726,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asIntS": [
@@ -24425,14 +22740,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -24445,144 +22752,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asNum": [
@@ -24591,14 +22766,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -24611,144 +22778,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asNumQ": [
@@ -24757,11 +22792,29 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
+        "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::_Utils.asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asNum",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": "inlined"
+      }
+    ],
+    "function/dart:_rti::_asNumS": [
+      {
+        "id": "function/dart:_js_helper::wrapException",
         "mask": null
       },
       {
@@ -24777,147 +22830,15 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
-    "function/dart:_rti::_asNumS": [
+    "function/dart:_rti::_asObject": [
       {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
@@ -24935,164 +22856,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asNum",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      }
-    ],
-    "function/dart:_rti::_asObject": [
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_arrayInstanceType",
         "mask": null
       },
@@ -25231,14 +22994,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -25251,144 +23006,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asStringQ": [
@@ -25397,14 +23020,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -25417,144 +23032,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asStringS": [
@@ -25563,14 +23046,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -25583,144 +23058,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_failedAsCheck": [
@@ -25801,14 +23144,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": "[null|exact=JSString]"
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::ioore",
         "mask": null
       },
@@ -25878,18 +23213,6 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
@@ -25901,6 +23224,30 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.arrayLength",
         "mask": "inlined"
       },
@@ -25909,18 +23256,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.asBool",
         "mask": null
       },
@@ -25934,6 +23269,18 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
       {
@@ -25941,26 +23288,14 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.asString",
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.isIdentical",
         "mask": null
       },
@@ -26140,11 +23475,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._isCheck",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._isCheck",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
@@ -26289,6 +23624,10 @@
       {
         "id": "function/dart:_rti::instanceType",
         "mask": null
+      },
+      {
+        "id": "function/dart:_rti::isNullable",
+        "mask": null
       }
     ],
     "function/dart:_rti::_generalIsTestImplementation": [
@@ -26331,11 +23670,7 @@
     ],
     "function/dart:_rti::_generalNullableAsCheckImplementation": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::Rti._isCheck",
         "mask": null
       },
       {
@@ -26343,7 +23678,7 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::Rti._isCheck",
+        "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
       {
@@ -26351,144 +23686,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_failedAsCheck",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_generalNullableIsTestImplementation": [
@@ -26703,6 +23902,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::isNullable",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::isObjectType",
         "mask": null
       },
@@ -27039,14 +24242,6 @@
     ],
     "function/dart:_rti::_instanceTypeFromConstructorMiss": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe.findErasedType",
         "mask": null
       },
@@ -27055,110 +24250,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isClosure",
         "mask": null
       },
@@ -27167,40 +24258,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
+        "id": "function/dart:_rti::_theUniverse",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_theUniverse",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_theUniverse",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isClosure": [
@@ -27631,14 +24694,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getInterfaceName",
         "mask": "inlined"
       },
@@ -27656,17 +24711,17 @@
       },
       {
         "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::Rti._getPrimary",
         "mask": null
       },
@@ -27696,11 +24751,11 @@
       },
       {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Universe.sharedEmptyArray",
@@ -27716,14 +24771,10 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
         "mask": null
       },
       {
@@ -27731,6 +24782,10 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::_Utils.arraySetAt",
         "mask": null
       },
@@ -27740,17 +24795,17 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asString",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
       },
@@ -27760,151 +24815,19 @@
       },
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_areArgumentsSubtypes",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_theUniverse",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isListTestViaProperty": [
@@ -27913,14 +24836,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
         "mask": null
       },
@@ -27930,11 +24845,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.instanceOf",
@@ -27949,110 +24864,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
@@ -28061,36 +24872,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_nullIs",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isSubtype": [
@@ -28120,11 +24903,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
@@ -28199,6 +24982,10 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::Rti._getQuestionFromStar",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::Rti._getRest",
         "mask": null
       },
@@ -28208,10 +24995,6 @@
       },
       {
         "id": "function/dart:_rti::Rti._getStarArgument",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._getStarArgument",
         "mask": "inlined"
       },
       {
@@ -28219,22 +25002,26 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
+        "id": "function/dart:_rti::Rti._getStarArgument",
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.arrayConcat",
         "mask": null
       },
@@ -28248,11 +25035,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
@@ -28501,14 +25288,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
         "mask": null
       },
@@ -28518,118 +25297,18 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.instanceOf",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
+        "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
       {
@@ -28637,40 +25316,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isDartObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_nullIs",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_nullIs": [
@@ -28885,10 +25532,6 @@
     ],
     "function/dart:_rti::_rtiArrayToString": [
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
@@ -28947,18 +25590,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": "[null|exact=JSString]"
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::ioore",
         "mask": null
       },
@@ -28980,11 +25611,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBounds",
@@ -30335,27 +26966,15 @@
     ],
     "function/dart:_rti::getTypeFromTypesTable": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe.eval",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arraySetAt",
         "mask": "inlined"
       },
       {
@@ -30363,6 +26982,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arraySetAt",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
@@ -30387,130 +27010,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_theUniverse",
         "mask": null
       },
@@ -30521,26 +27020,10 @@
       {
         "id": "function/dart:_rti::findType",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::instanceOrFunctionType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._isUnionOfFunctionType",
         "mask": null
       },
@@ -30549,110 +27032,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isClosure",
         "mask": null
       },
@@ -30661,52 +27040,16 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::closureFunctionType",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::instanceType",
         "mask": null
       }
     ],
     "function/dart:_rti::instanceType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
@@ -30727,106 +27070,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_instanceType",
         "mask": null
       },
@@ -30839,44 +27082,12 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isDartObject",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::isBottomType": [
@@ -31967,10 +28178,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::StaticClosure.toString",
         "mask": "[subclass=Closure]"
       }
@@ -32173,7 +28380,7 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_asIntS",
+        "id": "function/dart:_rti::_asInt",
         "mask": null
       }
     ],
@@ -32189,10 +28396,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:core::StringBuffer._writeAll": [
@@ -32201,6 +28404,10 @@
         "mask": null
       },
       {
+        "id": "field/dart:_rti::Rti._precomputed1",
+        "mask": null
+      },
+      {
         "id": "function/dart:_interceptors::ArrayIterator.ArrayIterator",
         "mask": null
       },
@@ -32504,8 +28711,8 @@
       "id": "outputUnit/main",
       "kind": "outputUnit",
       "name": "main",
-      "size": 91189,
-      "filename": "hello_world",
+      "size": 90362,
+      "filename": "hello_world.js",
       "imports": []
     }
   ],
@@ -32514,11 +28721,11 @@
   "dump_minor_version": 1,
   "program": {
     "entrypoint": "function/hello_world.dart::main",
-    "size": 91189,
+    "size": 90362,
     "dart2jsVersion": null,
-    "compilationMoment": "2022-04-19 11:35:28.623405",
-    "compilationDuration": 1461256,
-    "toJsonDuration": 2000,
+    "compilationMoment": "2022-05-26 21:08:43.608041",
+    "compilationDuration": 3177312,
+    "toJsonDuration": 3000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
     "isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
index bfa9884..cc4f282 100644
--- a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -15,7 +15,7 @@
         "id": "library/dart:_interceptors::",
         "kind": "library",
         "name": "_interceptors",
-        "size": 9095,
+        "size": 8502,
         "children": [
           "class/dart:_interceptors::ArrayIterator",
           "class/dart:_interceptors::Interceptor",
@@ -38,11 +38,10 @@
         "id": "library/dart:_internal::",
         "kind": "library",
         "name": "dart._internal",
-        "size": 1080,
+        "size": 284,
         "children": [
           "class/dart:_internal::LateError",
           "class/dart:_internal::NotNullableError",
-          "class/dart:_internal::ReachabilityError",
           "field/dart:_internal::printToZone",
           "function/dart:_internal::checkNotNullable",
           "function/dart:_internal::makeListFixedLength",
@@ -51,21 +50,11 @@
         ],
         "canonicalUri": "dart:_internal"
       },
-      "dart:_js_embedded_names::": {
-        "id": "library/dart:_js_embedded_names::",
-        "kind": "library",
-        "name": "dart2js._embedded_names",
-        "size": 0,
-        "children": [
-          "class/dart:_js_embedded_names::RtiUniverseFieldNames"
-        ],
-        "canonicalUri": "dart:_js_embedded_names"
-      },
       "dart:_js_helper::": {
         "id": "library/dart:_js_helper::",
         "kind": "library",
         "name": "_js_helper",
-        "size": 47708,
+        "size": 47353,
         "children": [
           "class/dart:_js_helper::BoundClosure",
           "class/dart:_js_helper::Closure",
@@ -157,11 +146,21 @@
         ],
         "canonicalUri": "dart:_js_primitives"
       },
+      "dart:_js_shared_embedded_names::": {
+        "id": "library/dart:_js_shared_embedded_names::",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames"
+        ],
+        "canonicalUri": "dart:_js_shared_embedded_names"
+      },
       "dart:_late_helper::": {
         "id": "library/dart:_late_helper::",
         "kind": "library",
         "name": "_late_helper",
-        "size": 593,
+        "size": 560,
         "children": [
           "class/dart:_late_helper::_Cell",
           "function/dart:_late_helper::throwLateFieldADI"
@@ -171,7 +170,7 @@
       "dart:_recipe_syntax::": {
         "id": "library/dart:_recipe_syntax::",
         "kind": "library",
-        "name": "dart2js._recipe_syntax",
+        "name": "js_shared._recipe_syntax",
         "size": 0,
         "children": [
           "class/dart:_recipe_syntax::Recipe"
@@ -182,7 +181,7 @@
         "id": "library/dart:_rti::",
         "kind": "library",
         "name": "rti",
-        "size": 52949,
+        "size": 52862,
         "children": [
           "class/dart:_rti::Rti",
           "class/dart:_rti::TypeRule",
@@ -251,7 +250,6 @@
           "function/dart:_rti::_theUniverse",
           "function/dart:_rti::_unminifyOrTag",
           "function/dart:_rti::closureFunctionType",
-          "function/dart:_rti::createRuntimeType",
           "function/dart:_rti::evalInInstance",
           "function/dart:_rti::findType",
           "function/dart:_rti::getTypeFromTypesTable",
@@ -276,7 +274,7 @@
         "id": "library/dart:async::",
         "kind": "library",
         "name": "dart.async",
-        "size": 41204,
+        "size": 41039,
         "children": [
           "class/dart:async::AsyncError",
           "class/dart:async::Completer",
@@ -329,7 +327,7 @@
         "id": "library/dart:collection::",
         "kind": "library",
         "name": "dart.collection",
-        "size": 7914,
+        "size": 7950,
         "children": [
           "class/dart:collection::IterableBase",
           "class/dart:collection::LinkedHashMap",
@@ -353,7 +351,7 @@
         "id": "library/dart:core::",
         "kind": "library",
         "name": "dart.core",
-        "size": 9042,
+        "size": 8591,
         "children": [
           "class/dart:core::ArgumentError",
           "class/dart:core::AssertionError",
@@ -399,7 +397,7 @@
         "children": [
           "function/hello_world_deferred.dart::main"
         ],
-        "canonicalUri": "file:///Users/markzipan/Projects/dart-sdk/sdk/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
+        "canonicalUri": "file:///usr/local/google/home/natebiggs/dart-sdk/sdk/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
       }
     },
     "class": {
@@ -421,7 +419,7 @@
         "id": "class/dart:_interceptors::ArrayIterator",
         "kind": "class",
         "name": "ArrayIterator",
-        "size": 798,
+        "size": 863,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_interceptors::",
         "modifiers": {
@@ -441,7 +439,7 @@
         "id": "class/dart:_interceptors::Interceptor",
         "kind": "class",
         "name": "Interceptor",
-        "size": 358,
+        "size": 353,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_interceptors::",
         "modifiers": {
@@ -561,7 +559,7 @@
         "id": "class/dart:_interceptors::JSString",
         "kind": "class",
         "name": "JSString",
-        "size": 806,
+        "size": 697,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_interceptors::",
         "modifiers": {
@@ -659,7 +657,7 @@
         "id": "class/dart:_internal::NotNullableError",
         "kind": "class",
         "name": "NotNullableError",
-        "size": 349,
+        "size": 0,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_internal::",
         "modifiers": {
@@ -667,49 +665,14 @@
         },
         "children": [
           "field/dart:_internal::NotNullableError._name",
-          "function/dart:_internal::NotNullableError.NotNullableError",
-          "function/dart:_internal::NotNullableError.toString"
-        ]
-      },
-      "dart:_internal::ReachabilityError": {
-        "id": "class/dart:_internal::ReachabilityError",
-        "kind": "class",
-        "name": "ReachabilityError",
-        "size": 241,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_internal::",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/dart:_internal::ReachabilityError._message",
-          "function/dart:_internal::ReachabilityError.ReachabilityError",
-          "function/dart:_internal::ReachabilityError.toString"
-        ]
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames": {
-        "id": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "kind": "class",
-        "name": "RtiUniverseFieldNames",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_js_embedded_names::",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.evalCache",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
-          "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeRules"
+          "function/dart:_internal::NotNullableError.NotNullableError"
         ]
       },
       "dart:_js_helper::BoundClosure": {
         "id": "class/dart:_js_helper::BoundClosure",
         "kind": "class",
         "name": "BoundClosure",
-        "size": 717,
+        "size": 707,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "modifiers": {
@@ -784,7 +747,7 @@
         "id": "class/dart:_js_helper::DeferredNotLoadedError",
         "kind": "class",
         "name": "DeferredNotLoadedError",
-        "size": 269,
+        "size": 264,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "modifiers": {
@@ -858,7 +821,7 @@
         "id": "class/dart:_js_helper::JsNoSuchMethodError",
         "kind": "class",
         "name": "JsNoSuchMethodError",
-        "size": 669,
+        "size": 654,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "modifiers": {
@@ -927,7 +890,7 @@
         "id": "class/dart:_js_helper::NullError",
         "kind": "class",
         "name": "NullError",
-        "size": 397,
+        "size": 392,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "modifiers": {
@@ -1110,11 +1073,29 @@
           "function/dart:_js_helper::_StackTrace.toString"
         ]
       },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
+        "id": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "kind": "class",
+        "name": "RtiUniverseFieldNames",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "library/dart:_js_shared_embedded_names::",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
+          "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
+        ]
+      },
       "dart:_late_helper::_Cell": {
         "id": "class/dart:_late_helper::_Cell",
         "kind": "class",
         "name": "_Cell",
-        "size": 343,
+        "size": 315,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_late_helper::",
         "modifiers": {
@@ -1177,7 +1158,6 @@
           "function/dart:_rti::Rti._getBindCache",
           "function/dart:_rti::Rti._getBindingArguments",
           "function/dart:_rti::Rti._getBindingBase",
-          "function/dart:_rti::Rti._getCachedRuntimeType",
           "function/dart:_rti::Rti._getCanonicalRecipe",
           "function/dart:_rti::Rti._getEvalCache",
           "function/dart:_rti::Rti._getFunctionParameters",
@@ -1201,7 +1181,6 @@
           "function/dart:_rti::Rti._isUnionOfFunctionType",
           "function/dart:_rti::Rti._setAsCheckFunction",
           "function/dart:_rti::Rti._setBindCache",
-          "function/dart:_rti::Rti._setCachedRuntimeType",
           "function/dart:_rti::Rti._setCanonicalRecipe",
           "function/dart:_rti::Rti._setEvalCache",
           "function/dart:_rti::Rti._setIsTestFunction",
@@ -1312,16 +1291,14 @@
         "id": "class/dart:_rti::_Type",
         "kind": "class",
         "name": "_Type",
-        "size": 161,
+        "size": 0,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/dart:_rti::_Type._rti",
-          "function/dart:_rti::_Type._Type",
-          "function/dart:_rti::_Type.toString"
+          "field/dart:_rti::_Type._rti"
         ]
       },
       "dart:_rti::_TypeError": {
@@ -1504,7 +1481,7 @@
         "id": "class/dart:async::Future",
         "kind": "class",
         "name": "Future",
-        "size": 1890,
+        "size": 1924,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "modifiers": {
@@ -1565,7 +1542,7 @@
         "id": "class/dart:async::_AsyncAwaitCompleter",
         "kind": "class",
         "name": "_AsyncAwaitCompleter",
-        "size": 860,
+        "size": 842,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "modifiers": {
@@ -1650,7 +1627,7 @@
         "id": "class/dart:async::_Future",
         "kind": "class",
         "name": "_Future",
-        "size": 14011,
+        "size": 13804,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "modifiers": {
@@ -1699,7 +1676,7 @@
         "id": "class/dart:async::_FutureListener",
         "kind": "class",
         "name": "_FutureListener",
-        "size": 1615,
+        "size": 1618,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "modifiers": {
@@ -1734,7 +1711,7 @@
         "id": "class/dart:async::_RootZone",
         "kind": "class",
         "name": "_RootZone",
-        "size": 1901,
+        "size": 1919,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "modifiers": {
@@ -1938,7 +1915,7 @@
         "id": "class/dart:collection::_LinkedHashSet",
         "kind": "class",
         "name": "_LinkedHashSet",
-        "size": 3477,
+        "size": 3448,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:collection::",
         "modifiers": {
@@ -1994,7 +1971,7 @@
         "id": "class/dart:collection::_LinkedHashSetIterator",
         "kind": "class",
         "name": "_LinkedHashSetIterator",
-        "size": 947,
+        "size": 1012,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:collection::",
         "modifiers": {
@@ -2094,7 +2071,7 @@
         "id": "class/dart:core::CyclicInitializationError",
         "kind": "class",
         "name": "CyclicInitializationError",
-        "size": 413,
+        "size": 297,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -2158,7 +2135,7 @@
         "id": "class/dart:core::IndexError",
         "kind": "class",
         "name": "IndexError",
-        "size": 745,
+        "size": 618,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -2222,7 +2199,7 @@
         "id": "class/dart:core::Object",
         "kind": "class",
         "name": "Object",
-        "size": 396,
+        "size": 391,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:core::",
         "modifiers": {
@@ -2520,13 +2497,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(JSArray<ArrayIterator.E>)"
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)",
+        "functionKind": 3
       },
       "dart:_interceptors::ArrayIterator.current": {
         "id": "function/dart:_interceptors::ArrayIterator.current",
         "kind": "function",
         "name": "current",
-        "size": 49,
+        "size": 114,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_interceptors::ArrayIterator",
         "children": [],
@@ -2541,8 +2519,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$current() {\n      return this._current;\n    }",
-        "type": "ArrayIterator.E Function()"
+        "code": "get$current() {\n      var t1 = this._current;\n      return t1 == null ? this.$ti._precomputed1._as(t1) : t1;\n    }",
+        "type": "ArrayIterator.E Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::ArrayIterator.moveNext": {
         "id": "function/dart:_interceptors::ArrayIterator.moveNext",
@@ -2564,7 +2543,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "moveNext$0() {\n      var t2, _this = this,\n        t1 = _this._iterable,\n        $length = t1.length;\n      if (_this._length !== $length)\n        throw A.wrapException(A.throwConcurrentModificationError(t1));\n      t2 = _this._index;\n      if (t2 >= $length) {\n        _this.set$_current(null);\n        return false;\n      }\n      _this.set$_current(t1[t2]);\n      ++_this._index;\n      return true;\n    }",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::Interceptor.==": {
         "id": "function/dart:_interceptors::Interceptor.==",
@@ -2592,7 +2572,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "$eq(receiver, other) {\n      return receiver === other;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 2
       },
       "dart:_interceptors::Interceptor.hashCode": {
         "id": "function/dart:_interceptors::Interceptor.hashCode",
@@ -2614,13 +2595,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      return A.Primitives_objectHashCode(receiver);\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::Interceptor.toString": {
         "id": "function/dart:_interceptors::Interceptor.toString",
         "kind": "function",
         "name": "toString",
-        "size": 109,
+        "size": 104,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_interceptors::Interceptor",
         "children": [],
@@ -2635,8 +2617,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(receiver)) + \"'\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.Primitives_objectTypeName(receiver) + \"'\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.JSArray.fixed": {
         "id": "function/dart:_interceptors::JSArray.JSArray.fixed",
@@ -2664,7 +2647,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "JSArray_JSArray$fixed($length, $E) {\n      if ($length < 0 || $length > 4294967295)\n        throw A.wrapException(new A.RangeError(0, 4294967295, true, $length, \"length\", \"Invalid value\"));\n      return J.JSArray_markFixedList(A._setArrayType(new Array($length), $E._eval$1(\"JSArray<0>\")), $E);\n    }",
-        "type": "JSArray<#A> Function<#A extends Object?>(int)"
+        "type": "JSArray<#A> Function<#A extends Object?>(int)",
+        "functionKind": 3
       },
       "dart:_interceptors::JSArray.JSArray.growable": {
         "id": "function/dart:_interceptors::JSArray.JSArray.growable",
@@ -2692,7 +2676,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "JSArray_JSArray$growable($length, $E) {\n      if ($length < 0)\n        throw A.wrapException(A.ArgumentError$(\"Length must be a non-negative integer: \" + $length, null));\n      return A._setArrayType(new Array($length), $E._eval$1(\"JSArray<0>\"));\n    }",
-        "type": "JSArray<#A> Function<#A extends Object?>(int)"
+        "type": "JSArray<#A> Function<#A extends Object?>(int)",
+        "functionKind": 3
       },
       "dart:_interceptors::JSArray.JSArray.markFixed": {
         "id": "function/dart:_interceptors::JSArray.JSArray.markFixed",
@@ -2720,7 +2705,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)",
+        "functionKind": 3
       },
       "dart:_interceptors::JSArray.JSArray.markGrowable": {
         "id": "function/dart:_interceptors::JSArray.JSArray.markGrowable",
@@ -2748,7 +2734,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)",
+        "functionKind": 3
       },
       "dart:_interceptors::JSArray.JSArray.typed": {
         "id": "function/dart:_interceptors::JSArray.JSArray.typed",
@@ -2776,7 +2763,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)",
+        "functionKind": 3
       },
       "dart:_interceptors::JSArray.[]=": {
         "id": "function/dart:_interceptors::JSArray.[]=",
@@ -2809,7 +2797,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "$indexSet(receiver, index, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.immutable$list)\n        A.throwExpression(A.UnsupportedError$(\"indexed set\"));\n      if (!(index >= 0 && index < receiver.length))\n        throw A.wrapException(A.diagnoseIndexError(receiver, index));\n      receiver[index] = value;\n    }",
-        "type": "void Function(int,Object?)"
+        "type": "void Function(int,Object?)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.add": {
         "id": "function/dart:_interceptors::JSArray.add",
@@ -2837,7 +2826,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "add$1(receiver, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.fixed$length)\n        A.throwExpression(A.UnsupportedError$(\"add\"));\n      receiver.push(value);\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.checkGrowable": {
         "id": "function/dart:_interceptors::JSArray.checkGrowable",
@@ -2865,7 +2855,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.checkMutable": {
         "id": "function/dart:_interceptors::JSArray.checkMutable",
@@ -2893,7 +2884,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.hashCode": {
         "id": "function/dart:_interceptors::JSArray.hashCode",
@@ -2915,7 +2907,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      return A.Primitives_objectHashCode(receiver);\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.isFixedLength": {
         "id": "function/dart:_interceptors::JSArray.isFixedLength",
@@ -2943,7 +2936,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.isGrowable": {
         "id": "function/dart:_interceptors::JSArray.isGrowable",
@@ -2971,7 +2965,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.isMutable": {
         "id": "function/dart:_interceptors::JSArray.isMutable",
@@ -2999,7 +2994,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.isUnmodifiable": {
         "id": "function/dart:_interceptors::JSArray.isUnmodifiable",
@@ -3027,7 +3023,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(JSArray<dynamic>)"
+        "type": "bool Function(JSArray<dynamic>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.iterator": {
         "id": "function/dart:_interceptors::JSArray.iterator",
@@ -3049,7 +3046,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$iterator(receiver) {\n      return new J.ArrayIterator(receiver, receiver.length, A._arrayInstanceType(receiver)._eval$1(\"ArrayIterator<1>\"));\n    }",
-        "type": "Iterator<JSArray.E> Function()"
+        "type": "Iterator<JSArray.E> Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.join": {
         "id": "function/dart:_interceptors::JSArray.join",
@@ -3077,7 +3075,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "join$1(receiver, separator) {\n      var i,\n        list = A.List_List$filled(receiver.length, \"\", type$.String);\n      for (i = 0; i < receiver.length; ++i)\n        this.$indexSet(list, i, A.S(receiver[i]));\n      return list.join(separator);\n    }",
-        "type": "String Function([String])"
+        "type": "String Function([String])",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.length": {
         "id": "function/dart:_interceptors::JSArray.length",
@@ -3099,7 +3098,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(receiver) {\n      return receiver.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSArray.markFixedList": {
         "id": "function/dart:_interceptors::JSArray.markFixedList",
@@ -3127,7 +3127,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "JSArray_markFixedList(list, $T) {\n      list.fixed$length = Array;\n      return list;\n    }",
-        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)",
+        "functionKind": 0
       },
       "dart:_interceptors::JSArray.toString": {
         "id": "function/dart:_interceptors::JSArray.toString",
@@ -3149,7 +3150,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return A.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSBool.hashCode": {
         "id": "function/dart:_interceptors::JSBool.hashCode",
@@ -3171,7 +3173,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      return receiver ? 519018 : 218159;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSBool.toString": {
         "id": "function/dart:_interceptors::JSBool.toString",
@@ -3193,7 +3196,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNull.==": {
         "id": "function/dart:_interceptors::JSNull.==",
@@ -3221,7 +3225,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "$eq(receiver, other) {\n      return null == other;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNull.hashCode": {
         "id": "function/dart:_interceptors::JSNull.hashCode",
@@ -3243,7 +3248,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      return 0;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNull.toString": {
         "id": "function/dart:_interceptors::JSNull.toString",
@@ -3265,7 +3271,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return \"null\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNumber._shrBothPositive": {
         "id": "function/dart:_interceptors::JSNumber._shrBothPositive",
@@ -3293,7 +3300,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_shrBothPositive$1(receiver, other) {\n      return other > 31 ? 0 : receiver >>> other;\n    }",
-        "type": "num Function(num)"
+        "type": "num Function(num)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNumber._shrOtherPositive": {
         "id": "function/dart:_interceptors::JSNumber._shrOtherPositive",
@@ -3321,7 +3329,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_shrOtherPositive$1(receiver, other) {\n      var t1;\n      if (receiver > 0)\n        t1 = this._shrBothPositive$1(receiver, other);\n      else {\n        t1 = other > 31 ? 31 : other;\n        t1 = receiver >> t1 >>> 0;\n      }\n      return t1;\n    }",
-        "type": "num Function(num)"
+        "type": "num Function(num)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNumber.hashCode": {
         "id": "function/dart:_interceptors::JSNumber.hashCode",
@@ -3343,7 +3352,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      var absolute, floorLog2, factor, scaled,\n        intValue = receiver | 0;\n      if (receiver === intValue)\n        return intValue & 536870911;\n      absolute = Math.abs(receiver);\n      floorLog2 = Math.log(absolute) / 0.6931471805599453 | 0;\n      factor = Math.pow(2, floorLog2);\n      scaled = absolute < 1 ? absolute / factor : factor / absolute;\n      return ((scaled * 9007199254740992 | 0) + (scaled * 3542243181176521 | 0)) * 599197 + floorLog2 * 1259 & 536870911;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSNumber.toString": {
         "id": "function/dart:_interceptors::JSNumber.toString",
@@ -3365,13 +3375,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      if (receiver === 0 && 1 / receiver < 0)\n        return \"-0.0\";\n      else\n        return \"\" + receiver;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.+": {
         "id": "function/dart:_interceptors::JSString.+",
         "kind": "function",
         "name": "+",
-        "size": 169,
+        "size": 60,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_interceptors::JSString",
         "children": [],
@@ -3386,14 +3397,15 @@
         "parameters": [
           {
             "name": "other",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$add(receiver, other) {\n      if (typeof other != \"string\")\n        throw A.wrapException(A.ArgumentError$value(other, null, null));\n      return receiver + other;\n    }",
-        "type": "String Function(String)"
+        "code": "$add(receiver, other) {\n      return receiver + other;\n    }",
+        "type": "String Function(String)",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.hashCode": {
         "id": "function/dart:_interceptors::JSString.hashCode",
@@ -3415,7 +3427,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      var t1, hash, i;\n      for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) {\n        hash = hash + receiver.charCodeAt(i) & 536870911;\n        hash = hash + ((hash & 524287) << 10) & 536870911;\n        hash ^= hash >> 6;\n      }\n      hash = hash + ((hash & 67108863) << 3) & 536870911;\n      hash ^= hash >> 11;\n      return hash + ((hash & 16383) << 15) & 536870911;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.isEmpty": {
         "id": "function/dart:_interceptors::JSString.isEmpty",
@@ -3437,7 +3450,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.length": {
         "id": "function/dart:_interceptors::JSString.length",
@@ -3459,7 +3473,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(receiver) {\n      return receiver.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::JSString.toString": {
         "id": "function/dart:_interceptors::JSString.toString",
@@ -3481,7 +3496,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return receiver;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::LegacyJavaScriptObject.hashCode": {
         "id": "function/dart:_interceptors::LegacyJavaScriptObject.hashCode",
@@ -3503,7 +3519,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$hashCode(receiver) {\n      return 0;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_interceptors::LegacyJavaScriptObject.toString": {
         "id": "function/dart:_interceptors::LegacyJavaScriptObject.toString",
@@ -3525,7 +3542,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_internal::LateError.LateError.fieldADI": {
         "id": "function/dart:_internal::LateError.LateError.fieldADI",
@@ -3546,14 +3564,15 @@
         "parameters": [
           {
             "name": "fieldName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_internal::LateError.LateError.localNI": {
         "id": "function/dart:_internal::LateError.LateError.localNI",
@@ -3581,7 +3600,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_internal::LateError.toString": {
         "id": "function/dart:_internal::LateError.toString",
@@ -3603,7 +3623,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"LateInitializationError: \" + this.__internal$_message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_internal::NotNullableError.NotNullableError": {
         "id": "function/dart:_internal::NotNullableError.NotNullableError",
@@ -3631,85 +3652,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
-      },
-      "dart:_internal::NotNullableError.toString": {
-        "id": "function/dart:_internal::NotNullableError.toString",
-        "kind": "function",
-        "name": "toString",
-        "size": 164,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_internal::NotNullableError",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads field; writes anything)",
-        "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Null is not a valid value for '\" + this._name + \"' of type '\" + A.createRuntimeType(this.$ti._precomputed1).toString$0(0) + \"'\";\n    }",
-        "type": "String Function()"
-      },
-      "dart:_internal::ReachabilityError.ReachabilityError": {
-        "id": "function/dart:_internal::ReachabilityError.ReachabilityError",
-        "kind": "function",
-        "name": "ReachabilityError",
-        "size": 84,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_internal::ReachabilityError",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=ReachabilityError]",
-        "parameters": [
-          {
-            "name": "_message",
-            "type": "Value([exact=JSString], value: \"`null` encountered as the result from expression with type `Never`.\")",
-            "declaredType": "String?"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "ReachabilityError$(_message) {\n      return new A.ReachabilityError(_message);\n    }",
-        "type": "dynamic Function([String?])"
-      },
-      "dart:_internal::ReachabilityError.toString": {
-        "id": "function/dart:_internal::ReachabilityError.toString",
-        "kind": "function",
-        "name": "toString",
-        "size": 84,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_internal::ReachabilityError",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads field; writes anything)",
-        "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"ReachabilityError: \" + this.__internal$_message;\n    }",
-        "type": "String Function()"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_internal::checkNotNullable": {
         "id": "function/dart:_internal::checkNotNullable",
         "kind": "function",
         "name": "checkNotNullable",
-        "size": 184,
+        "size": 62,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_internal::",
         "children": [],
@@ -3720,11 +3670,11 @@
           "external": false
         },
         "returnType": "#A/*free*/",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[subclass=Object]",
         "parameters": [
           {
             "name": "value",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "checkNotNullable.T"
           },
           {
@@ -3735,8 +3685,9 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "checkNotNullable(value, $name, $T) {\n      if (value == null)\n        throw A.wrapException(new A.NotNullableError($name, $T._eval$1(\"NotNullableError<0>\")));\n      return value;\n    }",
-        "type": "#A Function<#A extends Object>(#A,String)"
+        "code": "checkNotNullable(value, $name, $T) {\n      return value;\n    }",
+        "type": "#A Function<#A extends Object>(#A,String)",
+        "functionKind": 0
       },
       "dart:_internal::makeListFixedLength": {
         "id": "function/dart:_internal::makeListFixedLength",
@@ -3764,7 +3715,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)",
+        "functionKind": 0
       },
       "dart:_internal::printToConsole": {
         "id": "function/dart:_internal::printToConsole",
@@ -3792,7 +3744,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_internal::unsafeCast": {
         "id": "function/dart:_internal::unsafeCast",
@@ -3820,7 +3773,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "#A Function<#A extends Object?>(dynamic)"
+        "type": "#A Function<#A extends Object?>(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.==": {
         "id": "function/dart:_js_helper::BoundClosure.==",
@@ -3848,7 +3802,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "$eq(_, other) {\n      if (other == null)\n        return false;\n      if (this === other)\n        return true;\n      if (!(other instanceof A.BoundClosure))\n        return false;\n      return this.$_target === other.$_target && this._receiver === other._receiver;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 2
       },
       "dart:_js_helper::BoundClosure.BoundClosure": {
         "id": "function/dart:_js_helper::BoundClosure.BoundClosure",
@@ -3881,7 +3836,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::BoundClosure._computeFieldNamed": {
         "id": "function/dart:_js_helper::BoundClosure._computeFieldNamed",
@@ -3909,7 +3865,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure__computeFieldNamed(fieldName) {\n      var t1, i, $name,\n        template = new A.BoundClosure(\"receiver\", \"interceptor\"),\n        names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template), type$.nullable_Object);\n      for (t1 = names.length, i = 0; i < t1; ++i) {\n        $name = names[i];\n        if (template[$name] === fieldName)\n          return $name;\n      }\n      throw A.wrapException(A.ArgumentError$(\"Field name \" + fieldName + \" not found.\", null));\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure._name": {
         "id": "function/dart:_js_helper::BoundClosure._name",
@@ -3931,7 +3888,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::BoundClosure._target": {
         "id": "function/dart:_js_helper::BoundClosure._target",
@@ -3953,7 +3911,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "Object Function()"
+        "type": "Object Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::BoundClosure.evalRecipe": {
         "id": "function/dart:_js_helper::BoundClosure.evalRecipe",
@@ -3970,7 +3929,7 @@
           "external": false
         },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "closure",
@@ -3986,7 +3945,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "BoundClosure_evalRecipe(closure, recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, A.instanceType(closure._receiver), recipe);\n    }",
-        "type": "dynamic Function(BoundClosure,String)"
+        "type": "dynamic Function(BoundClosure,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.hashCode": {
         "id": "function/dart:_js_helper::BoundClosure.hashCode",
@@ -4008,7 +3968,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(_) {\n      return (A.objectHashCode(this._receiver) ^ A.Primitives_objectHashCode(this.$_target)) >>> 0;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::BoundClosure.interceptorFieldName": {
         "id": "function/dart:_js_helper::BoundClosure.interceptorFieldName",
@@ -4030,7 +3991,8 @@
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.interceptorOf": {
         "id": "function/dart:_js_helper::BoundClosure.interceptorOf",
@@ -4058,7 +4020,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure_interceptorOf(closure) {\n      return closure._interceptor;\n    }",
-        "type": "dynamic Function(BoundClosure)"
+        "type": "dynamic Function(BoundClosure)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.receiverFieldName": {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
@@ -4080,7 +4043,8 @@
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 3,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.receiverOf": {
         "id": "function/dart:_js_helper::BoundClosure.receiverOf",
@@ -4108,13 +4072,14 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "BoundClosure_receiverOf(closure) {\n      return closure._receiver;\n    }",
-        "type": "dynamic Function(BoundClosure)"
+        "type": "dynamic Function(BoundClosure)",
+        "functionKind": 0
       },
       "dart:_js_helper::BoundClosure.toString": {
         "id": "function/dart:_js_helper::BoundClosure.toString",
         "kind": "function",
         "name": "toString",
-        "size": 153,
+        "size": 143,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::BoundClosure",
         "children": [],
@@ -4129,14 +4094,15 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Closure '\" + A.S(this.$_name) + \"' of \" + (\"Instance of '\" + A.S(A.Primitives_objectTypeName(this._receiver)) + \"'\");\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Closure '\" + this.$_name + \"' of \" + (\"Instance of '\" + A.Primitives_objectTypeName(this._receiver) + \"'\");\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::Closure._computeSignatureFunctionNewRti": {
         "id": "function/dart:_js_helper::Closure._computeSignatureFunctionNewRti",
         "kind": "function",
         "name": "_computeSignatureFunctionNewRti",
-        "size": 596,
+        "size": 573,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -4151,30 +4117,31 @@
         "parameters": [
           {
             "name": "functionType",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "isStatic",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "isIntercepted",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (A.boolConversionCheck(isStatic))\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
-        "type": "dynamic Function(Object,bool,bool)"
+        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (isStatic)\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
+        "type": "dynamic Function(Object,bool,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.cspForwardCall": {
         "id": "function/dart:_js_helper::Closure.cspForwardCall",
         "kind": "function",
         "name": "cspForwardCall",
-        "size": 1644,
+        "size": 1621,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -4194,12 +4161,12 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           },
           {
@@ -4210,14 +4177,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
-        "type": "dynamic Function(int,bool,String?,dynamic)"
+        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (needsDirectAccess ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.cspForwardInterceptedCall": {
         "id": "function/dart:_js_helper::Closure.cspForwardInterceptedCall",
         "kind": "function",
         "name": "cspForwardInterceptedCall",
-        "size": 2256,
+        "size": 2233,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -4237,12 +4205,12 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           },
           {
@@ -4253,14 +4221,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
-        "type": "dynamic Function(int,bool,String?,dynamic)"
+        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (needsDirectAccess ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.forwardCallTo": {
         "id": "function/dart:_js_helper::Closure.forwardCallTo",
         "kind": "function",
         "name": "forwardCallTo",
-        "size": 377,
+        "size": 354,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -4275,7 +4244,7 @@
         "parameters": [
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -4285,19 +4254,20 @@
           },
           {
             "name": "isIntercepted",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1;\n      if (A.boolConversionCheck(isIntercepted))\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
-        "type": "dynamic Function(String,dynamic,bool,bool)"
+        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1;\n      if (isIntercepted)\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
+        "type": "dynamic Function(String,dynamic,bool,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.forwardInterceptedCallTo": {
         "id": "function/dart:_js_helper::Closure.forwardInterceptedCallTo",
@@ -4318,7 +4288,7 @@
         "parameters": [
           {
             "name": "stubName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -4328,20 +4298,21 @@
           },
           {
             "name": "needsDirectAccess",
-            "type": "[null|subtype=bool]",
+            "type": "[subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess) {\n      var arity, t1;\n      if ($.BoundClosure__interceptorFieldNameCache == null)\n        $.BoundClosure__interceptorFieldNameCache = A.BoundClosure__computeFieldNamed(\"interceptor\");\n      if ($.BoundClosure__receiverFieldNameCache == null)\n        $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(\"receiver\");\n      arity = $function.length;\n      t1 = A.Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function);\n      return t1;\n    }",
-        "type": "dynamic Function(String,dynamic,bool)"
+        "type": "dynamic Function(String,dynamic,bool)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.fromTearOff": {
         "id": "function/dart:_js_helper::Closure.fromTearOff",
         "kind": "function",
         "name": "fromTearOff",
-        "size": 2339,
+        "size": 2300,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::Closure",
         "children": [],
@@ -4362,8 +4333,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      A.boolConversionCheck(isStatic);\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else\n        $constructor = function tear_off(a, b) {\n          this.$initialize(a, b);\n        };\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
-        "type": "dynamic Function(Object?)"
+        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else\n        $constructor = function tear_off(a, b) {\n          this.$initialize(a, b);\n        };\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
+        "type": "dynamic Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.isCsp": {
         "id": "function/dart:_js_helper::Closure.isCsp",
@@ -4385,7 +4357,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::Closure.toString": {
         "id": "function/dart:_js_helper::Closure.toString",
@@ -4407,7 +4380,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var $constructor = this.constructor,\n        $name = $constructor == null ? null : $constructor.name;\n      return \"Closure '\" + A.unminifyOrTag($name == null ? \"unknown\" : $name) + \"'\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::DeferredNotLoadedError.DeferredNotLoadedError": {
         "id": "function/dart:_js_helper::DeferredNotLoadedError.DeferredNotLoadedError",
@@ -4428,20 +4402,21 @@
         "parameters": [
           {
             "name": "libraryName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_js_helper::DeferredNotLoadedError.toString": {
         "id": "function/dart:_js_helper::DeferredNotLoadedError.toString",
         "kind": "function",
         "name": "toString",
-        "size": 100,
+        "size": 95,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::DeferredNotLoadedError",
         "children": [],
@@ -4456,8 +4431,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Deferred library \" + A.S(this.libraryName) + \" was not loaded.\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Deferred library \" + this.libraryName + \" was not loaded.\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::ExceptionAndStackTrace.ExceptionAndStackTrace": {
         "id": "function/dart:_js_helper::ExceptionAndStackTrace.ExceptionAndStackTrace",
@@ -4483,14 +4459,15 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic,StackTrace)"
+        "type": "dynamic Function(dynamic,StackTrace)",
+        "functionKind": 3
       },
       "dart:_js_helper::JsLinkedHashMap.JsLinkedHashMap": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.JsLinkedHashMap",
@@ -4512,7 +4489,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_js_helper::JsLinkedHashMap.[]": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.[]",
@@ -4540,7 +4518,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "$index(_, key) {\n      var strings, cell, t1, nums, _null = null;\n      if (typeof key == \"string\") {\n        strings = this.__js_helper$_strings;\n        if (strings == null)\n          return _null;\n        cell = strings[key];\n        t1 = cell == null ? _null : cell.hashMapCellValue;\n        return t1;\n      } else if (typeof key == \"number\" && (key & 0x3fffffff) === key) {\n        nums = this.__js_helper$_nums;\n        if (nums == null)\n          return _null;\n        cell = nums[key];\n        t1 = cell == null ? _null : cell.hashMapCellValue;\n        return t1;\n      } else\n        return this.internalGet$1(key);\n    }",
-        "type": "JsLinkedHashMap.V? Function(Object?)"
+        "type": "JsLinkedHashMap.V? Function(Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.[]=": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.[]=",
@@ -4573,7 +4552,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "$indexSet(_, key, value) {\n      var strings, nums, rest, hash, bucket, index, _this = this,\n        t1 = _this.$ti;\n      t1._precomputed1._as(key);\n      t1._rest[1]._as(value);\n      if (typeof key == \"string\") {\n        strings = _this.__js_helper$_strings;\n        _this.__js_helper$_addHashTableEntry$3(strings == null ? _this.__js_helper$_strings = _this._newHashTable$0() : strings, key, value);\n      } else if (typeof key == \"number\" && (key & 0x3fffffff) === key) {\n        nums = _this.__js_helper$_nums;\n        _this.__js_helper$_addHashTableEntry$3(nums == null ? _this.__js_helper$_nums = _this._newHashTable$0() : nums, key, value);\n      } else {\n        rest = _this.__js_helper$_rest;\n        if (rest == null)\n          rest = _this.__js_helper$_rest = _this._newHashTable$0();\n        hash = J.get$hashCode$(key) & 0x3fffffff;\n        bucket = rest[hash];\n        if (bucket == null)\n          rest[hash] = [_this.__js_helper$_newLinkedCell$2(key, value)];\n        else {\n          index = _this.internalFindBucketIndex$2(bucket, key);\n          if (index >= 0)\n            bucket[index].hashMapCellValue = value;\n          else\n            bucket.push(_this.__js_helper$_newLinkedCell$2(key, value));\n        }\n      }\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._addHashTableEntry": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._addHashTableEntry",
@@ -4611,7 +4591,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "__js_helper$_addHashTableEntry$3(table, key, value) {\n      var cell,\n        t1 = this.$ti;\n      t1._precomputed1._as(key);\n      t1._rest[1]._as(value);\n      cell = table[key];\n      if (cell == null)\n        table[key] = this.__js_helper$_newLinkedCell$2(key, value);\n      else\n        cell.hashMapCellValue = value;\n    }",
-        "type": "void Function(dynamic,Object?,Object?)"
+        "type": "void Function(dynamic,Object?,Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._deleteTableEntry": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._deleteTableEntry",
@@ -4644,7 +4625,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(dynamic,dynamic)"
+        "type": "void Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._getBucket": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._getBucket",
@@ -4677,7 +4659,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)"
+        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._getTableBucket": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._getTableBucket",
@@ -4710,7 +4693,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)"
+        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._getTableCell": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._getTableCell",
@@ -4743,7 +4727,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "LinkedHashMapCell? Function(dynamic,dynamic)"
+        "type": "LinkedHashMapCell? Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._isNumericKey": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._isNumericKey",
@@ -4771,7 +4756,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::JsLinkedHashMap._isStringKey": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._isStringKey",
@@ -4799,7 +4785,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::JsLinkedHashMap._modified": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._modified",
@@ -4821,7 +4808,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._newHashTable": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._newHashTable",
@@ -4843,7 +4831,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_newHashTable$0() {\n      var table = Object.create(null);\n      table[\"<non-identifier-key>\"] = table;\n      delete table[\"<non-identifier-key>\"];\n      return table;\n    }",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._newLinkedCell": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._newLinkedCell",
@@ -4876,7 +4865,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
         "code": "__js_helper$_newLinkedCell$2(key, value) {\n      var _this = this,\n        t1 = _this.$ti,\n        cell = new A.LinkedHashMapCell(t1._precomputed1._as(key), t1._rest[1]._as(value));\n      if (_this.__js_helper$_first == null)\n        _this.__js_helper$_first = _this.__js_helper$_last = cell;\n      else\n        _this.__js_helper$_last = _this.__js_helper$_last.__js_helper$_next = cell;\n      ++_this.__js_helper$_length;\n      _this.__js_helper$_modifications = _this.__js_helper$_modifications + 1 & 1073741823;\n      return cell;\n    }",
-        "type": "LinkedHashMapCell Function(Object?,Object?)"
+        "type": "LinkedHashMapCell Function(Object?,Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap._setTableEntry": {
         "id": "function/dart:_js_helper::JsLinkedHashMap._setTableEntry",
@@ -4914,7 +4904,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(dynamic,dynamic,dynamic)"
+        "type": "void Function(dynamic,dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.forEach": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.forEach",
@@ -4942,7 +4933,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "forEach$1(_, action) {\n      var cell, modifications, _this = this;\n      _this.$ti._eval$1(\"~(1,2)\")._as(action);\n      cell = _this.__js_helper$_first;\n      modifications = _this.__js_helper$_modifications;\n      for (; cell != null;) {\n        action.call$2(cell.hashMapCellKey, cell.hashMapCellValue);\n        if (modifications !== _this.__js_helper$_modifications)\n          throw A.wrapException(A.ConcurrentModificationError$(_this));\n        cell = cell.__js_helper$_next;\n      }\n    }",
-        "type": "void Function(void Function(JsLinkedHashMap.K,JsLinkedHashMap.V))"
+        "type": "void Function(void Function(JsLinkedHashMap.K,JsLinkedHashMap.V))",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.internalComputeHashCode": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.internalComputeHashCode",
@@ -4970,7 +4962,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "int Function(dynamic)"
+        "type": "int Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.internalFindBucketIndex": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.internalFindBucketIndex",
@@ -5003,7 +4996,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "internalFindBucketIndex$2(bucket, key) {\n      var $length, i;\n      if (bucket == null)\n        return -1;\n      $length = bucket.length;\n      for (i = 0; i < $length; ++i)\n        if (J.$eq$(bucket[i].hashMapCellKey, key))\n          return i;\n      return -1;\n    }",
-        "type": "int Function(dynamic,dynamic)"
+        "type": "int Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.internalGet": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.internalGet",
@@ -5031,7 +5025,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "internalGet$1(key) {\n      var bucket, index,\n        rest = this.__js_helper$_rest;\n      if (rest == null)\n        return null;\n      bucket = rest[J.get$hashCode$(key) & 0x3fffffff];\n      index = this.internalFindBucketIndex$2(bucket, key);\n      if (index < 0)\n        return null;\n      return bucket[index].hashMapCellValue;\n    }",
-        "type": "JsLinkedHashMap.V? Function(Object?)"
+        "type": "JsLinkedHashMap.V? Function(Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.internalSet": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.internalSet",
@@ -5064,7 +5059,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.keys": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.keys",
@@ -5086,7 +5082,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Iterable<JsLinkedHashMap.K> Function()"
+        "type": "Iterable<JsLinkedHashMap.K> Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.length": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.length",
@@ -5108,7 +5105,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(_) {\n      return this.__js_helper$_length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::JsLinkedHashMap.toString": {
         "id": "function/dart:_js_helper::JsLinkedHashMap.toString",
@@ -5130,7 +5128,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return A.MapBase_mapToString(this);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::JsNoSuchMethodError.JsNoSuchMethodError": {
         "id": "function/dart:_js_helper::JsNoSuchMethodError.JsNoSuchMethodError",
@@ -5151,7 +5150,7 @@
         "parameters": [
           {
             "name": "_message",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -5163,13 +5162,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "JsNoSuchMethodError$(_message, match) {\n      var t1 = match == null,\n        t2 = t1 ? null : match.method;\n      return new A.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver);\n    }",
-        "type": "dynamic Function(String,dynamic)"
+        "type": "dynamic Function(String,dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::JsNoSuchMethodError.toString": {
         "id": "function/dart:_js_helper::JsNoSuchMethodError.toString",
         "kind": "function",
         "name": "toString",
-        "size": 443,
+        "size": 428,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::JsNoSuchMethodError",
         "children": [],
@@ -5184,8 +5184,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      var t2, _this = this,\n        _s38_ = \"NoSuchMethodError: method not found: '\",\n        t1 = _this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + A.S(_this.__js_helper$_message);\n      t2 = _this._receiver;\n      if (t2 == null)\n        return _s38_ + t1 + \"' (\" + A.S(_this.__js_helper$_message) + \")\";\n      return _s38_ + t1 + \"' on '\" + t2 + \"' (\" + A.S(_this.__js_helper$_message) + \")\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      var t2, _this = this,\n        _s38_ = \"NoSuchMethodError: method not found: '\",\n        t1 = _this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + _this.__js_helper$_message;\n      t2 = _this._receiver;\n      if (t2 == null)\n        return _s38_ + t1 + \"' (\" + _this.__js_helper$_message + \")\";\n      return _s38_ + t1 + \"' on '\" + t2 + \"' (\" + _this.__js_helper$_message + \")\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::LinkedHashMapCell.LinkedHashMapCell": {
         "id": "function/dart:_js_helper::LinkedHashMapCell.LinkedHashMapCell",
@@ -5218,7 +5219,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::LinkedHashMapKeyIterable.LinkedHashMapKeyIterable": {
         "id": "function/dart:_js_helper::LinkedHashMapKeyIterable.LinkedHashMapKeyIterable",
@@ -5246,7 +5248,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(JsLinkedHashMap<dynamic,dynamic>)"
+        "type": "dynamic Function(JsLinkedHashMap<dynamic,dynamic>)",
+        "functionKind": 3
       },
       "dart:_js_helper::LinkedHashMapKeyIterable.length": {
         "id": "function/dart:_js_helper::LinkedHashMapKeyIterable.length",
@@ -5268,7 +5271,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::NullError.NullError": {
         "id": "function/dart:_js_helper::NullError.NullError",
@@ -5289,7 +5293,7 @@
         "parameters": [
           {
             "name": "_message",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -5301,13 +5305,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function(String,dynamic)"
+        "type": "dynamic Function(String,dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::NullError.toString": {
         "id": "function/dart:_js_helper::NullError.toString",
         "kind": "function",
         "name": "toString",
-        "size": 217,
+        "size": 212,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::NullError",
         "children": [],
@@ -5322,8 +5327,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      var t1 = this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + A.S(this.__js_helper$_message);\n      return \"NoSuchMethodError: method not found: '\" + t1 + \"' on null\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      var t1 = this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + this.__js_helper$_message;\n      return \"NoSuchMethodError: method not found: '\" + t1 + \"' on null\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::NullThrownFromJavaScriptException.NullThrownFromJavaScriptException": {
         "id": "function/dart:_js_helper::NullThrownFromJavaScriptException.NullThrownFromJavaScriptException",
@@ -5351,7 +5357,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::NullThrownFromJavaScriptException.toString": {
         "id": "function/dart:_js_helper::NullThrownFromJavaScriptException.toString",
@@ -5373,7 +5380,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Throw of null ('\" + (this._irritant === null ? \"null\" : \"undefined\") + \"' from JavaScript)\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::Primitives._computeIdentityHashCodeProperty": {
         "id": "function/dart:_js_helper::Primitives._computeIdentityHashCodeProperty",
@@ -5395,7 +5403,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function()"
+        "type": "Object Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives._objectTypeNameNewRti": {
         "id": "function/dart:_js_helper::Primitives._objectTypeNameNewRti",
@@ -5412,7 +5421,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -5423,7 +5432,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Primitives__objectTypeNameNewRti(object) {\n      var interceptor, dispatchName, t1, $constructor, constructorName;\n      if (object instanceof A.Object)\n        return A._rtiToString(A.instanceType(object), null);\n      interceptor = J.getInterceptor$(object);\n      if (interceptor === B.Interceptor_methods || interceptor === B.JavaScriptObject_methods || type$.UnknownJavaScriptObject._is(object)) {\n        dispatchName = B.C_JS_CONST(object);\n        t1 = dispatchName !== \"Object\" && dispatchName !== \"\";\n        if (t1)\n          return dispatchName;\n        $constructor = object.constructor;\n        if (typeof $constructor == \"function\") {\n          constructorName = $constructor.name;\n          if (typeof constructorName == \"string\")\n            t1 = constructorName !== \"Object\" && constructorName !== \"\";\n          else\n            t1 = false;\n          if (t1)\n            return constructorName;\n        }\n      }\n      return A._rtiToString(A.instanceType(object), null);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives._saneNativeClassName": {
         "id": "function/dart:_js_helper::Primitives._saneNativeClassName",
@@ -5451,7 +5461,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.extractStackTrace": {
         "id": "function/dart:_js_helper::Primitives.extractStackTrace",
@@ -5468,7 +5479,7 @@
           "external": false
         },
         "returnType": "StackTrace",
-        "inferredReturnType": "[null|subtype=StackTrace]",
+        "inferredReturnType": "[subtype=StackTrace]",
         "parameters": [
           {
             "name": "error",
@@ -5479,7 +5490,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "StackTrace Function(Error)"
+        "type": "StackTrace Function(Error)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.flattenString": {
         "id": "function/dart:_js_helper::Primitives.flattenString",
@@ -5507,7 +5519,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.objectHashCode": {
         "id": "function/dart:_js_helper::Primitives.objectHashCode",
@@ -5535,7 +5548,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Primitives_objectHashCode(object) {\n      var hash,\n        property = $.Primitives__identityHashCodeProperty;\n      if (property == null)\n        property = $.Primitives__identityHashCodeProperty = Symbol(\"identityHashCode\");\n      hash = object[property];\n      if (hash == null) {\n        hash = Math.random() * 0x3fffffff | 0;\n        object[property] = hash;\n      }\n      return hash;\n    }",
-        "type": "int Function(dynamic)"
+        "type": "int Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.objectToHumanReadableString": {
         "id": "function/dart:_js_helper::Primitives.objectToHumanReadableString",
@@ -5563,7 +5577,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.objectTypeName": {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
@@ -5580,7 +5595,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -5591,7 +5606,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Primitives_objectTypeName(object) {\n      return A.Primitives__objectTypeNameNewRti(object);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::Primitives.stringConcatUnchecked": {
         "id": "function/dart:_js_helper::Primitives.stringConcatUnchecked",
@@ -5624,7 +5640,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 11,
         "code": "",
-        "type": "String Function(String,String)"
+        "type": "String Function(String,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::RuntimeError.RuntimeError": {
         "id": "function/dart:_js_helper::RuntimeError.RuntimeError",
@@ -5652,7 +5669,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::RuntimeError.toString": {
         "id": "function/dart:_js_helper::RuntimeError.toString",
@@ -5674,13 +5692,14 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"RuntimeError: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::S": {
         "id": "function/dart:_js_helper::S",
         "kind": "function",
         "name": "S",
-        "size": 550,
+        "size": 407,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -5701,8 +5720,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "S(value) {\n      var result;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      result = J.toString$0$(value);\n      if (typeof result != \"string\")\n        throw A.wrapException(A.ArgumentError$value(value, \"object\", \"toString method returned 'null'\"));\n      return result;\n    }",
-        "type": "String Function(dynamic)"
+        "code": "S(value) {\n      var result;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      result = J.toString$0$(value);\n      return result;\n    }",
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::StaticClosure.StaticClosure": {
         "id": "function/dart:_js_helper::StaticClosure.StaticClosure",
@@ -5724,7 +5744,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_js_helper::StaticClosure.toString": {
         "id": "function/dart:_js_helper::StaticClosure.toString",
@@ -5746,7 +5767,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var $name = this.$static_name;\n      if ($name == null)\n        return \"Closure of unknown static method\";\n      return \"Closure '\" + A.unminifyOrTag($name) + \"'\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::TypeErrorDecoder.TypeErrorDecoder": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.TypeErrorDecoder",
@@ -5799,7 +5821,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(int,int,int,int,int,String)"
+        "type": "dynamic Function(int,int,int,int,int,String)",
+        "functionKind": 3
       },
       "dart:_js_helper::TypeErrorDecoder.buildJavaScriptObject": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.buildJavaScriptObject",
@@ -5821,7 +5844,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.buildJavaScriptObjectWithNonClosure": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.buildJavaScriptObjectWithNonClosure",
@@ -5843,7 +5867,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.extractPattern": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.extractPattern",
@@ -5871,7 +5896,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "TypeErrorDecoder_extractPattern(message) {\n      var match, $arguments, argumentsExpr, expr, method, receiver;\n      message = A.quoteStringForRegExp(message.replace(String({}), \"$receiver$\"));\n      match = message.match(/\\\\\\$[a-zA-Z]+\\\\\\$/g);\n      if (match == null)\n        match = A._setArrayType([], type$.JSArray_String);\n      $arguments = match.indexOf(\"\\\\$arguments\\\\$\");\n      argumentsExpr = match.indexOf(\"\\\\$argumentsExpr\\\\$\");\n      expr = match.indexOf(\"\\\\$expr\\\\$\");\n      method = match.indexOf(\"\\\\$method\\\\$\");\n      receiver = match.indexOf(\"\\\\$receiver\\\\$\");\n      return new A.TypeErrorDecoder(message.replace(new RegExp(\"\\\\\\\\\\\\$arguments\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$argumentsExpr\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$expr\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$method\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$receiver\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\"), $arguments, argumentsExpr, expr, method, receiver);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.matchTypeError": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.matchTypeError",
@@ -5899,7 +5925,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "matchTypeError$1(message) {\n      var result, t1, _this = this,\n        match = new RegExp(_this._pattern).exec(message);\n      if (match == null)\n        return null;\n      result = Object.create(null);\n      t1 = _this._arguments;\n      if (t1 !== -1)\n        result.arguments = match[t1 + 1];\n      t1 = _this._argumentsExpr;\n      if (t1 !== -1)\n        result.argumentsExpr = match[t1 + 1];\n      t1 = _this._expr;\n      if (t1 !== -1)\n        result.expr = match[t1 + 1];\n      t1 = _this._method;\n      if (t1 !== -1)\n        result.method = match[t1 + 1];\n      t1 = _this._receiver;\n      if (t1 !== -1)\n        result.receiver = match[t1 + 1];\n      return result;\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::TypeErrorDecoder.provokeCallErrorOn": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokeCallErrorOn",
@@ -5927,7 +5954,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "TypeErrorDecoder_provokeCallErrorOn(expression) {\n      return function($expr$) {\n        var $argumentsExpr$ = \"$arguments$\";\n        try {\n          $expr$.$method$($argumentsExpr$);\n        } catch (e) {\n          return e.message;\n        }\n      }(expression);\n    }",
-        "type": "String Function(dynamic)"
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.provokeCallErrorOnNull": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokeCallErrorOnNull",
@@ -5949,7 +5977,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.provokeCallErrorOnUndefined": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokeCallErrorOnUndefined",
@@ -5971,7 +6000,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOn": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOn",
@@ -5999,7 +6029,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "TypeErrorDecoder_provokePropertyErrorOn(expression) {\n      return function($expr$) {\n        try {\n          $expr$.$method$;\n        } catch (e) {\n          return e.message;\n        }\n      }(expression);\n    }",
-        "type": "String Function(dynamic)"
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnNull": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnNull",
@@ -6021,7 +6052,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnUndefined": {
         "id": "function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnUndefined",
@@ -6043,7 +6075,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError": {
         "id": "function/dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError",
@@ -6071,7 +6104,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_js_helper::UnknownJsTypeError.toString": {
         "id": "function/dart:_js_helper::UnknownJsTypeError.toString",
@@ -6093,7 +6127,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var t1 = this.__js_helper$_message;\n      return t1.length === 0 ? \"Error\" : \"Error: \" + t1;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::_AssertionError._AssertionError": {
         "id": "function/dart:_js_helper::_AssertionError._AssertionError",
@@ -6114,14 +6149,15 @@
         "parameters": [
           {
             "name": "message",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(Object)"
+        "type": "dynamic Function(Object)",
+        "functionKind": 3
       },
       "dart:_js_helper::_AssertionError.toString": {
         "id": "function/dart:_js_helper::_AssertionError.toString",
@@ -6143,7 +6179,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Assertion failed: \" + A.Error_safeToString(this.message);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::_StackTrace._StackTrace": {
         "id": "function/dart:_js_helper::_StackTrace._StackTrace",
@@ -6171,7 +6208,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 3
       },
       "dart:_js_helper::_StackTrace.toString": {
         "id": "function/dart:_js_helper::_StackTrace.toString",
@@ -6193,7 +6231,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var trace,\n        t1 = this._trace;\n      if (t1 != null)\n        return t1;\n      t1 = this._exception;\n      trace = t1 !== null && typeof t1 === \"object\" ? t1.stack : null;\n      return this._trace = trace == null ? \"\" : trace;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::_computeBaseUrl": {
         "id": "function/dart:_js_helper::_computeBaseUrl",
@@ -6215,7 +6254,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_computeCrossOrigin": {
         "id": "function/dart:_js_helper::_computeCrossOrigin",
@@ -6237,7 +6277,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_computeCrossOrigin() {\n      var currentScript = init.currentScript;\n      if (currentScript == null)\n        return null;\n      return currentScript.crossOrigin;\n    }",
-        "type": "String? Function()"
+        "type": "String? Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_computeCspNonce": {
         "id": "function/dart:_js_helper::_computeCspNonce",
@@ -6259,7 +6300,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_computeCspNonce() {\n      var nonce,\n        currentScript = init.currentScript;\n      if (currentScript == null)\n        return null;\n      nonce = currentScript.nonce;\n      return nonce != null && nonce !== \"\" ? nonce : currentScript.getAttribute(\"nonce\");\n    }",
-        "type": "String? Function()"
+        "type": "String? Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_computePolicy": {
         "id": "function/dart:_js_helper::_computePolicy",
@@ -6281,13 +6323,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_computePolicy() {\n      var newPolicy,\n        policyOptions = {createScriptURL: url => url},\n        policyFactory = self.trustedTypes;\n      if (policyFactory == null)\n        return policyOptions;\n      newPolicy = policyFactory.createPolicy(\"dart:deferred-loading\", policyOptions);\n      return newPolicy == null ? policyOptions : newPolicy;\n    }",
-        "type": "Object Function()"
+        "type": "Object Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_computeThisScript": {
         "id": "function/dart:_js_helper::_computeThisScript",
         "kind": "function",
         "name": "_computeThisScript",
-        "size": 285,
+        "size": 262,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -6302,8 +6345,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_computeThisScript() {\n      var currentScript = init.currentScript;\n      if (currentScript != null)\n        return String(currentScript.src);\n      if (A.boolConversionCheck(!self.window && !!self.postMessage))\n        return A._computeThisScriptFromTrace();\n      return null;\n    }",
-        "type": "String? Function()"
+        "code": "_computeThisScript() {\n      var currentScript = init.currentScript;\n      if (currentScript != null)\n        return String(currentScript.src);\n      if (!self.window && !!self.postMessage)\n        return A._computeThisScriptFromTrace();\n      return null;\n    }",
+        "type": "String? Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_computeThisScriptFromTrace": {
         "id": "function/dart:_js_helper::_computeThisScriptFromTrace",
@@ -6325,7 +6369,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_computeThisScriptFromTrace() {\n      var matches,\n        stack = new Error().stack;\n      if (stack == null) {\n        stack = function() {\n          try {\n            throw new Error();\n          } catch (e) {\n            return e.stack;\n          }\n        }();\n        if (stack == null)\n          throw A.wrapException(A.UnsupportedError$(\"No stack trace\"));\n      }\n      matches = stack.match(new RegExp(\"^ *at [^(]*\\\\((.*):[0-9]*:[0-9]*\\\\)$\", \"m\"));\n      if (matches != null)\n        return matches[1];\n      matches = stack.match(new RegExp(\"^[^@]*@(.*):[0-9]*$\", \"m\"));\n      if (matches != null)\n        return matches[1];\n      throw A.wrapException(A.UnsupportedError$('Cannot extract URI from \"' + stack + '\"'));\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_encodeURIComponent": {
         "id": "function/dart:_js_helper::_encodeURIComponent",
@@ -6353,7 +6398,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::_getBasedScriptUrl": {
         "id": "function/dart:_js_helper::_getBasedScriptUrl",
@@ -6381,7 +6427,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function(String)"
+        "type": "Object Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::_isWorker": {
         "id": "function/dart:_js_helper::_isWorker",
@@ -6403,13 +6450,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::_loadHunk": {
         "id": "function/dart:_js_helper::_loadHunk",
         "kind": "function",
         "name": "_loadHunk",
-        "size": 5803,
+        "size": 5703,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [
@@ -6437,14 +6485,15 @@
           },
           {
             "name": "loadId",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_loadHunk(hunkName, loadId) {\n      var uriAsString, deferredLibraryLoader, failure, jsSuccess, jsFailure, error, stackTrace, base, encodedComponent, trustedScriptUri, completer, t1, exception, xhr, script,\n        future = $.$get$_loadingLibraries().$index(0, hunkName);\n      B.JSArray_methods.add$1($._eventLog, \" - _loadHunk: \" + hunkName);\n      if (future != null) {\n        B.JSArray_methods.add$1($._eventLog, \"reuse: \" + hunkName);\n        return future.then$1$1(new A._loadHunk_closure(), type$.Null);\n      }\n      base = $.$get$_thisScriptBaseUrl();\n      encodedComponent = self.encodeURIComponent(hunkName);\n      trustedScriptUri = $.$get$_deferredLoadingTrustedTypesPolicy().createScriptURL(A.S(base) + \"/\" + A.S(encodedComponent));\n      uriAsString = trustedScriptUri.toString();\n      B.JSArray_methods.add$1($._eventLog, \" - download: \" + hunkName + \" from \" + A.S(uriAsString));\n      deferredLibraryLoader = self.dartDeferredLibraryLoader;\n      completer = new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_Null), type$._AsyncCompleter_Null);\n      t1 = new A._loadHunk_success(hunkName, completer);\n      failure = new A._loadHunk_failure(hunkName, completer, uriAsString);\n      jsSuccess = A.convertDartClosureToJS(t1, 0);\n      jsFailure = A.convertDartClosureToJS(new A._loadHunk_closure0(failure), 1);\n      if (typeof deferredLibraryLoader === \"function\")\n        try {\n          deferredLibraryLoader(uriAsString, jsSuccess, jsFailure, loadId);\n        } catch (exception) {\n          error = A.unwrapException(exception);\n          stackTrace = A.getTraceFromException(exception);\n          failure.call$3(error, \"invoking dartDeferredLibraryLoader hook\", stackTrace);\n        }\n      else if (A.boolConversionCheck(!self.window && !!self.postMessage)) {\n        xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", uriAsString);\n        xhr.addEventListener(\"load\", A.convertDartClosureToJS(new A._loadHunk_closure1(xhr, failure, t1), 1), false);\n        xhr.addEventListener(\"error\", new A._loadHunk_closure2(failure), false);\n        xhr.addEventListener(\"abort\", new A._loadHunk_closure3(failure), false);\n        xhr.send();\n      } else {\n        script = document.createElement(\"script\");\n        script.type = \"text/javascript\";\n        script.src = trustedScriptUri;\n        t1 = $.$get$_cspNonce();\n        if (t1 != null && t1 !== \"\") {\n          script.nonce = t1;\n          script.setAttribute(\"nonce\", $.$get$_cspNonce());\n        }\n        t1 = $.$get$_crossOrigin();\n        if (t1 != null && t1 !== \"\")\n          script.crossOrigin = t1;\n        script.addEventListener(\"load\", jsSuccess, false);\n        script.addEventListener(\"error\", jsFailure, false);\n        document.body.appendChild(script);\n      }\n      t1 = completer.future;\n      $.$get$_loadingLibraries().$indexSet(0, hunkName, t1);\n      return t1;\n    }",
-        "type": "Future<Null> Function(String,String)"
+        "code": "_loadHunk(hunkName, loadId) {\n      var uriAsString, deferredLibraryLoader, failure, jsSuccess, jsFailure, error, stackTrace, base, encodedComponent, t1, completer, t2, exception, xhr, script,\n        future = $.$get$_loadingLibraries().$index(0, hunkName);\n      B.JSArray_methods.add$1($._eventLog, \" - _loadHunk: \" + hunkName);\n      if (future != null) {\n        B.JSArray_methods.add$1($._eventLog, \"reuse: \" + hunkName);\n        return future.then$1$1(new A._loadHunk_closure(), type$.Null);\n      }\n      base = $.$get$_thisScriptBaseUrl();\n      encodedComponent = self.encodeURIComponent(hunkName);\n      t1 = $.$get$_deferredLoadingTrustedTypesPolicy().createScriptURL(base + encodedComponent);\n      uriAsString = t1.toString();\n      B.JSArray_methods.add$1($._eventLog, \" - download: \" + hunkName + \" from \" + A.S(uriAsString));\n      deferredLibraryLoader = self.dartDeferredLibraryLoader;\n      completer = new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_Null), type$._AsyncCompleter_Null);\n      t2 = new A._loadHunk_success(hunkName, completer);\n      failure = new A._loadHunk_failure(hunkName, completer, uriAsString);\n      jsSuccess = A.convertDartClosureToJS(t2, 0);\n      jsFailure = A.convertDartClosureToJS(new A._loadHunk_closure0(failure), 1);\n      if (typeof deferredLibraryLoader === \"function\")\n        try {\n          deferredLibraryLoader(uriAsString, jsSuccess, jsFailure, loadId);\n        } catch (exception) {\n          error = A.unwrapException(exception);\n          stackTrace = A.getTraceFromException(exception);\n          failure.call$3(error, \"invoking dartDeferredLibraryLoader hook\", stackTrace);\n        }\n      else if (!self.window && !!self.postMessage) {\n        xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", uriAsString);\n        xhr.addEventListener(\"load\", A.convertDartClosureToJS(new A._loadHunk_closure1(xhr, failure, t2), 1), false);\n        xhr.addEventListener(\"error\", new A._loadHunk_closure2(failure), false);\n        xhr.addEventListener(\"abort\", new A._loadHunk_closure3(failure), false);\n        xhr.send();\n      } else {\n        script = document.createElement(\"script\");\n        script.type = \"text/javascript\";\n        script.src = t1;\n        t1 = $.$get$_cspNonce();\n        if (t1 != null && t1 !== \"\") {\n          script.nonce = t1;\n          script.setAttribute(\"nonce\", $.$get$_cspNonce());\n        }\n        t1 = $.$get$_crossOrigin();\n        if (t1 != null && t1 !== \"\")\n          script.crossOrigin = t1;\n        script.addEventListener(\"load\", jsSuccess, false);\n        script.addEventListener(\"error\", jsFailure, false);\n        document.body.appendChild(script);\n      }\n      t1 = completer.future;\n      $.$get$_loadingLibraries().$indexSet(0, hunkName, t1);\n      return t1;\n    }",
+        "type": "Future<Null> Function(String,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::_loadHunk._loadHunk_closure.call": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_closure.call",
@@ -6472,7 +6521,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "call$1(_) {\n      type$.Null._as(_);\n      return null;\n    }",
-        "type": "Null Function(Null)"
+        "type": "Null Function(Null)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_closure.call%0": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_closure.call%0",
@@ -6500,7 +6550,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(error) {\n      this.failure.call$3(A.unwrapException(error), \"js-failure-wrapper\", A.getTraceFromException(error));\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_closure.call%1": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_closure.call%1",
@@ -6528,7 +6579,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1($event) {\n      var code, error, stackTrace, exception, _this = this,\n        t1 = _this.xhr,\n        $status = t1.status;\n      if ($status !== 200)\n        _this.failure.call$3(\"Request status: \" + $status, \"worker xhr\", null);\n      code = t1.responseText;\n      try {\n        new Function(code)();\n        _this.success.call$0();\n      } catch (exception) {\n        error = A.unwrapException(exception);\n        stackTrace = A.getTraceFromException(exception);\n        _this.failure.call$3(error, \"evaluating the code in worker xhr\", stackTrace);\n      }\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_closure.call%2": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_closure.call%2",
@@ -6556,7 +6608,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(e) {\n      this.failure.call$3(e, \"xhr error handler\", null);\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_closure.call%3": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_closure.call%3",
@@ -6584,13 +6637,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(e) {\n      this.failure.call$3(e, \"xhr abort handler\", null);\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_failure.call": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_failure.call",
         "kind": "function",
         "name": "call",
-        "size": 582,
+        "size": 577,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:_js_helper::_loadHunk._loadHunk_failure",
         "children": [],
@@ -6621,8 +6675,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$3(error, context, stackTrace) {\n      var t1;\n      type$.nullable_StackTrace._as(stackTrace);\n      t1 = this.hunkName;\n      B.JSArray_methods.add$1($._eventLog, \" - download failed: \" + t1 + \" (context: \" + context + \")\");\n      $.$get$_loadingLibraries().$indexSet(0, t1, null);\n      if (stackTrace == null)\n        stackTrace = A.StackTrace_current();\n      this.completer.completeError$2(new A.DeferredLoadException(\"Loading \" + A.S(this.uriAsString) + \" failed: \" + A.S(error) + \"\\nevent log:\\n\" + B.JSArray_methods.join$1($._eventLog, \"\\n\") + \"\\n\"), stackTrace);\n    }",
-        "type": "void Function(dynamic,String,StackTrace?)"
+        "code": "call$3(error, context, stackTrace) {\n      var t1;\n      type$.nullable_StackTrace._as(stackTrace);\n      t1 = this.hunkName;\n      B.JSArray_methods.add$1($._eventLog, \" - download failed: \" + t1 + \" (context: \" + context + \")\");\n      $.$get$_loadingLibraries().$indexSet(0, t1, null);\n      if (stackTrace == null)\n        stackTrace = A.StackTrace_current();\n      this.completer.completeError$2(new A.DeferredLoadException(\"Loading \" + this.uriAsString + \" failed: \" + A.S(error) + \"\\nevent log:\\n\" + B.JSArray_methods.join$1($._eventLog, \"\\n\") + \"\\n\"), stackTrace);\n    }",
+        "type": "void Function(dynamic,String,StackTrace?)",
+        "functionKind": 2
       },
       "dart:_js_helper::_loadHunk._loadHunk_success.call": {
         "id": "function/dart:_js_helper::_loadHunk._loadHunk_success.call",
@@ -6644,13 +6699,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      B.JSArray_methods.add$1($._eventLog, \" - download success: \" + this.hunkName);\n      this.completer.complete$1(null);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::_unwrapNonDartException": {
         "id": "function/dart:_js_helper::_unwrapNonDartException",
         "kind": "function",
         "name": "_unwrapNonDartException",
-        "size": 4326,
+        "size": 4323,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -6661,7 +6717,7 @@
           "external": false
         },
         "returnType": "Object",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[subclass=Object]",
         "parameters": [
           {
             "name": "ex",
@@ -6671,8 +6727,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_unwrapNonDartException(ex) {\n      var message, number, ieErrorCode, t1, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match, _null = null;\n      if (!(\"message\" in ex))\n        return ex;\n      message = ex.message;\n      if (\"number\" in ex && typeof ex.number == \"number\") {\n        number = ex.number;\n        ieErrorCode = number & 65535;\n        if ((B.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10)\n          switch (ieErrorCode) {\n            case 438:\n              return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A.S(message) + \" (Error \" + ieErrorCode + \")\", _null));\n            case 445:\n            case 5007:\n              t1 = A.S(message);\n              return A.saveStackTrace(ex, new A.NullError(t1 + \" (Error \" + ieErrorCode + \")\", _null));\n          }\n      }\n      if (ex instanceof TypeError) {\n        nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern();\n        notClosure = $.$get$TypeErrorDecoder_notClosurePattern();\n        nullCall = $.$get$TypeErrorDecoder_nullCallPattern();\n        nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern();\n        undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern();\n        undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern();\n        nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern();\n        $.$get$TypeErrorDecoder_nullLiteralPropertyPattern();\n        undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern();\n        undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern();\n        match = nsme.matchTypeError$1(message);\n        if (match != null)\n          return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asStringS(message), match));\n        else {\n          match = notClosure.matchTypeError$1(message);\n          if (match != null) {\n            match.method = \"call\";\n            return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asStringS(message), match));\n          } else {\n            match = nullCall.matchTypeError$1(message);\n            if (match == null) {\n              match = nullLiteralCall.matchTypeError$1(message);\n              if (match == null) {\n                match = undefCall.matchTypeError$1(message);\n                if (match == null) {\n                  match = undefLiteralCall.matchTypeError$1(message);\n                  if (match == null) {\n                    match = nullProperty.matchTypeError$1(message);\n                    if (match == null) {\n                      match = nullLiteralCall.matchTypeError$1(message);\n                      if (match == null) {\n                        match = undefProperty.matchTypeError$1(message);\n                        if (match == null) {\n                          match = undefLiteralProperty.matchTypeError$1(message);\n                          t1 = match != null;\n                        } else\n                          t1 = true;\n                      } else\n                        t1 = true;\n                    } else\n                      t1 = true;\n                  } else\n                    t1 = true;\n                } else\n                  t1 = true;\n              } else\n                t1 = true;\n            } else\n              t1 = true;\n            if (t1) {\n              A._asStringS(message);\n              return A.saveStackTrace(ex, new A.NullError(message, match == null ? _null : match.method));\n            }\n          }\n        }\n        return A.saveStackTrace(ex, new A.UnknownJsTypeError(typeof message == \"string\" ? message : \"\"));\n      }\n      if (ex instanceof RangeError) {\n        if (typeof message == \"string\" && message.indexOf(\"call stack\") !== -1)\n          return new A.StackOverflowError();\n        message = function(ex) {\n          try {\n            return String(ex);\n          } catch (e) {\n          }\n          return null;\n        }(ex);\n        return A.saveStackTrace(ex, new A.ArgumentError(false, _null, _null, typeof message == \"string\" ? message.replace(/^RangeError:\\s*/, \"\") : message));\n      }\n      if (typeof InternalError == \"function\" && ex instanceof InternalError)\n        if (typeof message == \"string\" && message === \"too much recursion\")\n          return new A.StackOverflowError();\n      return ex;\n    }",
-        "type": "Object Function(Object)"
+        "code": "_unwrapNonDartException(ex) {\n      var message, number, ieErrorCode, t1, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match, _null = null;\n      if (!(\"message\" in ex))\n        return ex;\n      message = ex.message;\n      if (\"number\" in ex && typeof ex.number == \"number\") {\n        number = ex.number;\n        ieErrorCode = number & 65535;\n        if ((B.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10)\n          switch (ieErrorCode) {\n            case 438:\n              return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A.S(message) + \" (Error \" + ieErrorCode + \")\", _null));\n            case 445:\n            case 5007:\n              t1 = A.S(message);\n              return A.saveStackTrace(ex, new A.NullError(t1 + \" (Error \" + ieErrorCode + \")\", _null));\n          }\n      }\n      if (ex instanceof TypeError) {\n        nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern();\n        notClosure = $.$get$TypeErrorDecoder_notClosurePattern();\n        nullCall = $.$get$TypeErrorDecoder_nullCallPattern();\n        nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern();\n        undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern();\n        undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern();\n        nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern();\n        $.$get$TypeErrorDecoder_nullLiteralPropertyPattern();\n        undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern();\n        undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern();\n        match = nsme.matchTypeError$1(message);\n        if (match != null)\n          return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asString(message), match));\n        else {\n          match = notClosure.matchTypeError$1(message);\n          if (match != null) {\n            match.method = \"call\";\n            return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asString(message), match));\n          } else {\n            match = nullCall.matchTypeError$1(message);\n            if (match == null) {\n              match = nullLiteralCall.matchTypeError$1(message);\n              if (match == null) {\n                match = undefCall.matchTypeError$1(message);\n                if (match == null) {\n                  match = undefLiteralCall.matchTypeError$1(message);\n                  if (match == null) {\n                    match = nullProperty.matchTypeError$1(message);\n                    if (match == null) {\n                      match = nullLiteralCall.matchTypeError$1(message);\n                      if (match == null) {\n                        match = undefProperty.matchTypeError$1(message);\n                        if (match == null) {\n                          match = undefLiteralProperty.matchTypeError$1(message);\n                          t1 = match != null;\n                        } else\n                          t1 = true;\n                      } else\n                        t1 = true;\n                    } else\n                      t1 = true;\n                  } else\n                    t1 = true;\n                } else\n                  t1 = true;\n              } else\n                t1 = true;\n            } else\n              t1 = true;\n            if (t1) {\n              A._asString(message);\n              return A.saveStackTrace(ex, new A.NullError(message, match == null ? _null : match.method));\n            }\n          }\n        }\n        return A.saveStackTrace(ex, new A.UnknownJsTypeError(typeof message == \"string\" ? message : \"\"));\n      }\n      if (ex instanceof RangeError) {\n        if (typeof message == \"string\" && message.indexOf(\"call stack\") !== -1)\n          return new A.StackOverflowError();\n        message = function(ex) {\n          try {\n            return String(ex);\n          } catch (e) {\n          }\n          return null;\n        }(ex);\n        return A.saveStackTrace(ex, new A.ArgumentError(false, _null, _null, typeof message == \"string\" ? message.replace(/^RangeError:\\s*/, \"\") : message));\n      }\n      if (typeof InternalError == \"function\" && ex instanceof InternalError)\n        if (typeof message == \"string\" && message === \"too much recursion\")\n          return new A.StackOverflowError();\n      return ex;\n    }",
+        "type": "Object Function(Object)",
+        "functionKind": 0
       },
       "dart:_js_helper::assertThrow": {
         "id": "function/dart:_js_helper::assertThrow",
@@ -6700,7 +6757,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "assertThrow(message) {\n      throw A.wrapException(new A._AssertionError(message));\n    }",
-        "type": "void Function(Object)"
+        "type": "void Function(Object)",
+        "functionKind": 0
       },
       "dart:_js_helper::boolConversionCheck": {
         "id": "function/dart:_js_helper::boolConversionCheck",
@@ -6728,7 +6786,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "boolConversionCheck(value) {\n      if (value == null)\n        A.assertThrow(\"boolean expression must not be null\");\n      return value;\n    }",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::checkDeferredIsLoaded": {
         "id": "function/dart:_js_helper::checkDeferredIsLoaded",
@@ -6756,7 +6815,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "checkDeferredIsLoaded(loadId) {\n      if (!$.$get$_loadedLibraries().contains$1(0, loadId))\n        throw A.wrapException(new A.DeferredNotLoadedError(loadId));\n    }",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::closureFromTearOff": {
         "id": "function/dart:_js_helper::closureFromTearOff",
@@ -6784,7 +6844,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "closureFromTearOff(parameters) {\n      return A.Closure_fromTearOff(parameters);\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::constructorNameFallback": {
         "id": "function/dart:_js_helper::constructorNameFallback",
@@ -6812,7 +6873,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(dynamic)"
+        "type": "String Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::contains": {
         "id": "function/dart:_js_helper::contains",
@@ -6845,7 +6907,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(String,String)"
+        "type": "bool Function(String,String)",
+        "functionKind": 0
       },
       "dart:_js_helper::convertDartClosureToJS": {
         "id": "function/dart:_js_helper::convertDartClosureToJS",
@@ -6878,7 +6941,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "convertDartClosureToJS(closure, arity) {\n      var $function = closure.$identity;\n      if (!!$function)\n        return $function;\n      $function = function(closure, arity, invoke) {\n        return function(a1, a2, a3, a4) {\n          return invoke(closure, arity, a1, a2, a3, a4);\n        };\n      }(closure, arity, A.invokeClosure);\n      closure.$identity = $function;\n      return $function;\n    }",
-        "type": "dynamic Function(dynamic,int)"
+        "type": "dynamic Function(dynamic,int)",
+        "functionKind": 0
       },
       "dart:_js_helper::diagnoseIndexError": {
         "id": "function/dart:_js_helper::diagnoseIndexError",
@@ -6911,7 +6975,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "diagnoseIndexError(indexable, index) {\n      var $length, _s5_ = \"index\";\n      if (!A._isInt(index))\n        return new A.ArgumentError(true, index, _s5_, null);\n      $length = J.get$length$as(indexable);\n      if (index < 0 || index >= $length)\n        return new A.IndexError($length, true, index, _s5_, \"Index out of range\");\n      return new A.RangeError(null, null, true, index, _s5_, \"Value not in range\");\n    }",
-        "type": "Error Function(dynamic,dynamic)"
+        "type": "Error Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::getTraceFromException": {
         "id": "function/dart:_js_helper::getTraceFromException",
@@ -6928,7 +6993,7 @@
           "external": false
         },
         "returnType": "StackTrace",
-        "inferredReturnType": "[null|subtype=StackTrace]",
+        "inferredReturnType": "[subtype=StackTrace]",
         "parameters": [
           {
             "name": "exception",
@@ -6939,13 +7004,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "getTraceFromException(exception) {\n      var trace;\n      if (exception instanceof A.ExceptionAndStackTrace)\n        return exception.stackTrace;\n      if (exception == null)\n        return new A._StackTrace(exception);\n      trace = exception.$cachedTrace;\n      if (trace != null)\n        return trace;\n      return exception.$cachedTrace = new A._StackTrace(exception);\n    }",
-        "type": "StackTrace Function(dynamic)"
+        "type": "StackTrace Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::invokeClosure": {
         "id": "function/dart:_js_helper::invokeClosure",
         "kind": "function",
         "name": "invokeClosure",
-        "size": 571,
+        "size": 570,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -6991,8 +7057,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "invokeClosure(closure, numberOfArguments, arg1, arg2, arg3, arg4) {\n      type$.Function._as(closure);\n      switch (A._asIntS(numberOfArguments)) {\n        case 0:\n          return closure.call$0();\n        case 1:\n          return closure.call$1(arg1);\n        case 2:\n          return closure.call$2(arg1, arg2);\n        case 3:\n          return closure.call$3(arg1, arg2, arg3);\n        case 4:\n          return closure.call$4(arg1, arg2, arg3, arg4);\n      }\n      throw A.wrapException(new A._Exception(\"Unsupported number of arguments for wrapped closure\"));\n    }",
-        "type": "dynamic Function(Function,int,dynamic,dynamic,dynamic,dynamic)"
+        "code": "invokeClosure(closure, numberOfArguments, arg1, arg2, arg3, arg4) {\n      type$.Function._as(closure);\n      switch (A._asInt(numberOfArguments)) {\n        case 0:\n          return closure.call$0();\n        case 1:\n          return closure.call$1(arg1);\n        case 2:\n          return closure.call$2(arg1, arg2);\n        case 3:\n          return closure.call$3(arg1, arg2, arg3);\n        case 4:\n          return closure.call$4(arg1, arg2, arg3, arg4);\n      }\n      throw A.wrapException(new A._Exception(\"Unsupported number of arguments for wrapped closure\"));\n    }",
+        "type": "dynamic Function(Function,int,dynamic,dynamic,dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::ioore": {
         "id": "function/dart:_js_helper::ioore",
@@ -7025,7 +7092,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "ioore(receiver, index) {\n      if (receiver == null)\n        J.get$length$as(receiver);\n      throw A.wrapException(A.diagnoseIndexError(receiver, index));\n    }",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::jsonEncodeNative": {
         "id": "function/dart:_js_helper::jsonEncodeNative",
@@ -7053,7 +7121,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::loadDeferredLibrary": {
         "id": "function/dart:_js_helper::loadDeferredLibrary",
@@ -7086,7 +7155,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "loadDeferredLibrary(loadId) {\n      var t1, uris, hashes, index2uri, index2hash, i, index, total, waitingForLoad, isHunkLoaded, _box_0 = {},\n        indexes = init.deferredLibraryParts[loadId];\n      if (indexes == null)\n        return A.Future_Future$value(null, type$.Null);\n      t1 = type$.JSArray_String;\n      uris = A._setArrayType([], t1);\n      hashes = A._setArrayType([], t1);\n      index2uri = init.deferredPartUris;\n      index2hash = init.deferredPartHashes;\n      for (i = 0; i < indexes.length; ++i) {\n        index = indexes[i];\n        B.JSArray_methods.add$1(uris, index2uri[index]);\n        B.JSArray_methods.add$1(hashes, index2hash[index]);\n      }\n      total = hashes.length;\n      waitingForLoad = A.List_List$filled(total, true, type$.bool);\n      _box_0.nextHunkToInitialize = 0;\n      isHunkLoaded = init.isHunkLoaded;\n      t1 = new A.loadDeferredLibrary_initializeSomeLoadedHunks(_box_0, total, waitingForLoad, uris, hashes, init.isHunkInitialized, isHunkLoaded, init.initializeLoadedHunk);\n      return A.Future_wait(A.List_List$generate(total, new A.loadDeferredLibrary_loadAndInitialize(isHunkLoaded, hashes, waitingForLoad, uris, loadId, t1), type$.Future_dynamic), type$.dynamic).then$1$1(new A.loadDeferredLibrary_closure(_box_0, t1, total, loadId), type$.Null);\n    }",
-        "type": "Future<Null> Function(String)"
+        "type": "Future<Null> Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_closure.call": {
         "id": "function/dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_closure.call",
@@ -7114,7 +7184,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(_) {\n      type$.List_dynamic._as(_);\n      this.initializeSomeLoadedHunks.call$0();\n      $.$get$_loadedLibraries().add$1(0, this.loadId);\n    }",
-        "type": "Null Function(List<dynamic>)"
+        "type": "Null Function(List<dynamic>)",
+        "functionKind": 2
       },
       "dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_initializeSomeLoadedHunks.call": {
         "id": "function/dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_initializeSomeLoadedHunks.call",
@@ -7136,7 +7207,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      var t1, i, t2, t3, t4, t5, t6, t7, t8, t9, uri, hash, _this = this;\n      for (t1 = _this._box_0, i = t1.nextHunkToInitialize, t2 = _this.total, t3 = _this.initializer, t4 = _this.isHunkLoaded, t5 = _this.isHunkInitialized, t6 = _this.uris, t7 = _this.hashes, t8 = _this.waitingForLoad, t9 = t8.length; i < t2; ++i) {\n        if (!(i < t9))\n          return A.ioore(t8, i);\n        if (t8[i])\n          return;\n        ++t1.nextHunkToInitialize;\n        if (!(i < t6.length))\n          return A.ioore(t6, i);\n        uri = t6[i];\n        if (!(i < t7.length))\n          return A.ioore(t7, i);\n        hash = t7[i];\n        if (t5(hash)) {\n          B.JSArray_methods.add$1($._eventLog, \" - already initialized: \" + uri + \" (\" + hash + \")\");\n          continue;\n        }\n        if (t4(hash)) {\n          B.JSArray_methods.add$1($._eventLog, \" - initialize: \" + uri + \" (\" + hash + \")\");\n          t3(hash);\n        } else {\n          B.JSArray_methods.add$1($._eventLog, \" - missing hunk: \" + uri + \" (\" + hash + \")\");\n          if (!(i < t6.length))\n            return A.ioore(t6, i);\n          throw A.wrapException(A.DeferredLoadException$(\"Loading \" + t6[i] + \" failed: the code with hash '\" + hash + \"' was not loaded.\\nevent log:\\n\" + B.JSArray_methods.join$1($._eventLog, \"\\n\") + \"\\n\"));\n        }\n      }\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_loadAndInitialize.call": {
         "id": "function/dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_loadAndInitialize.call",
@@ -7164,7 +7236,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(i) {\n      var _this = this,\n        t1 = _this.hashes;\n      if (!(i < t1.length))\n        return A.ioore(t1, i);\n      if (_this.isHunkLoaded(t1[i])) {\n        B.JSArray_methods.$indexSet(_this.waitingForLoad, i, false);\n        return A.Future_Future$value(null, type$.dynamic);\n      }\n      t1 = _this.uris;\n      if (!(i < t1.length))\n        return A.ioore(t1, i);\n      return A._loadHunk(t1[i], _this.loadId).then$1$1(new A.loadDeferredLibrary_loadAndInitialize_closure(_this.waitingForLoad, i, _this.initializeSomeLoadedHunks), type$.dynamic);\n    }",
-        "type": "Future<dynamic> Function(int)"
+        "type": "Future<dynamic> Function(int)",
+        "functionKind": 2
       },
       "dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_loadAndInitialize_closure.call": {
         "id": "function/dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_loadAndInitialize_closure.call",
@@ -7192,7 +7265,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(_) {\n      type$.Null._as(_);\n      B.JSArray_methods.$indexSet(this.waitingForLoad, this.i, false);\n      this.initializeSomeLoadedHunks.call$0();\n    }",
-        "type": "Null Function(Null)"
+        "type": "Null Function(Null)",
+        "functionKind": 2
       },
       "dart:_js_helper::objectHashCode": {
         "id": "function/dart:_js_helper::objectHashCode",
@@ -7220,7 +7294,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "objectHashCode(object) {\n      if (object == null || typeof object != \"object\")\n        return J.get$hashCode$(object);\n      else\n        return A.Primitives_objectHashCode(object);\n    }",
-        "type": "int Function(dynamic)"
+        "type": "int Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::quoteStringForRegExp": {
         "id": "function/dart:_js_helper::quoteStringForRegExp",
@@ -7248,7 +7323,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "quoteStringForRegExp(string) {\n      if (/[[\\]{}()*+?.\\\\^$|]/.test(string))\n        return string.replace(/[[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\");\n      return string;\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::requiresPreamble": {
         "id": "function/dart:_js_helper::requiresPreamble",
@@ -7270,7 +7346,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::saveStackTrace": {
         "id": "function/dart:_js_helper::saveStackTrace",
@@ -7287,7 +7364,7 @@
           "external": false
         },
         "returnType": "Object",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[subclass=Object]",
         "parameters": [
           {
             "name": "ex",
@@ -7303,7 +7380,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "saveStackTrace(ex, error) {\n      if (type$.Error._is(error))\n        if (error.$thrownJsError == null)\n          error.$thrownJsError = ex;\n      return error;\n    }",
-        "type": "Object Function(Object,Object)"
+        "type": "Object Function(Object,Object)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwConcurrentModificationError": {
         "id": "function/dart:_js_helper::throwConcurrentModificationError",
@@ -7331,7 +7409,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "throwConcurrentModificationError(collection) {\n      throw A.wrapException(A.ConcurrentModificationError$(collection));\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwCyclicInit": {
         "id": "function/dart:_js_helper::throwCyclicInit",
@@ -7359,7 +7438,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "throwCyclicInit(staticName) {\n      throw A.wrapException(new A.CyclicInitializationError(staticName));\n    }",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::throwExpression": {
         "id": "function/dart:_js_helper::throwExpression",
@@ -7387,7 +7467,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "throwExpression(ex) {\n      throw A.wrapException(ex);\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::toStringWrapper": {
         "id": "function/dart:_js_helper::toStringWrapper",
@@ -7404,12 +7485,13 @@
           "external": false
         },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toStringWrapper() {\n      return J.toString$0$(this.dartException);\n    }",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:_js_helper::tryStringifyException": {
         "id": "function/dart:_js_helper::tryStringifyException",
@@ -7437,7 +7519,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String? Function(dynamic)"
+        "type": "String? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_helper::unminifyOrTag": {
         "id": "function/dart:_js_helper::unminifyOrTag",
@@ -7465,13 +7548,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_js_helper::unwrapException": {
         "id": "function/dart:_js_helper::unwrapException",
         "kind": "function",
         "name": "unwrapException",
-        "size": 399,
+        "size": 476,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
@@ -7482,7 +7566,7 @@
           "external": false
         },
         "returnType": "Object",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[subclass=Object]",
         "parameters": [
           {
             "name": "ex",
@@ -7492,8 +7576,9 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "unwrapException(ex) {\n      if (ex == null)\n        return new A.NullThrownFromJavaScriptException(ex);\n      if (ex instanceof A.ExceptionAndStackTrace)\n        return A.saveStackTrace(ex, ex.dartException);\n      if (typeof ex !== \"object\")\n        return ex;\n      if (\"dartException\" in ex)\n        return A.saveStackTrace(ex, ex.dartException);\n      return A._unwrapNonDartException(ex);\n    }",
-        "type": "Object Function(Object?)"
+        "code": "unwrapException(ex) {\n      var t1;\n      if (ex == null)\n        return new A.NullThrownFromJavaScriptException(ex);\n      if (ex instanceof A.ExceptionAndStackTrace) {\n        t1 = ex.dartException;\n        return A.saveStackTrace(ex, t1 == null ? type$.Object._as(t1) : t1);\n      }\n      if (typeof ex !== \"object\")\n        return ex;\n      if (\"dartException\" in ex)\n        return A.saveStackTrace(ex, ex.dartException);\n      return A._unwrapNonDartException(ex);\n    }",
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_js_helper::wrapException": {
         "id": "function/dart:_js_helper::wrapException",
@@ -7521,7 +7606,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "wrapException(ex) {\n      var wrapper, t1;\n      if (ex == null)\n        ex = new A.NullThrownError();\n      wrapper = new Error();\n      wrapper.dartException = ex;\n      t1 = A.toStringWrapper;\n      if (\"defineProperty\" in Object) {\n        Object.defineProperty(wrapper, \"message\", {get: t1});\n        wrapper.name = \"\";\n      } else\n        wrapper.toString = t1;\n      return wrapper;\n    }",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_js_names::unmangleGlobalNameIfPreservedAnyways": {
         "id": "function/dart:_js_names::unmangleGlobalNameIfPreservedAnyways",
@@ -7549,7 +7635,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String? Function(String)"
+        "type": "String? Function(String)",
+        "functionKind": 0
       },
       "dart:_js_primitives::printString": {
         "id": "function/dart:_js_primitives::printString",
@@ -7577,7 +7664,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "printString(string) {\n      if (typeof dartPrint == \"function\") {\n        dartPrint(string);\n        return;\n      }\n      if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n        console.log(string);\n        return;\n      }\n      if (typeof window == \"object\")\n        return;\n      if (typeof print == \"function\") {\n        print(string);\n        return;\n      }\n      throw \"Unable to print message: \" + String(string);\n    }",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_late_helper::_Cell._Cell.named": {
         "id": "function/dart:_late_helper::_Cell._Cell.named",
@@ -7605,13 +7693,14 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 0,
         "code": "_Cell$named(_name) {\n      var t1 = new A._Cell(_name);\n      return t1._value = t1;\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_late_helper::_Cell._readLocal": {
         "id": "function/dart:_late_helper::_Cell._readLocal",
         "kind": "function",
         "name": "_readLocal",
-        "size": 208,
+        "size": 194,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_late_helper::_Cell",
         "children": [],
@@ -7626,8 +7715,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "_readLocal$0() {\n      var t1 = this._value;\n      if (t1 === this)\n        throw A.wrapException(new A.LateError(\"Local '\" + this.__late_helper$_name + \"' has not been initialized.\"));\n      return t1;\n    }",
-        "type": "Object? Function()"
+        "code": "_readLocal$0() {\n      var t1 = this._value;\n      if (t1 === this)\n        throw A.wrapException(new A.LateError(\"Local '\" + this._name + \"' has not been initialized.\"));\n      return t1;\n    }",
+        "type": "Object? Function()",
+        "functionKind": 2
       },
       "dart:_late_helper::_Cell.readLocal": {
         "id": "function/dart:_late_helper::_Cell.readLocal",
@@ -7649,7 +7739,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "#A Function<#A extends Object?>()"
+        "type": "#A Function<#A extends Object?>()",
+        "functionKind": 2
       },
       "dart:_late_helper::_Cell.value": {
         "id": "function/dart:_late_helper::_Cell.value",
@@ -7677,13 +7768,14 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:_late_helper::throwLateFieldADI": {
         "id": "function/dart:_late_helper::throwLateFieldADI",
         "kind": "function",
         "name": "throwLateFieldADI",
-        "size": 160,
+        "size": 155,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_late_helper::",
         "children": [],
@@ -7704,8 +7796,9 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 0,
-        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + A.S(fieldName) + \"' has been assigned during initialization.\"));\n    }",
-        "type": "void Function(String)"
+        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + fieldName + \"' has been assigned during initialization.\"));\n    }",
+        "type": "void Function(String)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.digitValue": {
         "id": "function/dart:_recipe_syntax::Recipe.digitValue",
@@ -7733,7 +7826,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "int Function(int)"
+        "type": "int Function(int)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.isDigit": {
         "id": "function/dart:_recipe_syntax::Recipe.isDigit",
@@ -7761,7 +7855,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(int)"
+        "type": "bool Function(int)",
+        "functionKind": 0
       },
       "dart:_recipe_syntax::Recipe.isIdentifierStart": {
         "id": "function/dart:_recipe_syntax::Recipe.isIdentifierStart",
@@ -7789,7 +7884,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(int)"
+        "type": "bool Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::Rti.Rti": {
         "id": "function/dart:_rti::Rti.Rti",
@@ -7811,7 +7907,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_rti::Rti._asCheck": {
         "id": "function/dart:_rti::Rti._asCheck",
@@ -7827,8 +7924,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "rti",
@@ -7844,7 +7941,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti,Object?)"
+        "type": "Object? Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._bind": {
         "id": "function/dart:_rti::Rti._bind",
@@ -7861,7 +7959,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "typeOrTuple",
@@ -7872,7 +7970,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_bind$1(typeOrTuple) {\n      return A._Universe_bind(init.typeUniverse, this, typeOrTuple);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 2
       },
       "dart:_rti::Rti._eval": {
         "id": "function/dart:_rti::Rti._eval",
@@ -7889,7 +7988,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "recipe",
@@ -7900,7 +7999,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_eval$1(recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, this, recipe);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 2
       },
       "dart:_rti::Rti._getBindCache": {
         "id": "function/dart:_rti::Rti._getBindCache",
@@ -7928,7 +8028,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getBindingArguments": {
         "id": "function/dart:_rti::Rti._getBindingArguments",
@@ -7949,14 +8050,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getBindingBase": {
         "id": "function/dart:_rti::Rti._getBindingBase",
@@ -7977,42 +8079,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "Rti Function(Rti)"
-      },
-      "dart:_rti::Rti._getCachedRuntimeType": {
-        "id": "function/dart:_rti::Rti._getCachedRuntimeType",
-        "kind": "function",
-        "name": "_getCachedRuntimeType",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_rti::Rti",
-        "children": [],
-        "modifiers": {
-          "static": true,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "_Type?",
-        "inferredReturnType": "[null|exact=_Type]",
-        "parameters": [
-          {
-            "name": "rti",
-            "type": "[null|exact=Rti]",
-            "declaredType": "Rti"
-          }
-        ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 2,
-        "code": "",
-        "type": "_Type? Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getCanonicalRecipe": {
         "id": "function/dart:_rti::Rti._getCanonicalRecipe",
@@ -8033,14 +8108,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 10,
+        "inlinedCount": 9,
         "code": "Rti__getCanonicalRecipe(rti) {\n      return rti._canonicalRecipe;\n    }",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getEvalCache": {
         "id": "function/dart:_rti::Rti._getEvalCache",
@@ -8061,14 +8137,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFunctionParameters": {
         "id": "function/dart:_rti::Rti._getFunctionParameters",
@@ -8089,14 +8166,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "_FunctionParameters Function(Rti)"
+        "type": "_FunctionParameters Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFutureFromFutureOr": {
         "id": "function/dart:_rti::Rti._getFutureFromFutureOr",
@@ -8113,7 +8191,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -8122,14 +8200,15 @@
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Rti__getFutureFromFutureOr(universe, rti) {\n      var future = rti._precomputed1;\n      return future == null ? rti._precomputed1 = A._Universe__lookupInterfaceRti(universe, \"Future\", [rti._primary]) : future;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getFutureOrArgument": {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
@@ -8150,14 +8229,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 10,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionBase": {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
@@ -8178,14 +8258,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionBounds": {
         "id": "function/dart:_rti::Rti._getGenericFunctionBounds",
@@ -8206,14 +8287,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getGenericFunctionParameterIndex": {
         "id": "function/dart:_rti::Rti._getGenericFunctionParameterIndex",
@@ -8234,14 +8316,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "int Function(Rti)"
+        "type": "int Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getInterfaceName": {
         "id": "function/dart:_rti::Rti._getInterfaceName",
@@ -8262,14 +8345,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getInterfaceTypeArguments": {
         "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
@@ -8290,14 +8374,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 7,
         "code": "",
-        "type": "JSArray<dynamic> Function(Rti)"
+        "type": "JSArray<dynamic> Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getKind": {
         "id": "function/dart:_rti::Rti._getKind",
@@ -8318,14 +8403,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 26,
         "code": "",
-        "type": "int Function(Rti)"
+        "type": "int Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getPrecomputed1": {
         "id": "function/dart:_rti::Rti._getPrecomputed1",
@@ -8346,14 +8432,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getPrimary": {
         "id": "function/dart:_rti::Rti._getPrimary",
@@ -8374,14 +8461,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 48,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getQuestionArgument": {
         "id": "function/dart:_rti::Rti._getQuestionArgument",
@@ -8402,14 +8490,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getQuestionFromStar": {
         "id": "function/dart:_rti::Rti._getQuestionFromStar",
@@ -8426,7 +8515,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -8435,14 +8524,15 @@
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Rti__getQuestionFromStar(universe, rti) {\n      var question = rti._precomputed1;\n      return question == null ? rti._precomputed1 = A._Universe__lookupQuestionRti(universe, rti._primary, true) : question;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getRest": {
         "id": "function/dart:_rti::Rti._getRest",
@@ -8463,14 +8553,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 19,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getReturnType": {
         "id": "function/dart:_rti::Rti._getReturnType",
@@ -8491,14 +8582,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getSpecializedTestResource": {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
@@ -8526,7 +8618,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._getStarArgument": {
         "id": "function/dart:_rti::Rti._getStarArgument",
@@ -8547,14 +8640,15 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 8,
         "code": "",
-        "type": "Rti Function(Rti)"
+        "type": "Rti Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._isCheck": {
         "id": "function/dart:_rti::Rti._isCheck",
@@ -8587,7 +8681,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "bool Function(Rti,Object?)"
+        "type": "bool Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._isUnionOfFunctionType": {
         "id": "function/dart:_rti::Rti._isUnionOfFunctionType",
@@ -8615,7 +8710,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "Rti__isUnionOfFunctionType(rti) {\n      var kind = rti._kind;\n      if (kind === 6 || kind === 7 || kind === 8)\n        return A.Rti__isUnionOfFunctionType(rti._primary);\n      return kind === 11 || kind === 12;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setAsCheckFunction": {
         "id": "function/dart:_rti::Rti._setAsCheckFunction",
@@ -8648,7 +8744,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setBindCache": {
         "id": "function/dart:_rti::Rti._setBindCache",
@@ -8681,40 +8778,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
-      },
-      "dart:_rti::Rti._setCachedRuntimeType": {
-        "id": "function/dart:_rti::Rti._setCachedRuntimeType",
-        "kind": "function",
-        "name": "_setCachedRuntimeType",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_rti::Rti",
-        "children": [],
-        "modifiers": {
-          "static": true,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
-        "parameters": [
-          {
-            "name": "rti",
-            "type": "[null|exact=Rti]",
-            "declaredType": "Rti"
-          },
-          {
-            "name": "type",
-            "type": "[exact=_Type]",
-            "declaredType": "_Type"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes field)",
-        "inlinedCount": 4,
-        "code": "",
-        "type": "void Function(Rti,_Type)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setCanonicalRecipe": {
         "id": "function/dart:_rti::Rti._setCanonicalRecipe",
@@ -8747,7 +8812,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 9,
         "code": "",
-        "type": "void Function(Rti,String)"
+        "type": "void Function(Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setEvalCache": {
         "id": "function/dart:_rti::Rti._setEvalCache",
@@ -8768,7 +8834,7 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -8780,7 +8846,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setIsTestFunction": {
         "id": "function/dart:_rti::Rti._setIsTestFunction",
@@ -8813,7 +8880,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setKind": {
         "id": "function/dart:_rti::Rti._setKind",
@@ -8846,7 +8914,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 9,
         "code": "",
-        "type": "void Function(Rti,int)"
+        "type": "void Function(Rti,int)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setPrecomputed1": {
         "id": "function/dart:_rti::Rti._setPrecomputed1",
@@ -8867,7 +8936,7 @@
         "parameters": [
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -8879,7 +8948,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setPrimary": {
         "id": "function/dart:_rti::Rti._setPrimary",
@@ -8905,14 +8975,15 @@
           },
           {
             "name": "value",
-            "type": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+            "type": "Union([exact=JSString], [exact=Rti], [subclass=JSInt])",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 8,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setRest": {
         "id": "function/dart:_rti::Rti._setRest",
@@ -8945,7 +9016,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti._setSpecializedTestResource": {
         "id": "function/dart:_rti::Rti._setSpecializedTestResource",
@@ -8978,7 +9050,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Rti,Object?)"
+        "type": "void Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::Rti.allocate": {
         "id": "function/dart:_rti::Rti.allocate",
@@ -9000,7 +9073,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "Rti Function()"
+        "type": "Rti Function()",
+        "functionKind": 0
       },
       "dart:_rti::TypeRule.lookupSupertype": {
         "id": "function/dart:_rti::TypeRule.lookupSupertype",
@@ -9033,7 +9107,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic>? Function(Object?,String)"
+        "type": "JSArray<dynamic>? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::TypeRule.lookupTypeVariable": {
         "id": "function/dart:_rti::TypeRule.lookupTypeVariable",
@@ -9066,13 +9141,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String? Function(Object?,String)"
+        "type": "String? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Error.compose": {
         "id": "function/dart:_rti::_Error.compose",
         "kind": "function",
         "name": "compose",
-        "size": 323,
+        "size": 313,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Error",
         "children": [],
@@ -9097,14 +9173,15 @@
           },
           {
             "name": "checkedTypeDescription",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object);\n      return objectDescription + \": type '\" + A.S(A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null)) + \"' is not a subtype of type '\" + A.S(checkedTypeDescription) + \"'\";\n    }",
-        "type": "String Function(Object?,Rti?,String)"
+        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object);\n      return objectDescription + \": type '\" + A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null) + \"' is not a subtype of type '\" + checkedTypeDescription + \"'\";\n    }",
+        "type": "String Function(Object?,Rti?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Error.toString": {
         "id": "function/dart:_rti::_Error.toString",
@@ -9126,7 +9203,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return this._message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:_rti::_FunctionParameters._FunctionParameters": {
         "id": "function/dart:_rti::_FunctionParameters._FunctionParameters",
@@ -9148,7 +9226,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:_rti::_FunctionParameters._getNamed": {
         "id": "function/dart:_rti::_FunctionParameters._getNamed",
@@ -9176,7 +9255,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._getOptionalPositional": {
         "id": "function/dart:_rti::_FunctionParameters._getOptionalPositional",
@@ -9204,7 +9284,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._getRequiredPositional": {
         "id": "function/dart:_rti::_FunctionParameters._getRequiredPositional",
@@ -9232,7 +9313,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+        "type": "JSArray<dynamic> Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setNamed": {
         "id": "function/dart:_rti::_FunctionParameters._setNamed",
@@ -9265,7 +9347,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setOptionalPositional": {
         "id": "function/dart:_rti::_FunctionParameters._setOptionalPositional",
@@ -9298,7 +9381,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters._setRequiredPositional": {
         "id": "function/dart:_rti::_FunctionParameters._setRequiredPositional",
@@ -9331,7 +9415,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(_FunctionParameters,Object?)"
+        "type": "void Function(_FunctionParameters,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_FunctionParameters.allocate": {
         "id": "function/dart:_rti::_FunctionParameters.allocate",
@@ -9353,7 +9438,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "_FunctionParameters Function()"
+        "type": "_FunctionParameters Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.charCodeAt": {
         "id": "function/dart:_rti::_Parser.charCodeAt",
@@ -9386,7 +9472,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "int Function(String,int)"
+        "type": "int Function(String,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.collectArray": {
         "id": "function/dart:_rti::_Parser.collectArray",
@@ -9407,19 +9494,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.collectNamed": {
         "id": "function/dart:_rti::_Parser.collectNamed",
@@ -9440,19 +9528,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.create": {
         "id": "function/dart:_rti::_Parser.create",
@@ -9483,7 +9572,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -9495,7 +9584,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_Parser_create(universe, environment, recipe, normalize) {\n      return {u: universe, e: environment, r: recipe, s: [], p: 0, n: normalize};\n    }",
-        "type": "Object Function(Object?,Object?,String,bool)"
+        "type": "Object Function(Object?,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.environment": {
         "id": "function/dart:_rti::_Parser.environment",
@@ -9516,14 +9606,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 12,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleDigit": {
         "id": "function/dart:_rti::_Parser.handleDigit",
@@ -9559,14 +9650,15 @@
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleDigit(i, digit, source, stack) {\n      var t1, ch,\n        value = digit - 48;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (!(ch >= 48 && ch <= 57))\n          break;\n        value = value * 10 + (ch - 48);\n      }\n      stack.push(value);\n      return i;\n    }",
-        "type": "int Function(int,int,String,Object?)"
+        "type": "int Function(int,int,String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleExtendedOperations": {
         "id": "function/dart:_rti::_Parser.handleExtendedOperations",
@@ -9587,19 +9679,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleExtendedOperations(parser, stack) {\n      var $top = stack.pop();\n      if (0 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 1, \"0&\"));\n        return;\n      }\n      if (1 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 4, \"1&\"));\n        return;\n      }\n      throw A.wrapException(A.AssertionError$(\"Unexpected extended operation \" + A.S($top)));\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleFunctionArguments": {
         "id": "function/dart:_rti::_Parser.handleFunctionArguments",
@@ -9620,19 +9713,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleIdentifier": {
         "id": "function/dart:_rti::_Parser.handleIdentifier",
@@ -9653,7 +9747,7 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -9668,7 +9762,7 @@
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -9680,7 +9774,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_handleIdentifier(parser, start, source, stack, hasPeriod) {\n      var t1, ch, t2, string, environment, recipe,\n        i = start + 1;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (ch === 46) {\n          if (hasPeriod)\n            break;\n          hasPeriod = true;\n        } else {\n          if (!((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36))\n            t2 = ch >= 48 && ch <= 57;\n          else\n            t2 = true;\n          if (!t2)\n            break;\n        }\n      }\n      string = source.substring(start, i);\n      if (hasPeriod) {\n        t1 = parser.u;\n        environment = parser.e;\n        if (environment._kind === 10)\n          environment = environment._primary;\n        recipe = A._Universe_findRule(t1, environment._primary)[string];\n        if (recipe == null)\n          A.throwExpression('No \"' + string + '\" in \"' + A.Rti__getCanonicalRecipe(environment) + '\"');\n        stack.push(A._Universe_evalInEnvironment(t1, environment, recipe));\n      } else\n        stack.push(string);\n      return i;\n    }",
-        "type": "int Function(Object?,int,String,Object?,bool)"
+        "type": "int Function(Object?,int,String,Object?,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleNamedGroup": {
         "id": "function/dart:_rti::_Parser.handleNamedGroup",
@@ -9701,19 +9796,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleOptionalGroup": {
         "id": "function/dart:_rti::_Parser.handleOptionalGroup",
@@ -9734,19 +9830,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.handleTypeArguments": {
         "id": "function/dart:_rti::_Parser.handleTypeArguments",
@@ -9767,19 +9864,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.indexToType": {
         "id": "function/dart:_rti::_Parser.indexToType",
@@ -9817,7 +9915,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_indexToType(universe, environment, index) {\n      var typeArguments, len,\n        kind = environment._kind;\n      if (kind === 10) {\n        if (index === 0)\n          return environment._primary;\n        typeArguments = environment._rest;\n        len = typeArguments.length;\n        if (index <= len)\n          return typeArguments[index - 1];\n        index -= len;\n        environment = environment._primary;\n        kind = environment._kind;\n      } else if (index === 0)\n        return environment;\n      if (kind !== 9)\n        throw A.wrapException(A.AssertionError$(\"Indexed base must be an interface type\"));\n      typeArguments = environment._rest;\n      if (index <= typeArguments.length)\n        return typeArguments[index - 1];\n      throw A.wrapException(A.AssertionError$(\"Bad index \" + index + \" for \" + environment.toString$0(0)));\n    }",
-        "type": "Rti Function(Object?,Rti,int)"
+        "type": "Rti Function(Object?,Rti,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.normalize": {
         "id": "function/dart:_rti::_Parser.normalize",
@@ -9838,20 +9937,21 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.parse": {
         "id": "function/dart:_rti::_Parser.parse",
         "kind": "function",
         "name": "parse",
-        "size": 5256,
+        "size": 5040,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Parser",
         "children": [],
@@ -9862,18 +9962,19 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Parser_parse(parser) {\n      var t1, i, ch, universe, array, head, base, u, parameters, optionalPositional, named, item,\n        source = parser.r,\n        stack = parser.s;\n      for (t1 = source.length, i = 0; i < t1;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, stack);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              stack.push(false);\n              break;\n            case 33:\n              stack.push(true);\n              break;\n            case 59:\n              stack.push(A._Parser_toType(parser.u, parser.e, stack.pop()));\n              break;\n            case 94:\n              stack.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, stack.pop()));\n              break;\n            case 35:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 62:\n              universe = parser.u;\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              head = stack.pop();\n              if (typeof head == \"string\")\n                stack.push(A._Universe__lookupInterfaceRti(universe, head, array));\n              else {\n                base = A._Parser_toType(universe, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    stack.push(A._Universe__lookupGenericFunctionRti(universe, base, array, parser.n));\n                    break;\n                  default:\n                    stack.push(A._Universe__lookupBindingRti(universe, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, stack);\n              break;\n            case 42:\n              u = parser.u;\n              stack.push(A._Universe__lookupStarRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 63:\n              u = parser.u;\n              stack.push(A._Universe__lookupQuestionRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 47:\n              u = parser.u;\n              stack.push(A._Universe__lookupFutureOrRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 40:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 41:\n              universe = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = universe.sEA;\n              named = universe.sEA;\n              head = stack.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = stack.pop();\n                    break;\n                  case -2:\n                    named = stack.pop();\n                    break;\n                  default:\n                    stack.push(head);\n                    break;\n                }\n              else\n                stack.push(head);\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              stack.push(A._Universe__lookupFunctionRti(universe, A._Parser_toType(universe, parser.e, stack.pop()), parameters));\n              break;\n            case 91:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 93:\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-1);\n              break;\n            case 123:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 125:\n              array = stack.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = stack.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
-        "type": "Rti Function(Object?)"
+        "code": "_Parser_parse(parser) {\n      var t2, i, ch, t3, array, head, base, parameters, optionalPositional, named, item,\n        source = parser.r,\n        t1 = parser.s;\n      for (t2 = source.length, i = 0; i < t2;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, t1);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, t1, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, t1, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              t1.push(false);\n              break;\n            case 33:\n              t1.push(true);\n              break;\n            case 59:\n              t1.push(A._Parser_toType(parser.u, parser.e, t1.pop()));\n              break;\n            case 94:\n              t1.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, t1.pop()));\n              break;\n            case 35:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              t1.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 62:\n              t3 = parser.u;\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              head = t1.pop();\n              if (typeof head == \"string\")\n                t1.push(A._Universe__lookupInterfaceRti(t3, head, array));\n              else {\n                base = A._Parser_toType(t3, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    t1.push(A._Universe__lookupGenericFunctionRti(t3, base, array, parser.n));\n                    break;\n                  default:\n                    t1.push(A._Universe__lookupBindingRti(t3, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, t1);\n              break;\n            case 42:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupStarRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 63:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupQuestionRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 47:\n              t3 = parser.u;\n              t1.push(A._Universe__lookupFutureOrRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parser.n));\n              break;\n            case 40:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 41:\n              t3 = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = t3.sEA;\n              named = t3.sEA;\n              head = t1.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = t1.pop();\n                    break;\n                  case -2:\n                    named = t1.pop();\n                    break;\n                  default:\n                    t1.push(head);\n                    break;\n                }\n              else\n                t1.push(head);\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              t1.push(A._Universe__lookupFunctionRti(t3, A._Parser_toType(t3, parser.e, t1.pop()), parameters));\n              break;\n            case 91:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 93:\n              array = t1.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              t1.push(array);\n              t1.push(-1);\n              break;\n            case 123:\n              t1.push(parser.p);\n              parser.p = t1.length;\n              break;\n            case 125:\n              array = t1.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = t1.pop();\n              t1.push(array);\n              t1.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = t1.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.pop": {
         "id": "function/dart:_rti::_Parser.pop",
@@ -9894,14 +9995,15 @@
         "parameters": [
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 16,
         "code": "",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.position": {
         "id": "function/dart:_rti::_Parser.position",
@@ -9922,14 +10024,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 8,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.push": {
         "id": "function/dart:_rti::_Parser.push",
@@ -9950,7 +10053,7 @@
         "parameters": [
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -9962,7 +10065,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 29,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.pushStackFrame": {
         "id": "function/dart:_rti::_Parser.pushStackFrame",
@@ -9983,19 +10087,20 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "stack",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.recipe": {
         "id": "function/dart:_rti::_Parser.recipe",
@@ -10016,14 +10121,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.setPosition": {
         "id": "function/dart:_rti::_Parser.setPosition",
@@ -10044,7 +10150,7 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -10056,7 +10162,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 8,
         "code": "",
-        "type": "void Function(Object?,int)"
+        "type": "void Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.stack": {
         "id": "function/dart:_rti::_Parser.stack",
@@ -10077,14 +10184,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toGenericFunctionParameter": {
         "id": "function/dart:_rti::_Parser.toGenericFunctionParameter",
@@ -10101,7 +10209,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -10117,7 +10225,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Object?)"
+        "type": "Rti Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toType": {
         "id": "function/dart:_rti::_Parser.toType",
@@ -10134,7 +10243,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -10155,7 +10264,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toType(universe, environment, item) {\n      if (typeof item == \"string\")\n        return A._Universe__lookupInterfaceRti(universe, item, universe.sEA);\n      else if (typeof item == \"number\")\n        return A._Parser_indexToType(universe, environment, item);\n      else\n        return item;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?)"
+        "type": "Rti Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toTypes": {
         "id": "function/dart:_rti::_Parser.toTypes",
@@ -10193,7 +10303,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toTypes(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 0; i < $length; ++i)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
-        "type": "void Function(Object?,Rti,Object?)"
+        "type": "void Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.toTypesNamed": {
         "id": "function/dart:_rti::_Parser.toTypesNamed",
@@ -10231,7 +10342,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Parser_toTypesNamed(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 2; i < $length; i += 3)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
-        "type": "void Function(Object?,Rti,Object?)"
+        "type": "void Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Parser.universe": {
         "id": "function/dart:_rti::_Parser.universe",
@@ -10252,64 +10364,15 @@
         "parameters": [
           {
             "name": "parser",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 18,
         "code": "",
-        "type": "Object Function(Object?)"
-      },
-      "dart:_rti::_Type._Type": {
-        "id": "function/dart:_rti::_Type._Type",
-        "kind": "function",
-        "name": "_Type",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_rti::_Type",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=_Type]",
-        "parameters": [
-          {
-            "name": "_rti",
-            "type": "[null|exact=Rti]",
-            "declaredType": "Rti"
-          }
-        ],
-        "sideEffects": "SideEffects(reads field; writes field)",
-        "inlinedCount": 3,
-        "code": "",
-        "type": "dynamic Function(Rti)"
-      },
-      "dart:_rti::_Type.toString": {
-        "id": "function/dart:_rti::_Type.toString",
-        "kind": "function",
-        "name": "toString",
-        "size": 67,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_rti::_Type",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return A._rtiToString(this._rti, null);\n    }",
-        "type": "String Function()"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_TypeError._TypeError.forType": {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
@@ -10342,7 +10405,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_TypeError__TypeError$forType(object, type) {\n      return new A._TypeError(\"TypeError: \" + A._Error_compose(object, null, type));\n    }",
-        "type": "_TypeError Function(dynamic,String)"
+        "type": "_TypeError Function(dynamic,String)",
+        "functionKind": 3
       },
       "dart:_rti::_TypeError._TypeError.fromMessage": {
         "id": "function/dart:_rti::_TypeError._TypeError.fromMessage",
@@ -10370,7 +10434,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "_TypeError$fromMessage(message) {\n      return new A._TypeError(\"TypeError: \" + message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:_rti::_Universe._canonicalRecipeJoin": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeJoin",
@@ -10398,7 +10463,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe__canonicalRecipeJoin($arguments) {\n      var s, sep, i,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; ++i, sep = \",\")\n        s += sep + $arguments[i]._canonicalRecipe;\n      return s;\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeJoinNamed": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeJoinNamed",
@@ -10426,7 +10492,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe__canonicalRecipeJoinNamed($arguments) {\n      var s, sep, i, t1, nameSep,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; i += 3, sep = \",\") {\n        t1 = $arguments[i];\n        nameSep = $arguments[i + 1] ? \"!\" : \":\";\n        s += sep + t1 + nameSep + $arguments[i + 2]._canonicalRecipe;\n      }\n      return s;\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfAny": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfAny",
@@ -10448,7 +10515,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfBinding": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfBinding",
@@ -10469,7 +10537,7 @@
         "parameters": [
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10481,7 +10549,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,Object?)"
+        "type": "String Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfDynamic": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfDynamic",
@@ -10503,7 +10572,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfErased": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfErased",
@@ -10525,7 +10595,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFunction": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFunction",
@@ -10546,7 +10617,7 @@
         "parameters": [
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10558,7 +10629,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,_FunctionParameters)"
+        "type": "String Function(Rti,_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFunctionParameters": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFunctionParameters",
@@ -10586,7 +10658,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(_FunctionParameters)"
+        "type": "String Function(_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfFutureOr": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfFutureOr",
@@ -10607,14 +10680,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfGenericFunction": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfGenericFunction",
@@ -10635,7 +10709,7 @@
         "parameters": [
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10647,7 +10721,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti,Object?)"
+        "type": "String Function(Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfGenericFunctionParameter": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfGenericFunctionParameter",
@@ -10675,7 +10750,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(int)"
+        "type": "String Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfInterface": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfInterface",
@@ -10696,7 +10772,7 @@
         "parameters": [
           {
             "name": "name",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -10708,7 +10784,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,Object?)"
+        "type": "String Function(String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfNever": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfNever",
@@ -10730,7 +10807,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfQuestion": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfQuestion",
@@ -10751,14 +10829,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfStar": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfStar",
@@ -10779,14 +10858,15 @@
         "parameters": [
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(Rti)"
+        "type": "String Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._canonicalRecipeOfVoid": {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfVoid",
@@ -10808,7 +10888,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createBindingRti": {
         "id": "function/dart:_rti::_Universe._createBindingRti",
@@ -10834,7 +10915,7 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10851,7 +10932,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,Object?,String)"
+        "type": "Rti Function(Object?,Rti,Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createFunctionRti": {
         "id": "function/dart:_rti::_Universe._createFunctionRti",
@@ -10872,12 +10954,12 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10894,13 +10976,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)"
+        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createFutureOrRti": {
         "id": "function/dart:_rti::_Universe._createFutureOrRti",
         "kind": "function",
         "name": "_createFutureOrRti",
-        "size": 841,
+        "size": 821,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -10915,12 +10998,12 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -10936,8 +11019,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = baseType === type$.Object;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = false;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createGenericFunctionParameterRti": {
         "id": "function/dart:_rti::_Universe._createGenericFunctionParameterRti",
@@ -10975,7 +11059,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createGenericFunctionRti": {
         "id": "function/dart:_rti::_Universe._createGenericFunctionRti",
@@ -10992,16 +11077,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11023,7 +11108,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize) {\n      var $length, typeArguments, count, i, bound, substitutedBase, substitutedBounds, rti;\n      if (normalize) {\n        $length = bounds.length;\n        typeArguments = A._Utils_newArrayOrEmpty($length);\n        for (count = 0, i = 0; i < $length; ++i) {\n          bound = bounds[i];\n          if (bound._kind === 1) {\n            typeArguments[i] = bound;\n            ++count;\n          }\n        }\n        if (count > 0) {\n          substitutedBase = A._substitute(universe, baseFunctionType, typeArguments, 0);\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, 0);\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, bounds !== substitutedBounds);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 12;\n      rti._primary = baseFunctionType;\n      rti._rest = bounds;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,String,bool)"
+        "type": "Rti Function(Object?,Rti,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createInterfaceRti": {
         "id": "function/dart:_rti::_Universe._createInterfaceRti",
@@ -11049,7 +11135,7 @@
           },
           {
             "name": "name",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -11066,7 +11152,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,String,Object?,String)"
+        "type": "Rti Function(Object?,String,Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createQuestionRti": {
         "id": "function/dart:_rti::_Universe._createQuestionRti",
@@ -11092,7 +11179,7 @@
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11109,7 +11196,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createQuestionRti(universe, baseType, key, normalize) {\n      var baseKind, t1, starArgument, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.Null || baseType === type$.JSNull))\n            if (baseKind !== 7)\n              t1 = baseKind === 8 && A.isNullable(baseType._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n        else if (baseKind === 1 || baseType === type$.legacy_Never)\n          return type$.Null;\n        else if (baseKind === 6) {\n          starArgument = baseType._primary;\n          if (starArgument._kind === 8 && A.isNullable(starArgument._primary))\n            return starArgument;\n          else\n            return A.Rti__getQuestionFromStar(universe, baseType);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 7;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createStarRti": {
         "id": "function/dart:_rti::_Universe._createStarRti",
@@ -11126,16 +11214,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11152,7 +11240,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__createStarRti(universe, baseType, key, normalize) {\n      var baseKind, t1, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          t1 = baseType === type$.Null || baseType === type$.JSNull || baseKind === 7 || baseKind === 6;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 6;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
-        "type": "Rti Function(Object?,Rti,String,bool)"
+        "type": "Rti Function(Object?,Rti,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._createTerminalRti": {
         "id": "function/dart:_rti::_Universe._createTerminalRti",
@@ -11190,7 +11279,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._findRule": {
         "id": "function/dart:_rti::_Universe._findRule",
@@ -11223,7 +11313,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._installRti": {
         "id": "function/dart:_rti::_Universe._installRti",
@@ -11240,7 +11331,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11261,7 +11352,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 9,
         "code": "",
-        "type": "Rti Function(Object?,String,Rti)"
+        "type": "Rti Function(Object?,String,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._installTypeTests": {
         "id": "function/dart:_rti::_Universe._installTypeTests",
@@ -11294,7 +11386,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__installTypeTests(universe, rti) {\n      rti._as = A._installSpecializedAsCheck;\n      rti._is = A._installSpecializedIsTest;\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupAnyRti": {
         "id": "function/dart:_rti::_Universe._lookupAnyRti",
@@ -11311,7 +11404,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11322,7 +11415,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupBindingRti": {
         "id": "function/dart:_rti::_Universe._lookupBindingRti",
@@ -11339,7 +11433,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11348,7 +11442,7 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11360,7 +11454,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupBindingRti(universe, base, $arguments) {\n      var newBase, newArguments, key, probe, rti, t1;\n      if (base._kind === 10) {\n        newBase = base._primary;\n        newArguments = base._rest.concat($arguments);\n      } else {\n        newArguments = $arguments;\n        newBase = base;\n      }\n      key = newBase._canonicalRecipe + (\";<\" + A._Universe__canonicalRecipeJoin(newArguments) + \">\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 10;\n      rti._primary = newBase;\n      rti._rest = newArguments;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?)"
+        "type": "Rti Function(Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupDynamicRti": {
         "id": "function/dart:_rti::_Universe._lookupDynamicRti",
@@ -11377,7 +11472,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11388,7 +11483,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupErasedRti": {
         "id": "function/dart:_rti::_Universe._lookupErasedRti",
@@ -11405,7 +11501,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11416,7 +11512,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFunctionRti": {
         "id": "function/dart:_rti::_Universe._lookupFunctionRti",
@@ -11433,16 +11530,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "returnType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11454,7 +11551,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupFunctionRti(universe, returnType, parameters) {\n      var sep, key, probe, rti, t1,\n        s = returnType._canonicalRecipe,\n        requiredPositional = parameters._requiredPositional,\n        requiredPositionalLength = requiredPositional.length,\n        optionalPositional = parameters._optionalPositional,\n        optionalPositionalLength = optionalPositional.length,\n        named = parameters._named,\n        namedLength = named.length,\n        recipe = \"(\" + A._Universe__canonicalRecipeJoin(requiredPositional);\n      if (optionalPositionalLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        recipe += sep + \"[\" + A._Universe__canonicalRecipeJoin(optionalPositional) + \"]\";\n      }\n      if (namedLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        recipe += sep + \"{\" + A._Universe__canonicalRecipeJoinNamed(named) + \"}\";\n      }\n      key = s + (recipe + \")\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 11;\n      rti._primary = returnType;\n      rti._rest = parameters;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,_FunctionParameters)"
+        "type": "Rti Function(Object?,Rti,_FunctionParameters)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFutureOrRti": {
         "id": "function/dart:_rti::_Universe._lookupFutureOrRti",
@@ -11471,16 +11569,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11492,7 +11590,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupFutureOrRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"/\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createFutureOrRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupFutureRti": {
         "id": "function/dart:_rti::_Universe._lookupFutureRti",
@@ -11509,7 +11608,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11518,14 +11617,15 @@
           },
           {
             "name": "base",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupGenericFunctionParameterRti": {
         "id": "function/dart:_rti::_Universe._lookupGenericFunctionParameterRti",
@@ -11542,7 +11642,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11558,7 +11658,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupGenericFunctionParameterRti(universe, index) {\n      var rti, t1,\n        key = \"\" + index + \"^\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 13;\n      rti._primary = index;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,int)"
+        "type": "Rti Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupGenericFunctionRti": {
         "id": "function/dart:_rti::_Universe._lookupGenericFunctionRti",
@@ -11575,16 +11676,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseFunctionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11601,7 +11702,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupGenericFunctionRti(universe, baseFunctionType, bounds, normalize) {\n      var t1,\n        key = baseFunctionType._canonicalRecipe + (\"<\" + A._Universe__canonicalRecipeJoin(bounds) + \">\"),\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,bool)"
+        "type": "Rti Function(Object?,Rti,Object?,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupInterfaceRti": {
         "id": "function/dart:_rti::_Universe._lookupInterfaceRti",
@@ -11618,7 +11720,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11639,7 +11741,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupInterfaceRti(universe, $name, $arguments) {\n      var probe, rti, t1,\n        s = $name;\n      if ($arguments.length > 0)\n        s += \"<\" + A._Universe__canonicalRecipeJoin($arguments) + \">\";\n      probe = universe.eC.get(s);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 9;\n      rti._primary = $name;\n      rti._rest = $arguments;\n      if ($arguments.length > 0)\n        rti._precomputed1 = $arguments[0];\n      rti._canonicalRecipe = s;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(s, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,String,Object?)"
+        "type": "Rti Function(Object?,String,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupNeverRti": {
         "id": "function/dart:_rti::_Universe._lookupNeverRti",
@@ -11656,7 +11759,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11667,7 +11770,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupQuestionRti": {
         "id": "function/dart:_rti::_Universe._lookupQuestionRti",
@@ -11684,7 +11788,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11693,7 +11797,7 @@
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11705,7 +11809,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupQuestionRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"?\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createQuestionRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupStarRti": {
         "id": "function/dart:_rti::_Universe._lookupStarRti",
@@ -11722,16 +11827,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "baseType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -11743,7 +11848,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupStarRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"*\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createStarRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,Rti,bool)"
+        "type": "Rti Function(Object?,Rti,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupTerminalRti": {
         "id": "function/dart:_rti::_Universe._lookupTerminalRti",
@@ -11760,7 +11866,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11781,7 +11887,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe__lookupTerminalRti(universe, kind, key) {\n      var rti, t1,\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = kind;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
-        "type": "Rti Function(Object?,int,String)"
+        "type": "Rti Function(Object?,int,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._lookupVoidRti": {
         "id": "function/dart:_rti::_Universe._lookupVoidRti",
@@ -11798,7 +11905,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11809,7 +11916,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._parseRecipe": {
         "id": "function/dart:_rti::_Universe._parseRecipe",
@@ -11826,7 +11934,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -11840,7 +11948,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -11852,7 +11960,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Object?,Object?,String,bool)"
+        "type": "Rti Function(Object?,Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin": {
         "id": "function/dart:_rti::_Universe._recipeJoin",
@@ -11885,7 +11994,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 9,
         "code": "",
-        "type": "String Function(String,String)"
+        "type": "String Function(String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin3": {
         "id": "function/dart:_rti::_Universe._recipeJoin3",
@@ -11923,7 +12033,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,String,String)"
+        "type": "String Function(String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin4": {
         "id": "function/dart:_rti::_Universe._recipeJoin4",
@@ -11966,7 +12077,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function(String,String,String,String)"
+        "type": "String Function(String,String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe._recipeJoin5": {
         "id": "function/dart:_rti::_Universe._recipeJoin5",
@@ -12014,7 +12126,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(String,String,String,String,String)"
+        "type": "String Function(String,String,String,String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.addErasedTypes": {
         "id": "function/dart:_rti::_Universe.addErasedTypes",
@@ -12047,7 +12160,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_addErasedTypes(universe, types) {\n      return A._Utils_objectAssign(universe.eT, types);\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.addRules": {
         "id": "function/dart:_rti::_Universe.addRules",
@@ -12080,7 +12194,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_addRules(universe, rules) {\n      return A._Utils_objectAssign(universe.tR, rules);\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.bind": {
         "id": "function/dart:_rti::_Universe.bind",
@@ -12097,7 +12212,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -12118,7 +12233,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_bind(universe, environment, argumentsRti) {\n      var argumentsRecipe, probe, rti,\n        cache = environment._bindCache;\n      if (cache == null)\n        cache = environment._bindCache = new Map();\n      argumentsRecipe = argumentsRti._canonicalRecipe;\n      probe = cache.get(argumentsRecipe);\n      if (probe != null)\n        return probe;\n      rti = A._Universe__lookupBindingRti(universe, environment, argumentsRti._kind === 10 ? argumentsRti._rest : [argumentsRti]);\n      cache.set(argumentsRecipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti,Rti)"
+        "type": "Rti Function(Object?,Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.erasedTypes": {
         "id": "function/dart:_rti::_Universe.erasedTypes",
@@ -12146,13 +12262,14 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.eval": {
         "id": "function/dart:_rti::_Universe.eval",
         "kind": "function",
         "name": "eval",
-        "size": 307,
+        "size": 298,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -12163,7 +12280,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -12172,7 +12289,7 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           },
           {
@@ -12183,8 +12300,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        cache = universe.eC,\n        probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      cache.set(recipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,String,bool)"
+        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        t1 = universe.eC,\n        probe = t1.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      t1.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,String,bool)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalCache": {
         "id": "function/dart:_rti::_Universe.evalCache",
@@ -12212,7 +12330,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 19,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalInEnvironment": {
         "id": "function/dart:_rti::_Universe.evalInEnvironment",
@@ -12229,7 +12348,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -12238,19 +12357,20 @@
           },
           {
             "name": "environment",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Universe_evalInEnvironment(universe, environment, recipe) {\n      var probe, rti,\n        cache = environment._evalCache;\n      if (cache == null)\n        cache = environment._evalCache = new Map();\n      probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, environment, recipe, true));\n      cache.set(recipe, rti);\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Rti,String)"
+        "type": "Rti Function(Object?,Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.evalTypeVariable": {
         "id": "function/dart:_rti::_Universe.evalTypeVariable",
@@ -12267,7 +12387,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -12288,13 +12408,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,Rti,String)"
+        "type": "Rti Function(Object?,Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findErasedType": {
         "id": "function/dart:_rti::_Universe.findErasedType",
         "kind": "function",
         "name": "findErasedType",
-        "size": 686,
+        "size": 668,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_rti::_Universe",
         "children": [],
@@ -12305,7 +12426,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
@@ -12320,8 +12441,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        metadata = universe.eT,\n        probe = metadata[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        metadata[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
-        "type": "Rti Function(Object?,String)"
+        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        t1 = universe.eT,\n        probe = t1[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        t1[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
+        "type": "Rti Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findRule": {
         "id": "function/dart:_rti::_Universe.findRule",
@@ -12354,7 +12476,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_Universe_findRule(universe, targetType) {\n      var rule = universe.tR[targetType];\n      for (; typeof rule == \"string\";)\n        rule = universe.tR[rule];\n      return rule;\n    }",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.findTypeParameterVariances": {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
@@ -12387,7 +12510,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Object?,String)"
+        "type": "Object? Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.sharedEmptyArray": {
         "id": "function/dart:_rti::_Universe.sharedEmptyArray",
@@ -12415,7 +12539,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?)"
+        "type": "JSArray<dynamic> Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.typeParameterVariances": {
         "id": "function/dart:_rti::_Universe.typeParameterVariances",
@@ -12443,7 +12568,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Universe.typeRules": {
         "id": "function/dart:_rti::_Universe.typeRules",
@@ -12471,7 +12597,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 4,
         "code": "",
-        "type": "Object Function(Object?)"
+        "type": "Object Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayAt": {
         "id": "function/dart:_rti::_Utils.arrayAt",
@@ -12504,7 +12631,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 44,
         "code": "",
-        "type": "Object? Function(Object?,int)"
+        "type": "Object? Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayConcat": {
         "id": "function/dart:_rti::_Utils.arrayConcat",
@@ -12537,7 +12665,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,Object?)"
+        "type": "JSArray<dynamic> Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arrayLength": {
         "id": "function/dart:_rti::_Utils.arrayLength",
@@ -12565,7 +12694,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 35,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arraySetAt": {
         "id": "function/dart:_rti::_Utils.arraySetAt",
@@ -12596,14 +12726,15 @@
           },
           {
             "name": "value",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 7,
         "code": "",
-        "type": "void Function(Object?,int,Object?)"
+        "type": "void Function(Object?,int,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.arraySplice": {
         "id": "function/dart:_rti::_Utils.arraySplice",
@@ -12624,7 +12755,7 @@
         "parameters": [
           {
             "name": "array",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -12636,7 +12767,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?,int)"
+        "type": "JSArray<dynamic> Function(Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asBool": {
         "id": "function/dart:_rti::_Utils.asBool",
@@ -12664,7 +12796,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asDouble": {
         "id": "function/dart:_rti::_Utils.asDouble",
@@ -12692,7 +12825,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "double Function(Object?)"
+        "type": "double Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asInt": {
         "id": "function/dart:_rti::_Utils.asInt",
@@ -12720,7 +12854,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 42,
         "code": "",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asNum": {
         "id": "function/dart:_rti::_Utils.asNum",
@@ -12748,7 +12883,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "num Function(Object?)"
+        "type": "num Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asRti": {
         "id": "function/dart:_rti::_Utils.asRti",
@@ -12776,7 +12912,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 96,
         "code": "",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asRtiOrNull": {
         "id": "function/dart:_rti::_Utils.asRtiOrNull",
@@ -12804,7 +12941,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti? Function(Object?)"
+        "type": "Rti? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.asString": {
         "id": "function/dart:_rti::_Utils.asString",
@@ -12830,9 +12968,10 @@
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 34,
+        "inlinedCount": 33,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.instanceOf": {
         "id": "function/dart:_rti::_Utils.instanceOf",
@@ -12865,7 +13004,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isArray": {
         "id": "function/dart:_rti::_Utils.isArray",
@@ -12893,7 +13033,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isIdentical": {
         "id": "function/dart:_rti::_Utils.isIdentical",
@@ -12926,7 +13067,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 59,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isNotIdentical": {
         "id": "function/dart:_rti::_Utils.isNotIdentical",
@@ -12959,7 +13101,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?,Object?)"
+        "type": "bool Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isNum": {
         "id": "function/dart:_rti::_Utils.isNum",
@@ -12987,7 +13130,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.isString": {
         "id": "function/dart:_rti::_Utils.isString",
@@ -13015,7 +13159,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.mapGet": {
         "id": "function/dart:_rti::_Utils.mapGet",
@@ -13041,14 +13186,15 @@
           },
           {
             "name": "key",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 12,
         "code": "",
-        "type": "Object? Function(Object?,Object?)"
+        "type": "Object? Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.mapSet": {
         "id": "function/dart:_rti::_Utils.mapSet",
@@ -13074,19 +13220,20 @@
           },
           {
             "name": "key",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           },
           {
             "name": "value",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 12,
         "code": "",
-        "type": "void Function(Object?,Object?,Object?)"
+        "type": "void Function(Object?,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.newArrayOrEmpty": {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
@@ -13114,7 +13261,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "_Utils_newArrayOrEmpty($length) {\n      return $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n    }",
-        "type": "Object? Function(int)"
+        "type": "Object? Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.objectAssign": {
         "id": "function/dart:_rti::_Utils.objectAssign",
@@ -13147,7 +13295,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Utils_objectAssign(o, other) {\n      var i, key,\n        keys = Object.keys(other),\n        $length = keys.length;\n      for (i = 0; i < $length; ++i) {\n        key = keys[i];\n        o[key] = other[key];\n      }\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.objectKeys": {
         "id": "function/dart:_rti::_Utils.objectKeys",
@@ -13175,7 +13324,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "JSArray<dynamic> Function(Object?)"
+        "type": "JSArray<dynamic> Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.stringLessThan": {
         "id": "function/dart:_rti::_Utils.stringLessThan",
@@ -13208,7 +13358,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(String,String)"
+        "type": "bool Function(String,String)",
+        "functionKind": 0
       },
       "dart:_rti::_Utils.substring": {
         "id": "function/dart:_rti::_Utils.substring",
@@ -13246,7 +13397,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String,int,int)"
+        "type": "String Function(String,int,int)",
+        "functionKind": 0
       },
       "dart:_rti::_areArgumentsSubtypes": {
         "id": "function/dart:_rti::_areArgumentsSubtypes",
@@ -13299,7 +13451,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_areArgumentsSubtypes(universe, sArgs, sVariances, sEnv, tArgs, tEnv) {\n      var i, t1, t2,\n        $length = sArgs.length;\n      for (i = 0; i < $length; ++i) {\n        t1 = sArgs[i];\n        t2 = tArgs[i];\n        if (!A._isSubtype(universe, t1, sEnv, t2, tEnv))\n          return false;\n      }\n      return true;\n    }",
-        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)"
+        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_arrayInstanceType": {
         "id": "function/dart:_rti::_arrayInstanceType",
@@ -13327,7 +13480,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_arrayInstanceType(object) {\n      var rti = object[init.arrayRti],\n        defaultRti = type$.JSArray_dynamic;\n      if (rti == null)\n        return defaultRti;\n      if (rti.constructor !== defaultRti.constructor)\n        return defaultRti;\n      return rti;\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asBool": {
         "id": "function/dart:_rti::_asBool",
@@ -13355,7 +13509,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBool(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asBoolQ": {
         "id": "function/dart:_rti::_asBoolQ",
@@ -13383,7 +13538,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBoolQ(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool?\"));\n    }",
-        "type": "bool? Function(dynamic)"
+        "type": "bool? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asBoolS": {
         "id": "function/dart:_rti::_asBoolS",
@@ -13411,7 +13567,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asBoolS(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
-        "type": "bool? Function(dynamic)"
+        "type": "bool? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asDouble": {
         "id": "function/dart:_rti::_asDouble",
@@ -13439,7 +13596,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDouble(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
-        "type": "double Function(Object?)"
+        "type": "double Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asDoubleQ": {
         "id": "function/dart:_rti::_asDoubleQ",
@@ -13467,7 +13625,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDoubleQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double?\"));\n    }",
-        "type": "double? Function(dynamic)"
+        "type": "double? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asDoubleS": {
         "id": "function/dart:_rti::_asDoubleS",
@@ -13495,7 +13654,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asDoubleS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
-        "type": "double? Function(dynamic)"
+        "type": "double? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asInt": {
         "id": "function/dart:_rti::_asInt",
@@ -13523,7 +13683,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asInt(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
-        "type": "int Function(Object?)"
+        "type": "int Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asIntQ": {
         "id": "function/dart:_rti::_asIntQ",
@@ -13551,7 +13712,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asIntQ(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int?\"));\n    }",
-        "type": "int? Function(dynamic)"
+        "type": "int? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asIntS": {
         "id": "function/dart:_rti::_asIntS",
@@ -13579,7 +13741,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asIntS(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
-        "type": "int? Function(dynamic)"
+        "type": "int? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asNum": {
         "id": "function/dart:_rti::_asNum",
@@ -13607,7 +13770,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNum(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
-        "type": "num Function(Object?)"
+        "type": "num Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asNumQ": {
         "id": "function/dart:_rti::_asNumQ",
@@ -13635,7 +13799,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNumQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num?\"));\n    }",
-        "type": "num? Function(dynamic)"
+        "type": "num? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asNumS": {
         "id": "function/dart:_rti::_asNumS",
@@ -13663,13 +13828,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asNumS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
-        "type": "num? Function(dynamic)"
+        "type": "num? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asObject": {
         "id": "function/dart:_rti::_asObject",
         "kind": "function",
         "name": "_asObject",
-        "size": 46,
+        "size": 154,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -13690,8 +13856,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asObject(object) {\n      return object;\n    }",
-        "type": "Object? Function(Object?)"
+        "code": "_asObject(object) {\n      if (object != null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"Object\"));\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asString": {
         "id": "function/dart:_rti::_asString",
@@ -13719,7 +13886,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asString(object) {\n      if (typeof object == \"string\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_asStringQ": {
         "id": "function/dart:_rti::_asStringQ",
@@ -13747,7 +13915,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asStringQ(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String?\"));\n    }",
-        "type": "String? Function(dynamic)"
+        "type": "String? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asStringS": {
         "id": "function/dart:_rti::_asStringS",
@@ -13775,7 +13944,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asStringS(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
-        "type": "String? Function(dynamic)"
+        "type": "String? Function(dynamic)",
+        "functionKind": 0
       },
       "dart:_rti::_asTop": {
         "id": "function/dart:_rti::_asTop",
@@ -13803,7 +13973,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_asTop(object) {\n      return object;\n    }",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_failedAsCheck": {
         "id": "function/dart:_rti::_failedAsCheck",
@@ -13836,7 +14007,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_failedAsCheck(object, testRti) {\n      throw A.wrapException(A._TypeError$fromMessage(A._Error_compose(object, A.instanceOrFunctionType(object, testRti), A._rtiToString(testRti, null))));\n    }",
-        "type": "void Function(Object?,Rti)"
+        "type": "void Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_finishIsFn": {
         "id": "function/dart:_rti::_finishIsFn",
@@ -13874,13 +14046,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_finishIsFn(testRti, object, isFn) {\n      testRti._is = isFn;\n      return testRti._is(object);\n    }",
-        "type": "bool Function(Rti,Object?,Object?)"
+        "type": "bool Function(Rti,Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_functionRtiToString": {
         "id": "function/dart:_rti::_functionRtiToString",
         "kind": "function",
         "name": "_functionRtiToString",
-        "size": 3339,
+        "size": 3219,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -13895,7 +14068,7 @@
         "parameters": [
           {
             "name": "functionType",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -13911,14 +14084,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, t3, typeParametersText, typeSep, t4, t5, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, t3 = type$.Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          t4 = genericContext.length;\n          t5 = t4 - 1 - i;\n          if (!(t5 >= 0))\n            return A.ioore(genericContext, t5);\n          typeParametersText = B.JSString_methods.$add(typeParametersText + typeSep, genericContext[t5]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t4 = boundRti === t3;\n            else\n              t4 = true;\n          else\n            t4 = true;\n          if (!t4)\n            typeParametersText += B.JSString_methods.$add(\" extends \", A._rtiToString(boundRti, genericContext));\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += B.JSString_methods.$add(sep, A._rtiToString(requiredPositional[i], genericContext));\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += B.JSString_methods.$add(sep, A._rtiToString(optionalPositional[i], genericContext));\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += J.$add$ns(A._rtiToString(named[i + 2], genericContext), \" \") + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + A.S(returnTypeText);\n    }",
-        "type": "String Function(Rti,List<String>?,{Object? bounds})"
+        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, typeParametersText, typeSep, t3, t4, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          t3 = genericContext.length;\n          t4 = t3 - 1 - i;\n          if (!(t4 >= 0))\n            return A.ioore(genericContext, t4);\n          typeParametersText = B.JSString_methods.$add(typeParametersText + typeSep, genericContext[t4]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t3 = false;\n            else\n              t3 = true;\n          else\n            t3 = true;\n          if (!t3)\n            typeParametersText += \" extends \" + A._rtiToString(boundRti, genericContext);\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += sep + A._rtiToString(requiredPositional[i], genericContext);\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += sep + A._rtiToString(optionalPositional[i], genericContext);\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += A._rtiToString(named[i + 2], genericContext) + \" \" + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + returnTypeText;\n    }",
+        "type": "String Function(Rti,List<String>?,{Object? bounds})",
+        "functionKind": 0
       },
       "dart:_rti::_generalAsCheckImplementation": {
         "id": "function/dart:_rti::_generalAsCheckImplementation",
         "kind": "function",
         "name": "_generalAsCheckImplementation",
-        "size": 220,
+        "size": 282,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -13939,8 +14113,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_generalAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
-        "type": "Object? Function(Object?)"
+        "code": "_generalAsCheckImplementation(object) {\n      var t1, testRti = this;\n      if (object == null) {\n        t1 = A.isNullable(testRti);\n        if (t1)\n          return object;\n      } else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalIsTestImplementation": {
         "id": "function/dart:_rti::_generalIsTestImplementation",
@@ -13968,7 +14143,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalIsTestImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      return A._isSubtype(init.typeUniverse, A.instanceOrFunctionType(object, testRti), null, testRti, null);\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalNullableAsCheckImplementation": {
         "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
@@ -13996,7 +14172,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalNullableAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
-        "type": "Object? Function(Object?)"
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_generalNullableIsTestImplementation": {
         "id": "function/dart:_rti::_generalNullableIsTestImplementation",
@@ -14024,13 +14201,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_generalNullableIsTestImplementation(object) {\n      if (object == null)\n        return true;\n      return this._primary._is(object);\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_installSpecializedAsCheck": {
         "id": "function/dart:_rti::_installSpecializedAsCheck",
         "kind": "function",
         "name": "_installSpecializedAsCheck",
-        "size": 505,
+        "size": 592,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14040,8 +14218,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "object",
@@ -14051,14 +14229,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_installSpecializedAsCheck(object) {\n      var t1, asFn, testRti = this;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else\n        asFn = A._generalNullableAsCheckImplementation;\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
-        "type": "bool Function(Object?)"
+        "code": "_installSpecializedAsCheck(object) {\n      var t1, testRti = this,\n        asFn = A._generalAsCheckImplementation;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else {\n        t1 = A.isNullable(testRti);\n        if (t1)\n          asFn = A._generalNullableAsCheckImplementation;\n      }\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
+        "type": "Object? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_installSpecializedIsTest": {
         "id": "function/dart:_rti::_installSpecializedIsTest",
         "kind": "function",
         "name": "_installSpecializedIsTest",
-        "size": 1476,
+        "size": 1454,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14079,8 +14258,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_installSpecializedIsTest(object) {\n      var unstarred, isFn, $name, testRti = this,\n        t1 = type$.Object;\n      if (testRti === t1)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === t1;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
-        "type": "bool Function(Object?)"
+        "code": "_installSpecializedIsTest(object) {\n      var t1, unstarred, isFn, $name, testRti = this;\n      if (testRti === type$.Object)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceType": {
         "id": "function/dart:_rti::_instanceType",
@@ -14097,7 +14277,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -14108,7 +14288,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "_instanceType(object) {\n      var rti = object.$ti;\n      return rti != null ? rti : A._instanceTypeFromConstructor(object);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceTypeFromConstructor": {
         "id": "function/dart:_rti::_instanceTypeFromConstructor",
@@ -14125,7 +14306,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -14136,7 +14317,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_instanceTypeFromConstructor(instance) {\n      var $constructor = instance.constructor,\n        probe = $constructor.$ccache;\n      if (probe != null)\n        return probe;\n      return A._instanceTypeFromConstructorMiss(instance, $constructor);\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_instanceTypeFromConstructorMiss": {
         "id": "function/dart:_rti::_instanceTypeFromConstructorMiss",
@@ -14153,7 +14335,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -14169,7 +14351,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_instanceTypeFromConstructorMiss(instance, $constructor) {\n      var effectiveConstructor = instance instanceof A.Closure ? instance.__proto__.__proto__.constructor : $constructor,\n        rti = A._Universe_findErasedType(init.typeUniverse, effectiveConstructor.name);\n      $constructor.$ccache = rti;\n      return rti;\n    }",
-        "type": "Rti Function(Object?,Object?)"
+        "type": "Rti Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isBool": {
         "id": "function/dart:_rti::_isBool",
@@ -14197,7 +14380,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isBool(object) {\n      return true === object || false === object;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isClosure": {
         "id": "function/dart:_rti::_isClosure",
@@ -14225,7 +14409,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isDartObject": {
         "id": "function/dart:_rti::_isDartObject",
@@ -14253,13 +14438,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isFunctionSubtype": {
         "id": "function/dart:_rti::_isFunctionSubtype",
         "kind": "function",
         "name": "_isFunctionSubtype",
-        "size": 2694,
+        "size": 3041,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14279,7 +14465,7 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -14289,7 +14475,7 @@
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -14300,8 +14486,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          if (sName < tName)\n            continue;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      return true;\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName, sIsRequired;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          sIsRequired = sNamed[sIndex - 2];\n          if (sName < tName) {\n            if (sIsRequired)\n              return false;\n            continue;\n          }\n          t1 = tNamed[tIndex + 1];\n          if (sIsRequired && !t1)\n            return false;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      for (; sIndex < sNamedLength;) {\n        if (sNamed[sIndex + 1])\n          return false;\n        sIndex += 3;\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isInt": {
         "id": "function/dart:_rti::_isInt",
@@ -14329,7 +14516,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "_isInt(object) {\n      return typeof object == \"number\" && Math.floor(object) === object;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isInterfaceSubtype": {
         "id": "function/dart:_rti::_isInterfaceSubtype",
@@ -14355,7 +14543,7 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -14365,7 +14553,7 @@
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -14377,7 +14565,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isInterfaceSubtype(universe, s, sEnv, t, tEnv) {\n      var rule, recipes, $length, supertypeArgs, i, t1, t2,\n        sName = s._primary,\n        tName = t._primary;\n      for (; sName !== tName;) {\n        rule = universe.tR[sName];\n        if (rule == null)\n          return false;\n        if (typeof rule == \"string\") {\n          sName = rule;\n          continue;\n        }\n        recipes = rule[tName];\n        if (recipes == null)\n          return false;\n        $length = recipes.length;\n        supertypeArgs = $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n        for (i = 0; i < $length; ++i)\n          supertypeArgs[i] = A._Universe_evalInEnvironment(universe, s, recipes[i]);\n        return A._areArgumentsSubtypes(universe, supertypeArgs, null, sEnv, t._rest, tEnv);\n      }\n      t1 = s._rest;\n      t2 = t._rest;\n      return A._areArgumentsSubtypes(universe, t1, null, sEnv, t2, tEnv);\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isListTestViaProperty": {
         "id": "function/dart:_rti::_isListTestViaProperty",
@@ -14405,7 +14594,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isListTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      if (typeof object != \"object\")\n        return false;\n      if (Array.isArray(object))\n        return true;\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isNum": {
         "id": "function/dart:_rti::_isNum",
@@ -14433,7 +14623,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
         "code": "_isNum(object) {\n      return typeof object == \"number\";\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isObject": {
         "id": "function/dart:_rti::_isObject",
@@ -14461,7 +14652,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isObject(object) {\n      return object != null;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isString": {
         "id": "function/dart:_rti::_isString",
@@ -14489,13 +14681,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "_isString(object) {\n      return typeof object == \"string\";\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isSubtype": {
         "id": "function/dart:_rti::_isSubtype",
         "kind": "function",
         "name": "_isSubtype",
-        "size": 3001,
+        "size": 3597,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14536,8 +14729,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = s === type$.Null || s === type$.JSNull;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = t._primary;\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return t1;\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t1;\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
-        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = false;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      t1 = s === type$.Null || s === type$.JSNull;\n      if (t1) {\n        if (tKind === 8)\n          return A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t === type$.Null || t === type$.JSNull || tKind === 7 || tKind === 6;\n      }\n      if (t === type$.Object) {\n        if (sKind === 8)\n          return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        if (sKind === 6)\n          return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return sKind !== 7;\n      }\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = A.Rti__getQuestionFromStar(universe, t);\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, type$.Null, sEnv, t, tEnv);\n        return t1 && A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, type$.Null, tEnv);\n        return t1 || A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isTestViaProperty": {
         "id": "function/dart:_rti::_isTestViaProperty",
@@ -14565,7 +14759,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_isTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_isTop": {
         "id": "function/dart:_rti::_isTop",
@@ -14593,7 +14788,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_isTop(object) {\n      return true;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_nullIs": {
         "id": "function/dart:_rti::_nullIs",
@@ -14621,13 +14817,14 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "_nullIs(testRti) {\n      var t1,\n        kind = testRti._kind;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          if (!(testRti === type$.legacy_Never))\n            if (kind !== 7)\n              t1 = kind === 8 && A._nullIs(testRti._primary) || testRti === type$.Null || testRti === type$.JSNull;\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiArrayToString": {
         "id": "function/dart:_rti::_rtiArrayToString",
         "kind": "function",
         "name": "_rtiArrayToString",
-        "size": 241,
+        "size": 217,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14653,8 +14850,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += B.JSString_methods.$add(sep, A._rtiToString(array[i], genericContext));\n      return s;\n    }",
-        "type": "String Function(Object?,List<String>?)"
+        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += sep + A._rtiToString(array[i], genericContext);\n      return s;\n    }",
+        "type": "String Function(Object?,List<String>?)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiBind": {
         "id": "function/dart:_rti::_rtiBind",
@@ -14671,7 +14869,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "environment",
@@ -14687,7 +14885,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Rti,Rti)"
+        "type": "Rti Function(Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiEval": {
         "id": "function/dart:_rti::_rtiEval",
@@ -14704,29 +14903,30 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "environment",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "Rti Function(Rti,String)"
+        "type": "Rti Function(Rti,String)",
+        "functionKind": 0
       },
       "dart:_rti::_rtiToString": {
         "id": "function/dart:_rti::_rtiToString",
         "kind": "function",
         "name": "_rtiToString",
-        "size": 1597,
+        "size": 1527,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -14737,7 +14937,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "rti",
@@ -14752,8 +14952,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return J.$add$ns(argumentKind === 11 || argumentKind === 12 ? B.JSString_methods.$add(\"(\", s) + \")\" : s, \"?\");\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A.S(A._rtiToString(rti._primary, genericContext)) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        genericContext.toString;\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
-        "type": "String Function(Rti,List<String>?)"
+        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return (argumentKind === 11 || argumentKind === 12 ? \"(\" + s + \")\" : s) + \"?\";\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A._rtiToString(rti._primary, genericContext) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
+        "type": "String Function(Rti,List<String>?)",
+        "functionKind": 0
       },
       "dart:_rti::_setArrayType": {
         "id": "function/dart:_rti::_setArrayType",
@@ -14786,7 +14987,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_setArrayType(target, rti) {\n      target[init.arrayRti] = rti;\n      return target;\n    }",
-        "type": "Object? Function(Object?,Object?)"
+        "type": "Object? Function(Object?,Object?)",
+        "functionKind": 0
       },
       "dart:_rti::_simpleSpecializedIsTest": {
         "id": "function/dart:_rti::_simpleSpecializedIsTest",
@@ -14814,7 +15016,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Object? Function(Rti)"
+        "type": "Object? Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::_substitute": {
         "id": "function/dart:_rti::_substitute",
@@ -14831,16 +15034,16 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
             "name": "rti",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
@@ -14857,7 +15060,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substitute(universe, rti, typeArguments, depth) {\n      var baseType, substitutedBaseType, interfaceTypeArguments, substitutedInterfaceTypeArguments, base, substitutedBase, $arguments, substitutedArguments, returnType, substitutedReturnType, functionParameters, substitutedFunctionParameters, bounds, substitutedBounds, index, argument,\n        kind = rti._kind;\n      switch (kind) {\n        case 5:\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n          return rti;\n        case 6:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupStarRti(universe, substitutedBaseType, true);\n        case 7:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupQuestionRti(universe, substitutedBaseType, true);\n        case 8:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupFutureOrRti(universe, substitutedBaseType, true);\n        case 9:\n          interfaceTypeArguments = rti._rest;\n          substitutedInterfaceTypeArguments = A._substituteArray(universe, interfaceTypeArguments, typeArguments, depth);\n          if (substitutedInterfaceTypeArguments === interfaceTypeArguments)\n            return rti;\n          return A._Universe__lookupInterfaceRti(universe, rti._primary, substitutedInterfaceTypeArguments);\n        case 10:\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          $arguments = rti._rest;\n          substitutedArguments = A._substituteArray(universe, $arguments, typeArguments, depth);\n          if (substitutedBase === base && substitutedArguments === $arguments)\n            return rti;\n          return A._Universe__lookupBindingRti(universe, substitutedBase, substitutedArguments);\n        case 11:\n          returnType = rti._primary;\n          substitutedReturnType = A._substitute(universe, returnType, typeArguments, depth);\n          functionParameters = rti._rest;\n          substitutedFunctionParameters = A._substituteFunctionParameters(universe, functionParameters, typeArguments, depth);\n          if (substitutedReturnType === returnType && substitutedFunctionParameters === functionParameters)\n            return rti;\n          return A._Universe__lookupFunctionRti(universe, substitutedReturnType, substitutedFunctionParameters);\n        case 12:\n          bounds = rti._rest;\n          depth += bounds.length;\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, depth);\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          if (substitutedBounds === bounds && substitutedBase === base)\n            return rti;\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, true);\n        case 13:\n          index = rti._primary;\n          if (index < depth)\n            return rti;\n          argument = typeArguments[index - depth];\n          if (argument == null)\n            return rti;\n          return argument;\n        default:\n          throw A.wrapException(A.AssertionError$(\"Attempted to substitute unexpected RTI kind \" + kind));\n      }\n    }",
-        "type": "Rti Function(Object?,Rti,Object?,int)"
+        "type": "Rti Function(Object?,Rti,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteArray": {
         "id": "function/dart:_rti::_substituteArray",
@@ -14878,7 +15082,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -14900,7 +15104,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteArray(universe, rtiArray, typeArguments, depth) {\n      var changed, i, rti, substitutedRti,\n        $length = rtiArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; ++i) {\n        rti = rtiArray[i];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result[i] = substitutedRti;\n      }\n      return changed ? result : rtiArray;\n    }",
-        "type": "Object? Function(Object?,Object?,Object?,int)"
+        "type": "Object? Function(Object?,Object?,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteFunctionParameters": {
         "id": "function/dart:_rti::_substituteFunctionParameters",
@@ -14921,7 +15126,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -14943,7 +15148,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteFunctionParameters(universe, functionParameters, typeArguments, depth) {\n      var result,\n        requiredPositional = functionParameters._requiredPositional,\n        substitutedRequiredPositional = A._substituteArray(universe, requiredPositional, typeArguments, depth),\n        optionalPositional = functionParameters._optionalPositional,\n        substitutedOptionalPositional = A._substituteArray(universe, optionalPositional, typeArguments, depth),\n        named = functionParameters._named,\n        substitutedNamed = A._substituteNamed(universe, named, typeArguments, depth);\n      if (substitutedRequiredPositional === requiredPositional && substitutedOptionalPositional === optionalPositional && substitutedNamed === named)\n        return functionParameters;\n      result = new A._FunctionParameters();\n      result._requiredPositional = substitutedRequiredPositional;\n      result._optionalPositional = substitutedOptionalPositional;\n      result._named = substitutedNamed;\n      return result;\n    }",
-        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)"
+        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_substituteNamed": {
         "id": "function/dart:_rti::_substituteNamed",
@@ -14964,7 +15170,7 @@
         "parameters": [
           {
             "name": "universe",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object?"
           },
           {
@@ -14986,7 +15192,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_substituteNamed(universe, namedArray, typeArguments, depth) {\n      var changed, i, t1, t2, rti, substitutedRti,\n        $length = namedArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; i += 3) {\n        t1 = namedArray[i];\n        t2 = namedArray[i + 1];\n        rti = namedArray[i + 2];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result.splice(i, 3, t1, t2, substitutedRti);\n      }\n      return changed ? result : namedArray;\n    }",
-        "type": "Object? Function(Object?,Object?,Object?,int)"
+        "type": "Object? Function(Object?,Object?,Object?,int)",
+        "functionKind": 0
       },
       "dart:_rti::_theUniverse": {
         "id": "function/dart:_rti::_theUniverse",
@@ -15006,9 +15213,10 @@
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 10,
+        "inlinedCount": 9,
         "code": "",
-        "type": "Object? Function()"
+        "type": "Object? Function()",
+        "functionKind": 0
       },
       "dart:_rti::_unminifyOrTag": {
         "id": "function/dart:_rti::_unminifyOrTag",
@@ -15036,7 +15244,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:_rti::closureFunctionType": {
         "id": "function/dart:_rti::closureFunctionType",
@@ -15064,35 +15273,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "closureFunctionType(closure) {\n      var signature = closure.$signature;\n      if (signature != null) {\n        if (typeof signature == \"number\")\n          return A.getTypeFromTypesTable(signature);\n        return closure.$signature();\n      }\n      return null;\n    }",
-        "type": "Rti? Function(Object?)"
-      },
-      "dart:_rti::createRuntimeType": {
-        "id": "function/dart:_rti::createRuntimeType",
-        "kind": "function",
-        "name": "createRuntimeType",
-        "size": 604,
-        "outputUnit": "outputUnit/main",
-        "parent": "library/dart:_rti::",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "Type",
-        "inferredReturnType": "[exact=_Type]",
-        "parameters": [
-          {
-            "name": "rti",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Rti"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "createRuntimeType(rti) {\n      var recipe, starErasedRecipe, starErasedRti,\n        type = rti._cachedRuntimeType;\n      if (type != null)\n        return type;\n      recipe = rti._canonicalRecipe;\n      starErasedRecipe = recipe.replace(/\\*/g, \"\");\n      if (starErasedRecipe === recipe)\n        return rti._cachedRuntimeType = new A._Type(rti);\n      starErasedRti = A._Universe_eval(init.typeUniverse, starErasedRecipe, true);\n      type = starErasedRti._cachedRuntimeType;\n      return rti._cachedRuntimeType = type == null ? starErasedRti._cachedRuntimeType = new A._Type(starErasedRti) : type;\n    }",
-        "type": "Type Function(Rti)"
+        "type": "Rti? Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::evalInInstance": {
         "id": "function/dart:_rti::evalInInstance",
@@ -15109,7 +15291,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "instance",
@@ -15118,14 +15300,15 @@
           },
           {
             "name": "recipe",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Rti Function(Object?,String)"
+        "type": "Rti Function(Object?,String)",
+        "functionKind": 0
       },
       "dart:_rti::findType": {
         "id": "function/dart:_rti::findType",
@@ -15142,7 +15325,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "recipe",
@@ -15153,7 +15336,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "findType(recipe) {\n      return A._Universe_eval(init.typeUniverse, recipe, false);\n    }",
-        "type": "Rti Function(String)"
+        "type": "Rti Function(String)",
+        "functionKind": 0
       },
       "dart:_rti::getTypeFromTypesTable": {
         "id": "function/dart:_rti::getTypeFromTypesTable",
@@ -15170,7 +15354,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "index",
@@ -15181,7 +15365,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "getTypeFromTypesTable(index) {\n      var rti,\n        table = init.types,\n        type = table[index];\n      if (typeof type == \"string\") {\n        rti = A._Universe_eval(init.typeUniverse, type, false);\n        table[index] = rti;\n        return rti;\n      }\n      return type;\n    }",
-        "type": "Rti Function(int)"
+        "type": "Rti Function(int)",
+        "functionKind": 0
       },
       "dart:_rti::instanceOrFunctionType": {
         "id": "function/dart:_rti::instanceOrFunctionType",
@@ -15198,7 +15383,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -15214,7 +15399,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "instanceOrFunctionType(object, testRti) {\n      var rti;\n      if (A.Rti__isUnionOfFunctionType(testRti))\n        if (object instanceof A.Closure) {\n          rti = A.closureFunctionType(object);\n          if (rti != null)\n            return rti;\n        }\n      return A.instanceType(object);\n    }",
-        "type": "Rti Function(Object?,Rti)"
+        "type": "Rti Function(Object?,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::instanceType": {
         "id": "function/dart:_rti::instanceType",
@@ -15231,7 +15417,7 @@
           "external": false
         },
         "returnType": "Rti",
-        "inferredReturnType": "[null|exact=Rti]",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
             "name": "object",
@@ -15242,7 +15428,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "instanceType(object) {\n      var rti;\n      if (object instanceof A.Object) {\n        rti = object.$ti;\n        return rti != null ? rti : A._instanceTypeFromConstructor(object);\n      }\n      if (Array.isArray(object))\n        return A._arrayInstanceType(object);\n      return A._instanceTypeFromConstructor(J.getInterceptor$(object));\n    }",
-        "type": "Rti Function(Object?)"
+        "type": "Rti Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::instanceTypeName": {
         "id": "function/dart:_rti::instanceTypeName",
@@ -15259,7 +15446,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -15270,7 +15457,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:_rti::isBottomType": {
         "id": "function/dart:_rti::isBottomType",
@@ -15291,14 +15479,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isFunctionType": {
         "id": "function/dart:_rti::isFunctionType",
@@ -15319,14 +15508,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isJsFunctionType": {
         "id": "function/dart:_rti::isJsFunctionType",
@@ -15347,14 +15537,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isLegacyObjectType": {
         "id": "function/dart:_rti::isLegacyObjectType",
@@ -15375,14 +15566,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 7,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullType": {
         "id": "function/dart:_rti::isNullType",
@@ -15403,14 +15595,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 8,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullable": {
         "id": "function/dart:_rti::isNullable",
@@ -15438,7 +15631,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "isNullable(t) {\n      var t1,\n        kind = t._kind;\n      if (!(t === type$.Null || t === type$.JSNull))\n        if (!A.isStrongTopType(t))\n          if (kind !== 7)\n            if (!(kind === 6 && A.isNullable(t._primary)))\n              t1 = kind === 8 && A.isNullable(t._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isNullableObjectType": {
         "id": "function/dart:_rti::isNullableObjectType",
@@ -15459,14 +15653,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isObjectType": {
         "id": "function/dart:_rti::isObjectType",
@@ -15487,14 +15682,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 10,
         "code": "",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isStrongTopType": {
         "id": "function/dart:_rti::isStrongTopType",
@@ -15515,14 +15711,15 @@
         "parameters": [
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 1,
         "code": "isStrongTopType(t) {\n      var kind = t._kind;\n      return kind === 2 || kind === 3 || kind === 4 || kind === 5 || t === type$.nullable_Object;\n    }",
-        "type": "bool Function(Rti)"
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isSubtype": {
         "id": "function/dart:_rti::isSubtype",
@@ -15548,25 +15745,26 @@
           },
           {
             "name": "s",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           },
           {
             "name": "t",
-            "type": "[null|exact=Rti]",
+            "type": "[exact=Rti]",
             "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Object?,Rti,Rti)"
+        "type": "bool Function(Object?,Rti,Rti)",
+        "functionKind": 0
       },
       "dart:_rti::isTopType": {
         "id": "function/dart:_rti::isTopType",
         "kind": "function",
         "name": "isTopType",
-        "size": 225,
+        "size": 212,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_rti::",
         "children": [],
@@ -15587,8 +15785,9 @@
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 5,
-        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
-        "type": "bool Function(Rti)"
+        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = false;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)",
+        "functionKind": 0
       },
       "dart:async::AsyncError.AsyncError": {
         "id": "function/dart:async::AsyncError.AsyncError",
@@ -15609,7 +15808,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -15621,7 +15820,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "AsyncError$(error, stackTrace) {\n      var t1 = A.checkNotNullable(error, \"error\", type$.Object);\n      return new A.AsyncError(t1, stackTrace == null ? A.AsyncError_defaultStackTrace(error) : stackTrace);\n    }",
-        "type": "dynamic Function(Object,StackTrace?)"
+        "type": "dynamic Function(Object,StackTrace?)",
+        "functionKind": 3
       },
       "dart:async::AsyncError.defaultStackTrace": {
         "id": "function/dart:async::AsyncError.defaultStackTrace",
@@ -15642,14 +15842,15 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "AsyncError_defaultStackTrace(error) {\n      var stackTrace;\n      if (type$.Error._is(error)) {\n        stackTrace = error.get$stackTrace();\n        if (stackTrace != null)\n          return stackTrace;\n      }\n      return B.C__StringStackTrace;\n    }",
-        "type": "StackTrace Function(Object)"
+        "type": "StackTrace Function(Object)",
+        "functionKind": 0
       },
       "dart:async::AsyncError.toString": {
         "id": "function/dart:async::AsyncError.toString",
@@ -15671,7 +15872,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return A.S(this.error);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:async::Completer.Completer": {
         "id": "function/dart:async::Completer.Completer",
@@ -15693,7 +15895,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Completer<#A> Function<#A extends Object?>()"
+        "type": "Completer<#A> Function<#A extends Object?>()",
+        "functionKind": 3
       },
       "dart:async::DeferredLoadException.DeferredLoadException": {
         "id": "function/dart:async::DeferredLoadException.DeferredLoadException",
@@ -15721,7 +15924,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "DeferredLoadException$(message) {\n      return new A.DeferredLoadException(message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:async::DeferredLoadException.toString": {
         "id": "function/dart:async::DeferredLoadException.toString",
@@ -15743,7 +15947,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"DeferredLoadException: '\" + this._s + \"'\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:async::Future.Future.error": {
         "id": "function/dart:async::Future.Future.error",
@@ -15776,13 +15981,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Future<#A> Function<#A extends Object?>(Object,[StackTrace?])"
+        "type": "Future<#A> Function<#A extends Object?>(Object,[StackTrace?])",
+        "functionKind": 3
       },
       "dart:async::Future.Future.value": {
         "id": "function/dart:async::Future.Future.value",
         "kind": "function",
         "name": "Future.value",
-        "size": 162,
+        "size": 212,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::Future",
         "children": [],
@@ -15803,14 +16009,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Future_Future$value(value, $T) {\n      var t1 = new A._Future($.Zone__current, $T._eval$1(\"_Future<0>\"));\n      t1._asyncComplete$1(value);\n      return t1;\n    }",
-        "type": "Future<#A> Function<#A extends Object?>([FutureOr<#A>?])"
+        "code": "Future_Future$value(value, $T) {\n      var t1, t2;\n      $T._as(value);\n      t1 = value;\n      t2 = new A._Future($.Zone__current, $T._eval$1(\"_Future<0>\"));\n      t2._asyncComplete$1(t1);\n      return t2;\n    }",
+        "type": "Future<#A> Function<#A extends Object?>([FutureOr<#A>?])",
+        "functionKind": 3
       },
       "dart:async::Future.wait": {
         "id": "function/dart:async::Future.wait",
         "kind": "function",
         "name": "wait",
-        "size": 3766,
+        "size": 3788,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::Future",
         "children": [
@@ -15834,8 +16041,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Future_wait(futures, $T) {\n      var error, stackTrace, handleError, future, pos, e, st, t2, t3, _i, t4, exception, _box_0 = {}, cleanUp = null,\n        eagerError = false,\n        t1 = $T._eval$1(\"_Future<List<0>>\"),\n        _future = new A._Future($.Zone__current, t1);\n      _box_0.values = null;\n      _box_0.remaining = 0;\n      error = A._Cell$named(\"error\");\n      stackTrace = A._Cell$named(\"stackTrace\");\n      handleError = new A.Future_wait_handleError(_box_0, cleanUp, eagerError, _future, error, stackTrace);\n      try {\n        for (t2 = futures.length, t3 = type$.Null, _i = 0, t4 = 0; _i < futures.length; futures.length === t2 || (0, A.throwConcurrentModificationError)(futures), ++_i) {\n          future = futures[_i];\n          pos = t4;\n          future.then$1$2$onError(new A.Future_wait_closure(_box_0, pos, _future, cleanUp, eagerError, error, stackTrace, $T), handleError, t3);\n          t4 = ++_box_0.remaining;\n        }\n        if (t4 === 0) {\n          t2 = _future;\n          t2._completeWithValue$1(A._setArrayType([], $T._eval$1(\"JSArray<0>\")));\n          return t2;\n        }\n        _box_0.values = A.List_List$filled(t4, null, $T._eval$1(\"0?\"));\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        st = A.getTraceFromException(exception);\n        if (_box_0.remaining === 0 || A.boolConversionCheck(eagerError)) {\n          error = e;\n          stackTrace = st;\n          A.checkNotNullable(error, \"error\", type$.Object);\n          $.Zone__current !== B.C__RootZone;\n          if (stackTrace == null)\n            stackTrace = A.AsyncError_defaultStackTrace(error);\n          t1 = new A._Future($.Zone__current, t1);\n          t1._asyncCompleteError$2(error, stackTrace);\n          return t1;\n        } else {\n          error._value = e;\n          stackTrace._value = st;\n        }\n      }\n      return _future;\n    }",
-        "type": "Future<List<#A>> Function<#A extends Object?>(Iterable<Future<#A>>,{void Function(#A)? cleanUp,bool eagerError})"
+        "code": "Future_wait(futures, $T) {\n      var error, stackTrace, handleError, future, pos, e, st, t2, t3, _i, t4, exception, _box_0 = {}, cleanUp = null,\n        eagerError = false,\n        t1 = $T._eval$1(\"_Future<List<0>>\"),\n        _future = new A._Future($.Zone__current, t1);\n      _box_0.values = null;\n      _box_0.remaining = 0;\n      error = A._Cell$named(\"error\");\n      stackTrace = A._Cell$named(\"stackTrace\");\n      handleError = new A.Future_wait_handleError(_box_0, cleanUp, eagerError, _future, error, stackTrace);\n      try {\n        for (t2 = futures.length, t3 = type$.Null, _i = 0, t4 = 0; _i < futures.length; futures.length === t2 || (0, A.throwConcurrentModificationError)(futures), ++_i) {\n          future = futures[_i];\n          pos = t4;\n          future.then$1$2$onError(new A.Future_wait_closure(_box_0, pos, _future, cleanUp, eagerError, error, stackTrace, $T), handleError, t3);\n          t4 = ++_box_0.remaining;\n        }\n        if (t4 === 0) {\n          t2 = _future;\n          t2._completeWithValue$1(A._setArrayType([], $T._eval$1(\"JSArray<0>\")));\n          return t2;\n        }\n        _box_0.values = A.List_List$filled(t4, null, $T._eval$1(\"0?\"));\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        st = A.getTraceFromException(exception);\n        if (_box_0.remaining === 0 || A.boolConversionCheck(eagerError)) {\n          t2 = e;\n          stackTrace = st;\n          A.checkNotNullable(t2, \"error\", type$.Object);\n          $.Zone__current !== B.C__RootZone;\n          if (stackTrace == null)\n            stackTrace = A.AsyncError_defaultStackTrace(t2);\n          t1 = new A._Future($.Zone__current, t1);\n          t1._asyncCompleteError$2(t2, stackTrace);\n          return t1;\n        } else {\n          error._value = e;\n          stackTrace._value = st;\n        }\n      }\n      return _future;\n    }",
+        "type": "Future<List<#A>> Function<#A extends Object?>(Iterable<Future<#A>>,{void Function(#A)? cleanUp,bool eagerError})",
+        "functionKind": 0
       },
       "dart:async::Future.wait.Future_wait_closure.call": {
         "id": "function/dart:async::Future.wait.Future_wait_closure.call",
@@ -15863,13 +16071,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(value) {\n      var valueList, t2, _this = this,\n        t1 = _this.T;\n      t1._as(value);\n      t2 = _this._box_0;\n      --t2.remaining;\n      valueList = t2.values;\n      if (valueList != null) {\n        J.$indexSet$a(valueList, _this.pos, value);\n        if (t2.remaining === 0)\n          _this._future._completeWithValue$1(A.List_List$from(valueList, t1));\n      } else if (t2.remaining === 0 && !_this.eagerError)\n        _this._future._completeError$2(_this.error._readLocal$0(), _this.stackTrace._readLocal$0());\n    }",
-        "type": "Null Function(wait.T)"
+        "type": "Null Function(wait.T)",
+        "functionKind": 2
       },
       "dart:async::Future.wait.Future_wait_handleError.call": {
         "id": "function/dart:async::Future.wait.Future_wait_handleError.call",
         "kind": "function",
         "name": "call",
-        "size": 608,
+        "size": 642,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::Future.wait.Future_wait_handleError",
         "children": [],
@@ -15895,8 +16104,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2(theError, theStackTrace) {\n      var t1, t2, _this = this;\n      type$.StackTrace._as(theStackTrace);\n      t1 = _this._box_0;\n      t2 = --t1.remaining;\n      if (t1.values != null) {\n        t1.values = null;\n        if (t1.remaining === 0 || _this.eagerError)\n          _this._future._completeError$2(theError, theStackTrace);\n        else {\n          _this.error._value = theError;\n          _this.stackTrace._value = theStackTrace;\n        }\n      } else if (t2 === 0 && !_this.eagerError)\n        _this._future._completeError$2(_this.error._readLocal$0(), _this.stackTrace._readLocal$0());\n    }",
-        "type": "void Function(Object,StackTrace)"
+        "code": "call$2(theError, theStackTrace) {\n      var t1, t2, _this = this;\n      type$.Object._as(theError);\n      type$.StackTrace._as(theStackTrace);\n      t1 = _this._box_0;\n      t2 = --t1.remaining;\n      if (t1.values != null) {\n        t1.values = null;\n        if (t1.remaining === 0 || _this.eagerError)\n          _this._future._completeError$2(theError, theStackTrace);\n        else {\n          _this.error._value = theError;\n          _this.stackTrace._value = theStackTrace;\n        }\n      } else if (t2 === 0 && !_this.eagerError)\n        _this._future._completeError$2(_this.error._readLocal$0(), _this.stackTrace._readLocal$0());\n    }",
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::StreamIterator.StreamIterator": {
         "id": "function/dart:async::StreamIterator.StreamIterator",
@@ -15924,7 +16134,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "StreamIterator_StreamIterator(stream, $T) {\n      A.checkNotNullable(stream, \"stream\", type$.Object);\n      return new A._StreamIterator($T._eval$1(\"_StreamIterator<0>\"));\n    }",
-        "type": "StreamIterator<#A> Function<#A extends Object?>(Stream<#A>)"
+        "type": "StreamIterator<#A> Function<#A extends Object?>(Stream<#A>)",
+        "functionKind": 3
       },
       "dart:async::Timer._createTimer": {
         "id": "function/dart:async::Timer._createTimer",
@@ -15957,7 +16168,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Timer Function(Duration,void Function())"
+        "type": "Timer Function(Duration,void Function())",
+        "functionKind": 0
       },
       "dart:async::Zone._enter": {
         "id": "function/dart:async::Zone._enter",
@@ -15985,7 +16197,8 @@
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 4,
         "code": "",
-        "type": "_Zone Function(_Zone)"
+        "type": "_Zone Function(_Zone)",
+        "functionKind": 0
       },
       "dart:async::Zone._leave": {
         "id": "function/dart:async::Zone._leave",
@@ -16013,7 +16226,8 @@
         "sideEffects": "SideEffects(reads nothing; writes static)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function(_Zone)"
+        "type": "void Function(_Zone)",
+        "functionKind": 0
       },
       "dart:async::Zone.current": {
         "id": "function/dart:async::Zone.current",
@@ -16035,7 +16249,8 @@
         "sideEffects": "SideEffects(reads static; writes nothing)",
         "inlinedCount": 7,
         "code": "",
-        "type": "Zone Function()"
+        "type": "Zone Function()",
+        "functionKind": 0
       },
       "dart:async::_AsyncAwaitCompleter._AsyncAwaitCompleter": {
         "id": "function/dart:async::_AsyncAwaitCompleter._AsyncAwaitCompleter",
@@ -16057,13 +16272,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:async::_AsyncAwaitCompleter.complete": {
         "id": "function/dart:async::_AsyncAwaitCompleter.complete",
         "kind": "function",
         "name": "complete",
-        "size": 395,
+        "size": 457,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_AsyncAwaitCompleter",
         "children": [],
@@ -16084,14 +16300,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "complete$1(value) {\n      var t2, _this = this,\n        t1 = _this.$ti;\n      t1._eval$1(\"1/?\")._as(value);\n      if (!_this.isSync)\n        _this._future._asyncComplete$1(value);\n      else {\n        t2 = _this._future;\n        if (t1._eval$1(\"Future<1>\")._is(value))\n          t2._chainFuture$1(value);\n        else\n          t2._completeWithValue$1(t1._precomputed1._as(value));\n      }\n    }",
-        "type": "void Function([Object?])"
+        "code": "complete$1(value) {\n      var t2, _this = this,\n        t1 = _this.$ti;\n      t1._eval$1(\"1/?\")._as(value);\n      if (value == null)\n        t1._precomputed1._as(value);\n      if (!_this.isSync)\n        _this._future._asyncComplete$1(value);\n      else {\n        t2 = _this._future;\n        if (t1._eval$1(\"Future<1>\")._is(value))\n          t2._chainFuture$1(value);\n        else\n          t2._completeWithValue$1(t1._precomputed1._as(value));\n      }\n    }",
+        "type": "void Function([Object?])",
+        "functionKind": 2
       },
       "dart:async::_AsyncAwaitCompleter.completeError": {
         "id": "function/dart:async::_AsyncAwaitCompleter.completeError",
         "kind": "function",
         "name": "completeError",
-        "size": 250,
+        "size": 170,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_AsyncAwaitCompleter",
         "children": [],
@@ -16106,19 +16323,20 @@
         "parameters": [
           {
             "name": "e",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "st",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "completeError$2(e, st) {\n      var t1;\n      if (st == null)\n        st = A.AsyncError_defaultStackTrace(e);\n      t1 = this._future;\n      if (this.isSync)\n        t1._completeError$2(e, st);\n      else\n        t1._asyncCompleteError$2(e, st);\n    }",
-        "type": "void Function(Object,[StackTrace?])"
+        "code": "completeError$2(e, st) {\n      var t1 = this._future;\n      if (this.isSync)\n        t1._completeError$2(e, st);\n      else\n        t1._asyncCompleteError$2(e, st);\n    }",
+        "type": "void Function(Object,[StackTrace?])",
+        "functionKind": 2
       },
       "dart:async::_AsyncAwaitCompleter.future": {
         "id": "function/dart:async::_AsyncAwaitCompleter.future",
@@ -16140,7 +16358,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Future<_AsyncAwaitCompleter.T> Function()"
+        "type": "Future<_AsyncAwaitCompleter.T> Function()",
+        "functionKind": 2
       },
       "dart:async::_AsyncCallbackEntry._AsyncCallbackEntry": {
         "id": "function/dart:async::_AsyncCallbackEntry._AsyncCallbackEntry",
@@ -16168,7 +16387,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function(void Function())"
+        "type": "dynamic Function(void Function())",
+        "functionKind": 3
       },
       "dart:async::_AsyncCompleter._AsyncCompleter": {
         "id": "function/dart:async::_AsyncCompleter._AsyncCompleter",
@@ -16190,7 +16410,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:async::_AsyncCompleter._completeError": {
         "id": "function/dart:async::_AsyncCompleter._completeError",
@@ -16211,7 +16432,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -16223,7 +16444,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_AsyncCompleter.complete": {
         "id": "function/dart:async::_AsyncCompleter.complete",
@@ -16251,7 +16473,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "complete$1(value) {\n      var t2,\n        t1 = this.$ti;\n      t1._eval$1(\"1/?\")._as(value);\n      t2 = this.future;\n      if ((t2._state & 30) !== 0)\n        throw A.wrapException(A.StateError$(\"Future already completed\"));\n      t2._asyncComplete$1(t1._eval$1(\"1/\")._as(value));\n    }",
-        "type": "void Function([Object?])"
+        "type": "void Function([Object?])",
+        "functionKind": 2
       },
       "dart:async::_AsyncRun._initializeScheduleImmediate": {
         "id": "function/dart:async::_AsyncRun._initializeScheduleImmediate",
@@ -16276,7 +16499,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_AsyncRun__initializeScheduleImmediate() {\n      var div, span, t1 = {};\n      if (self.scheduleImmediate != null)\n        return A.async__AsyncRun__scheduleImmediateJsOverride$closure();\n      if (self.MutationObserver != null && self.document != null) {\n        div = self.document.createElement(\"div\");\n        span = self.document.createElement(\"span\");\n        t1.storedCallback = null;\n        new self.MutationObserver(A.convertDartClosureToJS(new A._AsyncRun__initializeScheduleImmediate_internalCallback(t1), 1)).observe(div, {childList: true});\n        return new A._AsyncRun__initializeScheduleImmediate_closure(t1, div, span);\n      } else if (self.setImmediate != null)\n        return A.async__AsyncRun__scheduleImmediateWithSetImmediate$closure();\n      return A.async__AsyncRun__scheduleImmediateWithTimer$closure();\n    }",
-        "type": "Function Function()"
+        "type": "Function Function()",
+        "functionKind": 0
       },
       "dart:async::_AsyncRun._initializeScheduleImmediate._AsyncRun__initializeScheduleImmediate_closure.call": {
         "id": "function/dart:async::_AsyncRun._initializeScheduleImmediate._AsyncRun__initializeScheduleImmediate_closure.call",
@@ -16304,7 +16528,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(callback) {\n      var t1, t2;\n      this._box_0.storedCallback = type$.void_Function._as(callback);\n      t1 = this.div;\n      t2 = this.span;\n      t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);\n    }",
-        "type": "Null Function(void Function())"
+        "type": "Null Function(void Function())",
+        "functionKind": 2
       },
       "dart:async::_AsyncRun._initializeScheduleImmediate._AsyncRun__initializeScheduleImmediate_internalCallback.call": {
         "id": "function/dart:async::_AsyncRun._initializeScheduleImmediate._AsyncRun__initializeScheduleImmediate_internalCallback.call",
@@ -16332,7 +16557,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(_) {\n      var t1 = this._box_0,\n        f = t1.storedCallback;\n      t1.storedCallback = null;\n      f.call$0();\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:async::_AsyncRun._scheduleImmediate": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediate",
@@ -16360,7 +16586,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_AsyncRun._scheduleImmediateJsOverride": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediateJsOverride",
@@ -16390,7 +16617,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_AsyncRun__scheduleImmediateJsOverride(callback) {\n      self.scheduleImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateJsOverride_internalCallback(type$.void_Function._as(callback)), 0));\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateJsOverride$closure\", \"_AsyncRun__scheduleImmediateJsOverride\", 2);\n",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_AsyncRun._scheduleImmediateJsOverride._AsyncRun__scheduleImmediateJsOverride_internalCallback.call": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediateJsOverride._AsyncRun__scheduleImmediateJsOverride_internalCallback.call",
@@ -16412,7 +16640,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.callback.call$0();\n    }",
-        "type": "Null Function()"
+        "type": "Null Function()",
+        "functionKind": 2
       },
       "dart:async::_AsyncRun._scheduleImmediateWithSetImmediate": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediateWithSetImmediate",
@@ -16442,7 +16671,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_AsyncRun__scheduleImmediateWithSetImmediate(callback) {\n      self.setImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(type$.void_Function._as(callback)), 0));\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateWithSetImmediate$closure\", \"_AsyncRun__scheduleImmediateWithSetImmediate\", 2);\n",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_AsyncRun._scheduleImmediateWithSetImmediate._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback.call": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediateWithSetImmediate._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback.call",
@@ -16464,7 +16694,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.callback.call$0();\n    }",
-        "type": "Null Function()"
+        "type": "Null Function()",
+        "functionKind": 2
       },
       "dart:async::_AsyncRun._scheduleImmediateWithTimer": {
         "id": "function/dart:async::_AsyncRun._scheduleImmediateWithTimer",
@@ -16492,7 +16723,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_AsyncRun__scheduleImmediateWithTimer(callback) {\n      type$.void_Function._as(callback);\n      A._TimerImpl$(0, callback);\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateWithTimer$closure\", \"_AsyncRun__scheduleImmediateWithTimer\", 2);\n",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_Completer.completeError": {
         "id": "function/dart:async::_Completer.completeError",
@@ -16513,7 +16745,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -16525,7 +16757,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "completeError$2(error, stackTrace) {\n      var t1;\n      A.checkNotNullable(error, \"error\", type$.Object);\n      t1 = this.future;\n      if ((t1._state & 30) !== 0)\n        throw A.wrapException(A.StateError$(\"Future already completed\"));\n      if (stackTrace == null)\n        stackTrace = A.AsyncError_defaultStackTrace(error);\n      t1._asyncCompleteError$2(error, stackTrace);\n    }",
-        "type": "void Function(Object,[StackTrace?])"
+        "type": "void Function(Object,[StackTrace?])",
+        "functionKind": 2
       },
       "dart:async::_Future._Future": {
         "id": "function/dart:async::_Future._Future",
@@ -16547,7 +16780,8 @@
         "sideEffects": "SideEffects(reads static; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:async::_Future._Future.immediate": {
         "id": "function/dart:async::_Future._Future.immediate",
@@ -16575,7 +16809,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(FutureOr<_Future.T>)"
+        "type": "dynamic Function(FutureOr<_Future.T>)",
+        "functionKind": 3
       },
       "dart:async::_Future._Future.immediateError": {
         "id": "function/dart:async::_Future._Future.immediateError",
@@ -16608,7 +16843,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic,StackTrace)"
+        "type": "dynamic Function(dynamic,StackTrace)",
+        "functionKind": 3
       },
       "dart:async::_Future._addListener": {
         "id": "function/dart:async::_Future._addListener",
@@ -16638,7 +16874,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_addListener$1(listener) {\n      var source, _this = this,\n        t1 = _this._state;\n      if (t1 <= 3) {\n        listener._nextListener = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners);\n        _this._resultOrListeners = listener;\n      } else {\n        if ((t1 & 4) !== 0) {\n          source = type$._Future_dynamic._as(_this._resultOrListeners);\n          if ((source._state & 24) === 0) {\n            source._addListener$1(listener);\n            return;\n          }\n          _this._cloneResult$1(source);\n        }\n        A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__addListener_closure(_this, listener)));\n      }\n    }",
-        "type": "void Function(_FutureListener<dynamic,dynamic>)"
+        "type": "void Function(_FutureListener<dynamic,dynamic>)",
+        "functionKind": 2
       },
       "dart:async::_Future._addListener._Future__addListener_closure.call": {
         "id": "function/dart:async::_Future._addListener._Future__addListener_closure.call",
@@ -16660,7 +16897,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      A._Future__propagateToListeners(this.$this, this.listener);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._asyncComplete": {
         "id": "function/dart:async::_Future._asyncComplete",
@@ -16688,7 +16926,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncComplete$1(value) {\n      var t1 = this.$ti;\n      t1._eval$1(\"1/\")._as(value);\n      if (t1._eval$1(\"Future<1>\")._is(value)) {\n        this._chainFuture$1(value);\n        return;\n      }\n      this._asyncCompleteWithValue$1(t1._precomputed1._as(value));\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_Future._asyncCompleteError": {
         "id": "function/dart:async::_Future._asyncCompleteError",
@@ -16711,7 +16950,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -16723,7 +16962,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncCompleteError$2(error, stackTrace) {\n      type$.StackTrace._as(stackTrace);\n      this._state ^= 2;\n      A._rootScheduleMicrotask(null, null, this._zone, type$.void_Function._as(new A._Future__asyncCompleteError_closure(this, error, stackTrace)));\n    }",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_Future._asyncCompleteError._Future__asyncCompleteError_closure.call": {
         "id": "function/dart:async::_Future._asyncCompleteError._Future__asyncCompleteError_closure.call",
@@ -16745,7 +16985,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.$this._completeError$2(this.error, this.stackTrace);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._asyncCompleteWithValue": {
         "id": "function/dart:async::_Future._asyncCompleteWithValue",
@@ -16775,7 +17016,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncCompleteWithValue$1(value) {\n      var _this = this;\n      _this.$ti._precomputed1._as(value);\n      _this._state ^= 2;\n      A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__asyncCompleteWithValue_closure(_this, value)));\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_Future._asyncCompleteWithValue._Future__asyncCompleteWithValue_closure.call": {
         "id": "function/dart:async::_Future._asyncCompleteWithValue._Future__asyncCompleteWithValue_closure.call",
@@ -16797,7 +17039,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.$this._completeWithValue$1(this.value);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._chainCoreFuture": {
         "id": "function/dart:async::_Future._chainCoreFuture",
@@ -16830,13 +17073,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_Future__chainCoreFuture(source, target) {\n      var t1, t2, listeners;\n      for (t1 = type$._Future_dynamic; t2 = source._state, (t2 & 4) !== 0;)\n        source = t1._as(source._resultOrListeners);\n      if ((t2 & 24) !== 0) {\n        listeners = target._removeListeners$0();\n        target._cloneResult$1(source);\n        A._Future__propagateToListeners(target, listeners);\n      } else {\n        listeners = type$.nullable__FutureListener_dynamic_dynamic._as(target._resultOrListeners);\n        target._state = target._state & 1 | 4;\n        target._resultOrListeners = source;\n        source._prependListeners$1(listeners);\n      }\n    }",
-        "type": "void Function(_Future<dynamic>,_Future<dynamic>)"
+        "type": "void Function(_Future<dynamic>,_Future<dynamic>)",
+        "functionKind": 0
       },
       "dart:async::_Future._chainForeignFuture": {
         "id": "function/dart:async::_Future._chainForeignFuture",
         "kind": "function",
         "name": "_chainForeignFuture",
-        "size": 1779,
+        "size": 1797,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_Future",
         "children": [
@@ -16855,14 +17099,15 @@
         "parameters": [
           {
             "name": "source",
-            "type": "[null|exact=_Future]",
+            "type": "[exact=_Future]",
             "declaredType": "Future<dynamic>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_chainForeignFuture$1(source) {\n      var e, s, exception, _this = this;\n      _this._state ^= 2;\n      try {\n        source.then$1$2$onError(new A._Future__chainForeignFuture_closure(_this), new A._Future__chainForeignFuture_closure0(_this), type$.Null);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        A.scheduleMicrotask(new A._Future__chainForeignFuture_closure1(_this, e, s));\n      }\n    }",
-        "type": "void Function(Future<dynamic>)"
+        "type": "void Function(Future<dynamic>)",
+        "functionKind": 2
       },
       "dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call": {
         "id": "function/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call",
@@ -16890,13 +17135,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(value) {\n      var error, stackTrace, exception,\n        t1 = this.$this;\n      t1._state ^= 2;\n      try {\n        t1._completeWithValue$1(t1.$ti._precomputed1._as(value));\n      } catch (exception) {\n        error = A.unwrapException(exception);\n        stackTrace = A.getTraceFromException(exception);\n        t1._completeError$2(error, stackTrace);\n      }\n    }",
-        "type": "Null Function(dynamic)"
+        "type": "Null Function(dynamic)",
+        "functionKind": 2
       },
       "dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call%0": {
         "id": "function/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call%0",
         "kind": "function",
         "name": "call",
-        "size": 109,
+        "size": 127,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure%0",
         "children": [],
@@ -16922,8 +17168,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2(error, stackTrace) {\n      this.$this._completeError$2(error, type$.StackTrace._as(stackTrace));\n    }",
-        "type": "Null Function(Object,StackTrace)"
+        "code": "call$2(error, stackTrace) {\n      this.$this._completeError$2(type$.Object._as(error), type$.StackTrace._as(stackTrace));\n    }",
+        "type": "Null Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call%1": {
         "id": "function/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call%1",
@@ -16945,7 +17192,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.$this._completeError$2(this.e, this.s);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._chainFuture": {
         "id": "function/dart:async::_Future._chainFuture",
@@ -16975,7 +17223,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_chainFuture$1(value) {\n      var _this = this,\n        t1 = _this.$ti;\n      t1._eval$1(\"Future<1>\")._as(value);\n      if (t1._is(value)) {\n        if ((value._state & 16) !== 0) {\n          _this._state ^= 2;\n          A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__chainFuture_closure(_this, value)));\n        } else\n          A._Future__chainCoreFuture(value, _this);\n        return;\n      }\n      _this._chainForeignFuture$1(value);\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_Future._chainFuture._Future__chainFuture_closure.call": {
         "id": "function/dart:async::_Future._chainFuture._Future__chainFuture_closure.call",
@@ -16997,7 +17246,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      A._Future__chainCoreFuture(this.value, this.$this);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._chainSource": {
         "id": "function/dart:async::_Future._chainSource",
@@ -17014,12 +17264,13 @@
           "external": false
         },
         "returnType": "_Future<dynamic>",
-        "inferredReturnType": "[null|exact=_Future]",
+        "inferredReturnType": "[exact=_Future]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "_Future<dynamic> Function()"
+        "type": "_Future<dynamic> Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._clearPendingComplete": {
         "id": "function/dart:async::_Future._clearPendingComplete",
@@ -17041,7 +17292,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._cloneResult": {
         "id": "function/dart:async::_Future._cloneResult",
@@ -17069,7 +17321,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "_cloneResult$1(source) {\n      this._state = source._state & 30 | this._state & 1;\n      this._resultOrListeners = source._resultOrListeners;\n    }",
-        "type": "void Function(_Future<dynamic>)"
+        "type": "void Function(_Future<dynamic>)",
+        "functionKind": 2
       },
       "dart:async::_Future._completeError": {
         "id": "function/dart:async::_Future._completeError",
@@ -17090,7 +17343,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -17102,7 +17355,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_completeError$2(error, stackTrace) {\n      var listeners;\n      type$.StackTrace._as(stackTrace);\n      listeners = this._removeListeners$0();\n      this._setErrorObject$1(A.AsyncError$(error, stackTrace));\n      A._Future__propagateToListeners(this, listeners);\n    }",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_Future._completeWithValue": {
         "id": "function/dart:async::_Future._completeWithValue",
@@ -17130,7 +17384,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_completeWithValue$1(value) {\n      var listeners, _this = this;\n      _this.$ti._precomputed1._as(value);\n      listeners = _this._removeListeners$0();\n      _this._state = 8;\n      _this._resultOrListeners = value;\n      A._Future__propagateToListeners(_this, listeners);\n    }",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_Future._error": {
         "id": "function/dart:async::_Future._error",
@@ -17147,12 +17402,13 @@
           "external": false
         },
         "returnType": "AsyncError",
-        "inferredReturnType": "[null|exact=AsyncError]",
+        "inferredReturnType": "[exact=AsyncError]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 8,
         "code": "",
-        "type": "AsyncError Function()"
+        "type": "AsyncError Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._hasError": {
         "id": "function/dart:async::_Future._hasError",
@@ -17174,7 +17430,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._ignoreError": {
         "id": "function/dart:async::_Future._ignoreError",
@@ -17196,7 +17453,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._isChained": {
         "id": "function/dart:async::_Future._isChained",
@@ -17218,7 +17476,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._isComplete": {
         "id": "function/dart:async::_Future._isComplete",
@@ -17240,7 +17499,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._mayAddListener": {
         "id": "function/dart:async::_Future._mayAddListener",
@@ -17262,7 +17522,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._mayComplete": {
         "id": "function/dart:async::_Future._mayComplete",
@@ -17284,7 +17545,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._prependListeners": {
         "id": "function/dart:async::_Future._prependListeners",
@@ -17314,7 +17576,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_prependListeners$1(listeners) {\n      var t1, existingListeners, next, cursor, next0, source, _this = this, _box_0 = {};\n      _box_0.listeners = listeners;\n      if (listeners == null)\n        return;\n      t1 = _this._state;\n      if (t1 <= 3) {\n        existingListeners = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners);\n        _this._resultOrListeners = listeners;\n        if (existingListeners != null) {\n          next = listeners._nextListener;\n          for (cursor = listeners; next != null; cursor = next, next = next0)\n            next0 = next._nextListener;\n          cursor._nextListener = existingListeners;\n        }\n      } else {\n        if ((t1 & 4) !== 0) {\n          source = type$._Future_dynamic._as(_this._resultOrListeners);\n          if ((source._state & 24) === 0) {\n            source._prependListeners$1(listeners);\n            return;\n          }\n          _this._cloneResult$1(source);\n        }\n        _box_0.listeners = _this._reverseListeners$1(listeners);\n        A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__prependListeners_closure(_box_0, _this)));\n      }\n    }",
-        "type": "void Function(_FutureListener<dynamic,dynamic>?)"
+        "type": "void Function(_FutureListener<dynamic,dynamic>?)",
+        "functionKind": 2
       },
       "dart:async::_Future._prependListeners._Future__prependListeners_closure.call": {
         "id": "function/dart:async::_Future._prependListeners._Future__prependListeners_closure.call",
@@ -17336,13 +17599,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      A._Future__propagateToListeners(this.$this, this._box_0.listeners);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._propagateToListeners": {
         "id": "function/dart:async::_Future._propagateToListeners",
         "kind": "function",
         "name": "_propagateToListeners",
-        "size": 8434,
+        "size": 8083,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_Future",
         "children": [
@@ -17373,14 +17637,15 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Future__propagateToListeners(source, listeners) {\n      var t2, t3, t4, _box_0, t5, t6, hasError, asyncError, nextListener, nextListener0, sourceResult, t7, zone, oldZone, result, current, _box_1 = {},\n        t1 = _box_1.source = source;\n      for (t2 = type$.AsyncError, t3 = type$.nullable__FutureListener_dynamic_dynamic, t4 = type$.Future_dynamic; true;) {\n        _box_0 = {};\n        t5 = t1._state;\n        t6 = (t5 & 16) === 0;\n        hasError = !t6;\n        if (listeners == null) {\n          if (hasError && (t5 & 1) === 0) {\n            asyncError = t2._as(t1._resultOrListeners);\n            A._rootHandleError(asyncError.error, asyncError.stackTrace);\n          }\n          return;\n        }\n        _box_0.listener = listeners;\n        nextListener = listeners._nextListener;\n        for (t1 = listeners; nextListener != null; t1 = nextListener, nextListener = nextListener0) {\n          t1._nextListener = null;\n          A._Future__propagateToListeners(_box_1.source, t1);\n          _box_0.listener = nextListener;\n          nextListener0 = nextListener._nextListener;\n        }\n        t5 = _box_1.source;\n        sourceResult = t5._resultOrListeners;\n        _box_0.listenerHasError = hasError;\n        _box_0.listenerValueOrError = sourceResult;\n        if (t6) {\n          t7 = t1.state;\n          t7 = (t7 & 1) !== 0 || (t7 & 15) === 8;\n        } else\n          t7 = true;\n        if (t7) {\n          zone = t1.result._zone;\n          if (hasError) {\n            t5 = t5._zone === zone;\n            t5 = !(t5 || t5);\n          } else\n            t5 = false;\n          if (t5) {\n            t2._as(sourceResult);\n            A._rootHandleError(sourceResult.error, sourceResult.stackTrace);\n            return;\n          }\n          oldZone = $.Zone__current;\n          if (oldZone !== zone)\n            $.Zone__current = zone;\n          else\n            oldZone = null;\n          t1 = t1.state;\n          if ((t1 & 15) === 8)\n            new A._Future__propagateToListeners_handleWhenCompleteCallback(_box_0, _box_1, hasError).call$0();\n          else if (t6) {\n            if ((t1 & 1) !== 0)\n              new A._Future__propagateToListeners_handleValueCallback(_box_0, sourceResult).call$0();\n          } else if ((t1 & 2) !== 0)\n            new A._Future__propagateToListeners_handleError(_box_1, _box_0).call$0();\n          if (oldZone != null)\n            $.Zone__current = oldZone;\n          t1 = _box_0.listenerValueOrError;\n          if (t4._is(t1)) {\n            t5 = _box_0.listener.$ti;\n            t5 = t5._eval$1(\"Future<2>\")._is(t1) || !t5._rest[1]._is(t1);\n          } else\n            t5 = false;\n          if (t5) {\n            t4._as(t1);\n            result = _box_0.listener.result;\n            if (t1 instanceof A._Future)\n              if ((t1._state & 24) !== 0) {\n                current = t3._as(result._resultOrListeners);\n                result._resultOrListeners = null;\n                listeners = result._reverseListeners$1(current);\n                result._state = t1._state & 30 | result._state & 1;\n                result._resultOrListeners = t1._resultOrListeners;\n                _box_1.source = t1;\n                continue;\n              } else\n                A._Future__chainCoreFuture(t1, result);\n            else\n              result._chainForeignFuture$1(t1);\n            return;\n          }\n        }\n        result = _box_0.listener.result;\n        current = t3._as(result._resultOrListeners);\n        result._resultOrListeners = null;\n        listeners = result._reverseListeners$1(current);\n        t1 = _box_0.listenerHasError;\n        t5 = _box_0.listenerValueOrError;\n        if (!t1) {\n          result.$ti._precomputed1._as(t5);\n          result._state = 8;\n          result._resultOrListeners = t5;\n        } else {\n          t2._as(t5);\n          result._state = result._state & 1 | 16;\n          result._resultOrListeners = t5;\n        }\n        _box_1.source = result;\n        t1 = result;\n      }\n    }",
-        "type": "void Function(_Future<dynamic>,_FutureListener<dynamic,dynamic>?)"
+        "code": "_Future__propagateToListeners(source, listeners) {\n      var t2, t3, t4, _box_0, t5, t6, hasError, asyncError, nextListener, nextListener0, sourceResult, t7, zone, oldZone, result, current, _box_1 = {},\n        t1 = _box_1.source = source;\n      for (t2 = type$.AsyncError, t3 = type$.nullable__FutureListener_dynamic_dynamic, t4 = type$.Future_dynamic; true;) {\n        _box_0 = {};\n        t5 = t1._state;\n        t6 = (t5 & 16) === 0;\n        hasError = !t6;\n        if (listeners == null) {\n          if (hasError && (t5 & 1) === 0) {\n            asyncError = t2._as(t1._resultOrListeners);\n            A._rootHandleError(asyncError.error, asyncError.stackTrace);\n          }\n          return;\n        }\n        _box_0.listener = listeners;\n        nextListener = listeners._nextListener;\n        for (t1 = listeners; nextListener != null; t1 = nextListener, nextListener = nextListener0) {\n          t1._nextListener = null;\n          A._Future__propagateToListeners(_box_1.source, t1);\n          _box_0.listener = nextListener;\n          nextListener0 = nextListener._nextListener;\n        }\n        t5 = _box_1.source;\n        sourceResult = t5._resultOrListeners;\n        _box_0.listenerHasError = hasError;\n        _box_0.listenerValueOrError = sourceResult;\n        if (t6) {\n          t7 = t1.state;\n          t7 = (t7 & 1) !== 0 || (t7 & 15) === 8;\n        } else\n          t7 = true;\n        if (t7) {\n          zone = t1.result._zone;\n          if (hasError) {\n            t5 = t5._zone === zone;\n            t5 = !(t5 || t5);\n          } else\n            t5 = false;\n          if (t5) {\n            t2._as(sourceResult);\n            A._rootHandleError(sourceResult.error, sourceResult.stackTrace);\n            return;\n          }\n          oldZone = $.Zone__current;\n          if (oldZone !== zone)\n            $.Zone__current = zone;\n          else\n            oldZone = null;\n          t1 = t1.state;\n          if ((t1 & 15) === 8)\n            new A._Future__propagateToListeners_handleWhenCompleteCallback(_box_0, _box_1, hasError).call$0();\n          else if (t6) {\n            if ((t1 & 1) !== 0)\n              new A._Future__propagateToListeners_handleValueCallback(_box_0, sourceResult).call$0();\n          } else if ((t1 & 2) !== 0)\n            new A._Future__propagateToListeners_handleError(_box_1, _box_0).call$0();\n          if (oldZone != null)\n            $.Zone__current = oldZone;\n          t1 = _box_0.listenerValueOrError;\n          if (t4._is(t1)) {\n            t5 = _box_0.listener.$ti;\n            t5 = t5._eval$1(\"Future<2>\")._is(t1) || !t5._rest[1]._is(t1);\n          } else\n            t5 = false;\n          if (t5) {\n            t4._as(t1);\n            result = _box_0.listener.result;\n            if ((t1._state & 24) !== 0) {\n              current = t3._as(result._resultOrListeners);\n              result._resultOrListeners = null;\n              listeners = result._reverseListeners$1(current);\n              result._state = t1._state & 30 | result._state & 1;\n              result._resultOrListeners = t1._resultOrListeners;\n              _box_1.source = t1;\n              continue;\n            } else\n              A._Future__chainCoreFuture(t1, result);\n            return;\n          }\n        }\n        result = _box_0.listener.result;\n        current = t3._as(result._resultOrListeners);\n        result._resultOrListeners = null;\n        listeners = result._reverseListeners$1(current);\n        t1 = _box_0.listenerHasError;\n        t5 = _box_0.listenerValueOrError;\n        if (!t1) {\n          result.$ti._precomputed1._as(t5);\n          result._state = 8;\n          result._resultOrListeners = t5;\n        } else {\n          t2._as(t5);\n          result._state = result._state & 1 | 16;\n          result._resultOrListeners = t5;\n        }\n        _box_1.source = result;\n        t1 = result;\n      }\n    }",
+        "type": "void Function(_Future<dynamic>,_FutureListener<dynamic,dynamic>?)",
+        "functionKind": 0
       },
       "dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleError.call": {
         "id": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleError.call",
         "kind": "function",
         "name": "call",
-        "size": 911,
+        "size": 820,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleError",
         "children": [],
@@ -17395,8 +17660,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0() {\n      var asyncError, e, s, t1, exception, t2, t3, t4, _this = this;\n      try {\n        asyncError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t1 = _this._box_0;\n        if (A.boolConversionCheck(t1.listener.matchesErrorTest$1(asyncError)) && t1.listener.errorCallback != null) {\n          t1.listenerValueOrError = t1.listener.handleError$1(asyncError);\n          t1.listenerHasError = false;\n        }\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t2 = t1.error;\n        t3 = e;\n        t4 = _this._box_0;\n        if (t2 == null ? t3 == null : t2 === t3)\n          t4.listenerValueOrError = t1;\n        else\n          t4.listenerValueOrError = A.AsyncError$(e, s);\n        t4.listenerHasError = true;\n      }\n    }",
-        "type": "void Function()"
+        "code": "call$0() {\n      var asyncError, e, s, t1, exception, t2, _this = this;\n      try {\n        asyncError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t1 = _this._box_0;\n        if (t1.listener.matchesErrorTest$1(asyncError) && t1.listener.errorCallback != null) {\n          t1.listenerValueOrError = t1.listener.handleError$1(asyncError);\n          t1.listenerHasError = false;\n        }\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t2 = _this._box_0;\n        if (t1.error === e)\n          t2.listenerValueOrError = t1;\n        else\n          t2.listenerValueOrError = A.AsyncError$(e, s);\n        t2.listenerHasError = true;\n      }\n    }",
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleValueCallback.call": {
         "id": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleValueCallback.call",
@@ -17418,13 +17684,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      var e, s, t1, t2, t3, t4, t5, exception;\n      try {\n        t1 = this._box_0;\n        t2 = t1.listener;\n        t3 = t2.$ti;\n        t4 = t3._precomputed1;\n        t5 = t4._as(this.sourceResult);\n        t1.listenerValueOrError = t2.result._zone.runUnary$2$2(t3._eval$1(\"2/(1)\")._as(t2.callback), t5, t3._eval$1(\"2/\"), t4);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = this._box_0;\n        t1.listenerValueOrError = A.AsyncError$(e, s);\n        t1.listenerHasError = true;\n      }\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback.call": {
         "id": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback.call",
         "kind": "function",
         "name": "call",
-        "size": 1551,
+        "size": 1417,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback",
         "children": [],
@@ -17439,8 +17706,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0() {\n      var e, s, t1, exception, t2, originalSource, _this = this, completeResult = null;\n      try {\n        t1 = _this._box_0.listener;\n        completeResult = t1.result._zone.run$1$1(type$.dynamic_Function._as(t1.callback), type$.dynamic);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        if (_this.hasError) {\n          t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners).error;\n          t2 = e;\n          t2 = t1 == null ? t2 == null : t1 === t2;\n          t1 = t2;\n        } else\n          t1 = false;\n        t2 = _this._box_0;\n        if (t1)\n          t2.listenerValueOrError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        else\n          t2.listenerValueOrError = A.AsyncError$(e, s);\n        t2.listenerHasError = true;\n        return;\n      }\n      if (completeResult instanceof A._Future && (completeResult._state & 24) !== 0) {\n        if ((completeResult._state & 16) !== 0) {\n          t1 = _this._box_0;\n          t1.listenerValueOrError = type$.AsyncError._as(completeResult._resultOrListeners);\n          t1.listenerHasError = true;\n        }\n        return;\n      }\n      if (type$.Future_dynamic._is(completeResult)) {\n        originalSource = _this._box_1.source;\n        t1 = _this._box_0;\n        t1.listenerValueOrError = completeResult.then$1$1(new A._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource), type$.dynamic);\n        t1.listenerHasError = false;\n      }\n    }",
-        "type": "void Function()"
+        "code": "call$0() {\n      var e, s, t1, exception, t2, originalSource, _this = this, completeResult = null;\n      try {\n        t1 = _this._box_0.listener;\n        completeResult = t1.result._zone.run$1$1(type$.dynamic_Function._as(t1.callback), type$.dynamic);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = _this.hasError && type$.AsyncError._as(_this._box_1.source._resultOrListeners).error === e;\n        t2 = _this._box_0;\n        if (t1)\n          t2.listenerValueOrError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        else\n          t2.listenerValueOrError = A.AsyncError$(e, s);\n        t2.listenerHasError = true;\n        return;\n      }\n      if (completeResult instanceof A._Future && (completeResult._state & 24) !== 0) {\n        if ((completeResult._state & 16) !== 0) {\n          t1 = _this._box_0;\n          t1.listenerValueOrError = type$.AsyncError._as(completeResult._resultOrListeners);\n          t1.listenerHasError = true;\n        }\n        return;\n      }\n      if (type$.Future_dynamic._is(completeResult)) {\n        originalSource = _this._box_1.source;\n        t1 = _this._box_0;\n        t1.listenerValueOrError = completeResult.then$1$1(new A._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource), type$.dynamic);\n        t1.listenerHasError = false;\n      }\n    }",
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback_closure.call": {
         "id": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback_closure.call",
@@ -17468,7 +17736,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "call$1(_) {\n      return this.originalSource;\n    }",
-        "type": "_Future<dynamic> Function(dynamic)"
+        "type": "_Future<dynamic> Function(dynamic)",
+        "functionKind": 2
       },
       "dart:async::_Future._removeListeners": {
         "id": "function/dart:async::_Future._removeListeners",
@@ -17490,7 +17759,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 2,
         "code": "_removeListeners$0() {\n      var current = type$.nullable__FutureListener_dynamic_dynamic._as(this._resultOrListeners);\n      this._resultOrListeners = null;\n      return this._reverseListeners$1(current);\n    }",
-        "type": "_FutureListener<dynamic,dynamic>? Function()"
+        "type": "_FutureListener<dynamic,dynamic>? Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._reverseListeners": {
         "id": "function/dart:async::_Future._reverseListeners",
@@ -17518,7 +17788,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
         "code": "_reverseListeners$1(listeners) {\n      var current, prev, next;\n      for (current = listeners, prev = null; current != null; prev = current, current = next) {\n        next = current._nextListener;\n        current._nextListener = prev;\n      }\n      return prev;\n    }",
-        "type": "_FutureListener<dynamic,dynamic>? Function(_FutureListener<dynamic,dynamic>?)"
+        "type": "_FutureListener<dynamic,dynamic>? Function(_FutureListener<dynamic,dynamic>?)",
+        "functionKind": 2
       },
       "dart:async::_Future._setChained": {
         "id": "function/dart:async::_Future._setChained",
@@ -17546,7 +17817,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(_Future<dynamic>)"
+        "type": "void Function(_Future<dynamic>)",
+        "functionKind": 2
       },
       "dart:async::_Future._setError": {
         "id": "function/dart:async::_Future._setError",
@@ -17567,19 +17839,20 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_Future._setErrorObject": {
         "id": "function/dart:async::_Future._setErrorObject",
@@ -17600,14 +17873,15 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|exact=AsyncError]",
+            "type": "[exact=AsyncError]",
             "declaredType": "AsyncError"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "_setErrorObject$1(error) {\n      this._state = this._state & 1 | 16;\n      this._resultOrListeners = error;\n    }",
-        "type": "void Function(AsyncError)"
+        "type": "void Function(AsyncError)",
+        "functionKind": 2
       },
       "dart:async::_Future._setPendingComplete": {
         "id": "function/dart:async::_Future._setPendingComplete",
@@ -17629,7 +17903,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 4,
         "code": "",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Future._setValue": {
         "id": "function/dart:async::_Future._setValue",
@@ -17657,7 +17932,8 @@
         "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_Future._thenAwait": {
         "id": "function/dart:async::_Future._thenAwait",
@@ -17690,7 +17966,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_thenAwait$1$2(f, onError, $E) {\n      var result,\n        t1 = this.$ti;\n      t1._bind$1($E)._eval$1(\"1/(2)\")._as(f);\n      result = new A._Future($.Zone__current, $E._eval$1(\"_Future<0>\"));\n      this._addListener$1(new A._FutureListener(result, 3, f, onError, t1._eval$1(\"@<1>\")._bind$1($E)._eval$1(\"_FutureListener<1,2>\")));\n      return result;\n    }",
-        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),Function)"
+        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),Function)",
+        "functionKind": 2
       },
       "dart:async::_Future.then": {
         "id": "function/dart:async::_Future.then",
@@ -17723,7 +18000,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "then$1$2$onError(f, onError, $R) {\n      var currentZone, result, t2,\n        t1 = this.$ti;\n      t1._bind$1($R)._eval$1(\"1/(2)\")._as(f);\n      currentZone = $.Zone__current;\n      if (currentZone === B.C__RootZone) {\n        if (onError != null && !type$.dynamic_Function_Object_StackTrace._is(onError) && !type$.dynamic_Function_Object._is(onError))\n          throw A.wrapException(A.ArgumentError$value(onError, \"onError\", string$.Error_));\n      } else {\n        $R._eval$1(\"@<0/>\")._bind$1(t1._precomputed1)._eval$1(\"1(2)\")._as(f);\n        if (onError != null)\n          onError = A._registerErrorHandler(onError, currentZone);\n      }\n      result = new A._Future(currentZone, $R._eval$1(\"_Future<0>\"));\n      t2 = onError == null ? 1 : 3;\n      this._addListener$1(new A._FutureListener(result, t2, f, onError, t1._eval$1(\"@<1>\")._bind$1($R)._eval$1(\"_FutureListener<1,2>\")));\n      return result;\n    }\nthen$1$1(f, $R) {\n      return this.then$1$2$onError(f, null, $R);\n    }",
-        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),{Function? onError})"
+        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),{Function? onError})",
+        "functionKind": 2
       },
       "dart:async::_FutureListener._FutureListener.then": {
         "id": "function/dart:async::_FutureListener._FutureListener.then",
@@ -17761,7 +18039,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function?)"
+        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function?)",
+        "functionKind": 3
       },
       "dart:async::_FutureListener._FutureListener.thenAwait": {
         "id": "function/dart:async::_FutureListener._FutureListener.thenAwait",
@@ -17799,7 +18078,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function)"
+        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function)",
+        "functionKind": 3
       },
       "dart:async::_FutureListener._errorTest": {
         "id": "function/dart:async::_FutureListener._errorTest",
@@ -17821,7 +18101,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Object) Function()"
+        "type": "bool Function(Object) Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener._onError": {
         "id": "function/dart:async::_FutureListener._onError",
@@ -17843,7 +18124,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Function? Function()"
+        "type": "Function? Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener._onValue": {
         "id": "function/dart:async::_FutureListener._onValue",
@@ -17865,7 +18147,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "FutureOr<_FutureListener.T> Function(_FutureListener.S) Function()"
+        "type": "FutureOr<_FutureListener.T> Function(_FutureListener.S) Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener._whenCompleteAction": {
         "id": "function/dart:async::_FutureListener._whenCompleteAction",
@@ -17887,7 +18170,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function() Function()"
+        "type": "dynamic Function() Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener._zone": {
         "id": "function/dart:async::_FutureListener._zone",
@@ -17909,13 +18193,14 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "_Zone Function()"
+        "type": "_Zone Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handleError": {
         "id": "function/dart:async::_FutureListener.handleError",
         "kind": "function",
         "name": "handleError",
-        "size": 1091,
+        "size": 1094,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_FutureListener",
         "children": [],
@@ -17930,14 +18215,15 @@
         "parameters": [
           {
             "name": "asyncError",
-            "type": "[null|exact=AsyncError]",
+            "type": "[exact=AsyncError]",
             "declaredType": "AsyncError"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "handleError$1(asyncError) {\n      var exception, _this = this,\n        errorCallback = _this.errorCallback,\n        result = null,\n        t1 = type$.dynamic,\n        t2 = type$.Object,\n        t3 = _this.result._zone;\n      if (type$.dynamic_Function_Object_StackTrace._is(errorCallback))\n        result = t3.runBinary$3$3(errorCallback, asyncError.error, asyncError.stackTrace, t1, t2, type$.StackTrace);\n      else\n        result = t3.runUnary$2$2(type$.dynamic_Function_Object._as(errorCallback), asyncError.error, t1, t2);\n      try {\n        t1 = _this.$ti._eval$1(\"2/\")._as(result);\n        return t1;\n      } catch (exception) {\n        if (type$.TypeError._is(A.unwrapException(exception))) {\n          if ((_this.state & 1) !== 0)\n            throw A.wrapException(A.ArgumentError$(\"The error handler of Future.then must return a value of the returned future's type\", \"onError\"));\n          throw A.wrapException(A.ArgumentError$(\"The error handler of Future.catchError must return a value of the future's type\", \"onError\"));\n        } else\n          throw exception;\n      }\n    }",
-        "type": "FutureOr<_FutureListener.T> Function(AsyncError)"
+        "code": "handleError$1(asyncError) {\n      var exception, _this = this,\n        errorCallback = _this.errorCallback,\n        result = null,\n        t1 = type$.dynamic,\n        t2 = type$.Object,\n        t3 = asyncError.error,\n        t4 = _this.result._zone;\n      if (type$.dynamic_Function_Object_StackTrace._is(errorCallback))\n        result = t4.runBinary$3$3(errorCallback, t3, asyncError.stackTrace, t1, t2, type$.StackTrace);\n      else\n        result = t4.runUnary$2$2(type$.dynamic_Function_Object._as(errorCallback), t3, t1, t2);\n      try {\n        t1 = _this.$ti._eval$1(\"2/\")._as(result);\n        return t1;\n      } catch (exception) {\n        if (type$.TypeError._is(A.unwrapException(exception))) {\n          if ((_this.state & 1) !== 0)\n            throw A.wrapException(A.ArgumentError$(\"The error handler of Future.then must return a value of the returned future's type\", \"onError\"));\n          throw A.wrapException(A.ArgumentError$(\"The error handler of Future.catchError must return a value of the future's type\", \"onError\"));\n        } else\n          throw exception;\n      }\n    }",
+        "type": "FutureOr<_FutureListener.T> Function(AsyncError)",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handleValue": {
         "id": "function/dart:async::_FutureListener.handleValue",
@@ -17965,7 +18251,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "FutureOr<_FutureListener.T> Function(Object?)"
+        "type": "FutureOr<_FutureListener.T> Function(Object?)",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handleWhenComplete": {
         "id": "function/dart:async::_FutureListener.handleWhenComplete",
@@ -17987,7 +18274,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handlesComplete": {
         "id": "function/dart:async::_FutureListener.handlesComplete",
@@ -18009,7 +18297,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handlesError": {
         "id": "function/dart:async::_FutureListener.handlesError",
@@ -18031,7 +18320,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.handlesValue": {
         "id": "function/dart:async::_FutureListener.handlesValue",
@@ -18053,7 +18343,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.hasErrorCallback": {
         "id": "function/dart:async::_FutureListener.hasErrorCallback",
@@ -18075,7 +18366,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.hasErrorTest": {
         "id": "function/dart:async::_FutureListener.hasErrorTest",
@@ -18097,7 +18389,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.matchesErrorTest": {
         "id": "function/dart:async::_FutureListener.matchesErrorTest",
@@ -18114,18 +18407,19 @@
           "external": false
         },
         "returnType": "bool",
-        "inferredReturnType": "[null|subtype=bool]",
+        "inferredReturnType": "[subtype=bool]",
         "parameters": [
           {
             "name": "asyncError",
-            "type": "[null|exact=AsyncError]",
+            "type": "[exact=AsyncError]",
             "declaredType": "AsyncError"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "matchesErrorTest$1(asyncError) {\n      if ((this.state & 15) !== 6)\n        return true;\n      return this.result._zone.runUnary$2$2(type$.bool_Function_Object._as(this.callback), asyncError.error, type$.bool, type$.Object);\n    }",
-        "type": "bool Function(AsyncError)"
+        "type": "bool Function(AsyncError)",
+        "functionKind": 2
       },
       "dart:async::_FutureListener.shouldChain": {
         "id": "function/dart:async::_FutureListener.shouldChain",
@@ -18146,14 +18440,15 @@
         "parameters": [
           {
             "name": "value",
-            "type": "[null|exact=_Future]",
+            "type": "[exact=_Future]",
             "declaredType": "Future<dynamic>"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function(Future<dynamic>)"
+        "type": "bool Function(Future<dynamic>)",
+        "functionKind": 2
       },
       "dart:async::_RootZone._scheduleMicrotask": {
         "id": "function/dart:async::_RootZone._scheduleMicrotask",
@@ -18175,7 +18470,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()"
+        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()",
+        "functionKind": 2
       },
       "dart:async::_RootZone.bindCallbackGuarded": {
         "id": "function/dart:async::_RootZone.bindCallbackGuarded",
@@ -18205,7 +18501,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "bindCallbackGuarded$1(f) {\n      return new A._RootZone_bindCallbackGuarded_closure(this, type$.void_Function._as(f));\n    }",
-        "type": "void Function() Function(void Function())"
+        "type": "void Function() Function(void Function())",
+        "functionKind": 2
       },
       "dart:async::_RootZone.bindCallbackGuarded._RootZone_bindCallbackGuarded_closure.call": {
         "id": "function/dart:async::_RootZone.bindCallbackGuarded._RootZone_bindCallbackGuarded_closure.call",
@@ -18227,7 +18524,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      return this.$this.runGuarded$1(this.f);\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_RootZone.errorCallback": {
         "id": "function/dart:async::_RootZone.errorCallback",
@@ -18248,7 +18546,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -18260,7 +18558,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "AsyncError? Function(Object,StackTrace?)"
+        "type": "AsyncError? Function(Object,StackTrace?)",
+        "functionKind": 2
       },
       "dart:async::_RootZone.errorZone": {
         "id": "function/dart:async::_RootZone.errorZone",
@@ -18282,7 +18581,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
         "code": "",
-        "type": "Zone Function()"
+        "type": "Zone Function()",
+        "functionKind": 2
       },
       "dart:async::_RootZone.handleUncaughtError": {
         "id": "function/dart:async::_RootZone.handleUncaughtError",
@@ -18303,7 +18603,7 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
@@ -18315,7 +18615,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_RootZone.registerBinaryCallback": {
         "id": "function/dart:async::_RootZone.registerBinaryCallback",
@@ -18343,7 +18644,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "registerBinaryCallback$3$1(f, $R, T1, T2) {\n      return $R._eval$1(\"@<0>\")._bind$1(T1)._bind$1(T2)._eval$1(\"1(2,3)\")._as(f);\n    }",
-        "type": "#A Function(#B,#C) Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C))"
+        "type": "#A Function(#B,#C) Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C))",
+        "functionKind": 2
       },
       "dart:async::_RootZone.registerCallback": {
         "id": "function/dart:async::_RootZone.registerCallback",
@@ -18371,7 +18673,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "#A Function() Function<#A extends Object?>(#A Function())"
+        "type": "#A Function() Function<#A extends Object?>(#A Function())",
+        "functionKind": 2
       },
       "dart:async::_RootZone.registerUnaryCallback": {
         "id": "function/dart:async::_RootZone.registerUnaryCallback",
@@ -18399,7 +18702,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "#A Function(#B) Function<#A extends Object?,#B extends Object?>(#A Function(#B))"
+        "type": "#A Function(#B) Function<#A extends Object?,#B extends Object?>(#A Function(#B))",
+        "functionKind": 2
       },
       "dart:async::_RootZone.run": {
         "id": "function/dart:async::_RootZone.run",
@@ -18427,7 +18731,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "run$1$1(f, $R) {\n      $R._eval$1(\"0()\")._as(f);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$0();\n      return A._rootRun(null, null, this, f, $R);\n    }",
-        "type": "#A Function<#A extends Object?>(#A Function())"
+        "type": "#A Function<#A extends Object?>(#A Function())",
+        "functionKind": 2
       },
       "dart:async::_RootZone.runBinary": {
         "id": "function/dart:async::_RootZone.runBinary",
@@ -18453,7 +18758,7 @@
           },
           {
             "name": "arg1",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "runBinary.T1"
           },
           {
@@ -18465,13 +18770,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "runBinary$3$3(f, arg1, arg2, $R, T1, T2) {\n      $R._eval$1(\"@<0>\")._bind$1(T1)._bind$1(T2)._eval$1(\"1(2,3)\")._as(f);\n      T1._as(arg1);\n      T2._as(arg2);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$2(arg1, arg2);\n      return A._rootRunBinary(null, null, this, f, arg1, arg2, $R, T1, T2);\n    }",
-        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C),#B,#C)"
+        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C),#B,#C)",
+        "functionKind": 2
       },
       "dart:async::_RootZone.runGuarded": {
         "id": "function/dart:async::_RootZone.runGuarded",
         "kind": "function",
         "name": "runGuarded",
-        "size": 430,
+        "size": 448,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_RootZone",
         "children": [],
@@ -18492,8 +18798,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "runGuarded$1(f) {\n      var e, s, exception;\n      type$.void_Function._as(f);\n      try {\n        if (B.C__RootZone === $.Zone__current) {\n          f.call$0();\n          return;\n        }\n        A._rootRun(null, null, this, f, type$.void);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        A._rootHandleError(e, type$.StackTrace._as(s));\n      }\n    }",
-        "type": "void Function(void Function())"
+        "code": "runGuarded$1(f) {\n      var e, s, exception;\n      type$.void_Function._as(f);\n      try {\n        if (B.C__RootZone === $.Zone__current) {\n          f.call$0();\n          return;\n        }\n        A._rootRun(null, null, this, f, type$.void);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        A._rootHandleError(type$.Object._as(e), type$.StackTrace._as(s));\n      }\n    }",
+        "type": "void Function(void Function())",
+        "functionKind": 2
       },
       "dart:async::_RootZone.runUnary": {
         "id": "function/dart:async::_RootZone.runUnary",
@@ -18514,7 +18821,7 @@
         "parameters": [
           {
             "name": "f",
-            "type": "[null|subclass=Closure]",
+            "type": "[subclass=Closure]",
             "declaredType": "runUnary.R Function(runUnary.T)"
           },
           {
@@ -18526,7 +18833,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "runUnary$2$2(f, arg, $R, $T) {\n      $R._eval$1(\"@<0>\")._bind$1($T)._eval$1(\"1(2)\")._as(f);\n      $T._as(arg);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$1(arg);\n      return A._rootRunUnary(null, null, this, f, arg, $R, $T);\n    }",
-        "type": "#A Function<#A extends Object?,#B extends Object?>(#A Function(#B),#B)"
+        "type": "#A Function<#A extends Object?,#B extends Object?>(#A Function(#B),#B)",
+        "functionKind": 2
       },
       "dart:async::_RootZone.scheduleMicrotask": {
         "id": "function/dart:async::_RootZone.scheduleMicrotask",
@@ -18554,7 +18862,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 6,
         "code": "",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 2
       },
       "dart:async::_StreamIterator._StreamIterator": {
         "id": "function/dart:async::_StreamIterator._StreamIterator",
@@ -18575,14 +18884,15 @@
         "parameters": [
           {
             "name": "stream",
-            "type": "[null]",
+            "type": "[empty]",
             "declaredType": "Stream<_StreamIterator.T>"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(Stream<_StreamIterator.T>)"
+        "type": "dynamic Function(Stream<_StreamIterator.T>)",
+        "functionKind": 3
       },
       "dart:async::_TimerImpl._TimerImpl": {
         "id": "function/dart:async::_TimerImpl._TimerImpl",
@@ -18617,7 +18927,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_TimerImpl$(milliseconds, callback) {\n      var t1 = new A._TimerImpl();\n      t1._TimerImpl$2(milliseconds, callback);\n      return t1;\n    }",
-        "type": "dynamic Function(int,void Function())"
+        "type": "dynamic Function(int,void Function())",
+        "functionKind": 3
       },
       "dart:async::_TimerImpl._TimerImpl._TimerImpl_internalCallback.call": {
         "id": "function/dart:async::_TimerImpl._TimerImpl._TimerImpl_internalCallback.call",
@@ -18639,7 +18950,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$0() {\n      this.callback.call$0();\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_Zone.inSameErrorZone": {
         "id": "function/dart:async::_Zone.inSameErrorZone",
@@ -18667,7 +18979,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "bool Function(Zone)"
+        "type": "bool Function(Zone)",
+        "functionKind": 2
       },
       "dart:async::_asyncAwait": {
         "id": "function/dart:async::_asyncAwait",
@@ -18700,7 +19013,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncAwait(object, bodyFunction) {\n      A._awaitOnObject(object, bodyFunction);\n    }",
-        "type": "dynamic Function(dynamic,void Function(int,dynamic))"
+        "type": "dynamic Function(dynamic,void Function(int,dynamic))",
+        "functionKind": 0
       },
       "dart:async::_asyncRethrow": {
         "id": "function/dart:async::_asyncRethrow",
@@ -18733,7 +19047,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncRethrow(object, completer) {\n      completer.completeError$2(A.unwrapException(object), A.getTraceFromException(object));\n    }",
-        "type": "dynamic Function(dynamic,Completer<dynamic>)"
+        "type": "dynamic Function(dynamic,Completer<dynamic>)",
+        "functionKind": 0
       },
       "dart:async::_asyncReturn": {
         "id": "function/dart:async::_asyncReturn",
@@ -18766,7 +19081,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncReturn(object, completer) {\n      completer.complete$1(object);\n    }",
-        "type": "dynamic Function(dynamic,Completer<dynamic>)"
+        "type": "dynamic Function(dynamic,Completer<dynamic>)",
+        "functionKind": 0
       },
       "dart:async::_asyncStartSync": {
         "id": "function/dart:async::_asyncStartSync",
@@ -18799,7 +19115,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_asyncStartSync(bodyFunction, completer) {\n      bodyFunction.call$2(0, null);\n      completer.isSync = true;\n      return completer._future;\n    }",
-        "type": "dynamic Function(void Function(int,dynamic),_AsyncAwaitCompleter<dynamic>)"
+        "type": "dynamic Function(void Function(int,dynamic),_AsyncAwaitCompleter<dynamic>)",
+        "functionKind": 0
       },
       "dart:async::_awaitOnObject": {
         "id": "function/dart:async::_awaitOnObject",
@@ -18828,14 +19145,15 @@
           },
           {
             "name": "bodyFunction",
-            "type": "[null|subclass=Closure]",
+            "type": "[subclass=Closure]",
             "declaredType": "void Function(int,dynamic)"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_awaitOnObject(object, bodyFunction) {\n      var t1, future,\n        thenCallback = new A._awaitOnObject_closure(bodyFunction),\n        errorCallback = new A._awaitOnObject_closure0(bodyFunction);\n      if (object instanceof A._Future)\n        object._thenAwait$1$2(thenCallback, errorCallback, type$.dynamic);\n      else {\n        t1 = type$.dynamic;\n        if (type$.Future_dynamic._is(object))\n          object.then$1$2$onError(thenCallback, errorCallback, t1);\n        else {\n          future = new A._Future($.Zone__current, type$._Future_dynamic);\n          future._state = 8;\n          future._resultOrListeners = object;\n          future._thenAwait$1$2(thenCallback, errorCallback, t1);\n        }\n      }\n    }",
-        "type": "void Function(dynamic,void Function(int,dynamic))"
+        "type": "void Function(dynamic,void Function(int,dynamic))",
+        "functionKind": 0
       },
       "dart:async::_awaitOnObject._awaitOnObject_closure.call": {
         "id": "function/dart:async::_awaitOnObject._awaitOnObject_closure.call",
@@ -18863,7 +19181,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$1(result) {\n      return this.bodyFunction.call$2(0, result);\n    }",
-        "type": "void Function(dynamic)"
+        "type": "void Function(dynamic)",
+        "functionKind": 2
       },
       "dart:async::_awaitOnObject._awaitOnObject_closure.call%0": {
         "id": "function/dart:async::_awaitOnObject._awaitOnObject_closure.call%0",
@@ -18896,7 +19215,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "call$2(error, stackTrace) {\n      this.bodyFunction.call$2(1, new A.ExceptionAndStackTrace(error, type$.StackTrace._as(stackTrace)));\n    }",
-        "type": "Null Function(dynamic,StackTrace)"
+        "type": "Null Function(dynamic,StackTrace)",
+        "functionKind": 2
       },
       "dart:async::_hasTimer": {
         "id": "function/dart:async::_hasTimer",
@@ -18918,7 +19238,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 0
       },
       "dart:async::_makeAsyncAwaitCompleter": {
         "id": "function/dart:async::_makeAsyncAwaitCompleter",
@@ -18940,7 +19261,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_makeAsyncAwaitCompleter($T) {\n      return new A._AsyncAwaitCompleter(new A._Future($.Zone__current, $T._eval$1(\"_Future<0>\")), $T._eval$1(\"_AsyncAwaitCompleter<0>\"));\n    }",
-        "type": "Completer<#A> Function<#A extends Object?>()"
+        "type": "Completer<#A> Function<#A extends Object?>()",
+        "functionKind": 0
       },
       "dart:async::_microtaskLoop": {
         "id": "function/dart:async::_microtaskLoop",
@@ -18962,7 +19284,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_microtaskLoop() {\n      var entry, next;\n      for (entry = $._nextCallback; entry != null; entry = $._nextCallback) {\n        $._lastPriorityCallback = null;\n        next = entry.next;\n        $._nextCallback = next;\n        if (next == null)\n          $._lastCallback = null;\n        entry.callback.call$0();\n      }\n    }",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 0
       },
       "dart:async::_registerErrorHandler": {
         "id": "function/dart:async::_registerErrorHandler",
@@ -18995,13 +19318,14 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "_registerErrorHandler(errorHandler, zone) {\n      var t1;\n      if (type$.dynamic_Function_Object_StackTrace._is(errorHandler))\n        return zone.registerBinaryCallback$3$1(errorHandler, type$.dynamic, type$.Object, type$.StackTrace);\n      t1 = type$.dynamic_Function_Object;\n      if (t1._is(errorHandler))\n        return t1._as(errorHandler);\n      throw A.wrapException(A.ArgumentError$value(errorHandler, \"onError\", string$.Error_));\n    }",
-        "type": "Function Function(Function,Zone)"
+        "type": "Function Function(Function,Zone)",
+        "functionKind": 0
       },
       "dart:async::_rootHandleError": {
         "id": "function/dart:async::_rootHandleError",
         "kind": "function",
         "name": "_rootHandleError",
-        "size": 480,
+        "size": 574,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "children": [
@@ -19018,25 +19342,26 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_rootHandleError(error, stackTrace) {\n      A._schedulePriorityAsyncCallback(new A._rootHandleError_closure(error, stackTrace));\n    }",
-        "type": "void Function(Object,StackTrace)"
+        "type": "void Function(Object,StackTrace)",
+        "functionKind": 0
       },
       "dart:async::_rootHandleError._rootHandleError_closure.call": {
         "id": "function/dart:async::_rootHandleError._rootHandleError_closure.call",
         "kind": "function",
         "name": "call",
-        "size": 124,
+        "size": 218,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::_rootHandleError._rootHandleError_closure",
         "children": [],
@@ -19047,12 +19372,13 @@
           "external": false
         },
         "returnType": "void",
-        "inferredReturnType": "[empty]",
+        "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0() {\n      A.Error_throwWithStackTrace(this.error, this.stackTrace);\n      A.ReachabilityError$(string$._null_);\n    }",
-        "type": "void Function()"
+        "code": "call$0() {\n      var t1 = this.error,\n        t2 = this.stackTrace;\n      A.checkNotNullable(t1, \"error\", type$.Object);\n      A.checkNotNullable(t2, \"stackTrace\", type$.StackTrace);\n      A.Error__throw(t1, t2);\n    }",
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:async::_rootRun": {
         "id": "function/dart:async::_rootRun",
@@ -19095,7 +19421,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_rootRun($self, $parent, zone, f, $R) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$0();\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$0();\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
-        "type": "#A Function<#A extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function())"
+        "type": "#A Function<#A extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function())",
+        "functionKind": 0
       },
       "dart:async::_rootRunBinary": {
         "id": "function/dart:async::_rootRunBinary",
@@ -19136,7 +19463,7 @@
           },
           {
             "name": "arg1",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "_rootRunBinary.T1"
           },
           {
@@ -19148,7 +19475,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_rootRunBinary($self, $parent, zone, f, arg1, arg2, $R, T1, T2) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$2(arg1, arg2);\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$2(arg1, arg2);\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
-        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B,#C),#B,#C)"
+        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B,#C),#B,#C)",
+        "functionKind": 0
       },
       "dart:async::_rootRunUnary": {
         "id": "function/dart:async::_rootRunUnary",
@@ -19184,7 +19512,7 @@
           },
           {
             "name": "f",
-            "type": "[null|subclass=Closure]",
+            "type": "[subclass=Closure]",
             "declaredType": "_rootRunUnary.R Function(_rootRunUnary.T)"
           },
           {
@@ -19196,7 +19524,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_rootRunUnary($self, $parent, zone, f, arg, $R, $T) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$1(arg);\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$1(arg);\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
-        "type": "#A Function<#A extends Object?,#B extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B),#B)"
+        "type": "#A Function<#A extends Object?,#B extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B),#B)",
+        "functionKind": 0
       },
       "dart:async::_rootScheduleMicrotask": {
         "id": "function/dart:async::_rootScheduleMicrotask",
@@ -19239,7 +19568,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_rootScheduleMicrotask($self, $parent, zone, f) {\n      type$.void_Function._as(f);\n      if (B.C__RootZone !== zone)\n        f = zone.bindCallbackGuarded$1(f);\n      A._scheduleAsyncCallback(f);\n    }",
-        "type": "void Function(Zone?,ZoneDelegate?,Zone,void Function())"
+        "type": "void Function(Zone?,ZoneDelegate?,Zone,void Function())",
+        "functionKind": 0
       },
       "dart:async::_scheduleAsyncCallback": {
         "id": "function/dart:async::_scheduleAsyncCallback",
@@ -19267,7 +19597,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_scheduleAsyncCallback(callback) {\n      var newEntry = new A._AsyncCallbackEntry(callback),\n        lastCallback = $._lastCallback;\n      if (lastCallback == null) {\n        $._nextCallback = $._lastCallback = newEntry;\n        if (!$._isInCallbackLoop)\n          $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure());\n      } else\n        $._lastCallback = lastCallback.next = newEntry;\n    }",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_schedulePriorityAsyncCallback": {
         "id": "function/dart:async::_schedulePriorityAsyncCallback",
@@ -19295,7 +19626,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_schedulePriorityAsyncCallback(callback) {\n      var entry, lastPriorityCallback, next,\n        t1 = $._nextCallback;\n      if (t1 == null) {\n        A._scheduleAsyncCallback(callback);\n        $._lastPriorityCallback = $._lastCallback;\n        return;\n      }\n      entry = new A._AsyncCallbackEntry(callback);\n      lastPriorityCallback = $._lastPriorityCallback;\n      if (lastPriorityCallback == null) {\n        entry.next = t1;\n        $._nextCallback = $._lastPriorityCallback = entry;\n      } else {\n        next = lastPriorityCallback.next;\n        entry.next = next;\n        $._lastPriorityCallback = lastPriorityCallback.next = entry;\n        if (next == null)\n          $._lastCallback = entry;\n      }\n    }",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:async::_startMicrotaskLoop": {
         "id": "function/dart:async::_startMicrotaskLoop",
@@ -19317,13 +19649,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_startMicrotaskLoop() {\n      $._isInCallbackLoop = true;\n      try {\n        A._microtaskLoop();\n      } finally {\n        $._lastPriorityCallback = null;\n        $._isInCallbackLoop = false;\n        if ($._nextCallback != null)\n          $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure());\n      }\n    }\n_static_0(A, \"async___startMicrotaskLoop$closure\", \"_startMicrotaskLoop\", 0);\n",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 0
       },
       "dart:async::_wrapJsFunctionForAsync": {
         "id": "function/dart:async::_wrapJsFunctionForAsync",
         "kind": "function",
         "name": "_wrapJsFunctionForAsync",
-        "size": 828,
+        "size": 827,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:async::",
         "children": [
@@ -19347,13 +19680,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_wrapJsFunctionForAsync($function) {\n      var $protected = function(fn, ERROR) {\n        return function(errorCode, result) {\n          while (true)\n            try {\n              fn(errorCode, result);\n              break;\n            } catch (error) {\n              result = error;\n              errorCode = ERROR;\n            }\n        };\n      }($function, 1);\n      return $.Zone__current.registerBinaryCallback$3$1(new A._wrapJsFunctionForAsync_closure($protected), type$.void, type$.int, type$.dynamic);\n    }",
-        "type": "void Function(int,dynamic) Function(dynamic)"
+        "type": "void Function(int,dynamic) Function(dynamic)",
+        "functionKind": 0
       },
       "dart:async::_wrapJsFunctionForAsync._wrapJsFunctionForAsync_closure.call": {
         "id": "function/dart:async::_wrapJsFunctionForAsync._wrapJsFunctionForAsync_closure.call",
         "kind": "function",
         "name": "call",
-        "size": 86,
+        "size": 85,
         "outputUnit": "outputUnit/main",
         "parent": "closure/dart:async::_wrapJsFunctionForAsync._wrapJsFunctionForAsync_closure",
         "children": [],
@@ -19368,7 +19702,7 @@
         "parameters": [
           {
             "name": "errorCode",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "int"
           },
           {
@@ -19379,8 +19713,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2(errorCode, result) {\n      this.$protected(A._asIntS(errorCode), result);\n    }",
-        "type": "void Function(int,dynamic)"
+        "code": "call$2(errorCode, result) {\n      this.$protected(A._asInt(errorCode), result);\n    }",
+        "type": "void Function(int,dynamic)",
+        "functionKind": 2
       },
       "dart:async::scheduleMicrotask": {
         "id": "function/dart:async::scheduleMicrotask",
@@ -19408,7 +19743,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "scheduleMicrotask(callback) {\n      var _null = null,\n        currentZone = $.Zone__current;\n      if (B.C__RootZone === currentZone) {\n        A._rootScheduleMicrotask(_null, _null, B.C__RootZone, callback);\n        return;\n      }\n      A._rootScheduleMicrotask(_null, _null, currentZone, type$.void_Function._as(currentZone.bindCallbackGuarded$1(callback)));\n    }",
-        "type": "void Function(void Function())"
+        "type": "void Function(void Function())",
+        "functionKind": 0
       },
       "dart:collection::IterableBase.iterableToFullString": {
         "id": "function/dart:collection::IterableBase.iterableToFullString",
@@ -19446,7 +19782,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "IterableBase_iterableToFullString(iterable, leftDelimiter, rightDelimiter) {\n      var buffer, t1;\n      if (A._isToStringVisiting(iterable))\n        return leftDelimiter + \"...\" + rightDelimiter;\n      buffer = new A.StringBuffer(leftDelimiter);\n      B.JSArray_methods.add$1($._toStringVisiting, iterable);\n      try {\n        t1 = buffer;\n        t1._contents = A.StringBuffer__writeAll(t1._contents, iterable, \", \");\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      buffer._contents += rightDelimiter;\n      t1 = buffer._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
-        "type": "String Function(Iterable<dynamic>,[String,String])"
+        "type": "String Function(Iterable<dynamic>,[String,String])",
+        "functionKind": 0
       },
       "dart:collection::LinkedHashMap.LinkedHashMap._empty": {
         "id": "function/dart:collection::LinkedHashMap.LinkedHashMap._empty",
@@ -19468,7 +19805,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "LinkedHashMap_LinkedHashMap$_empty($K, $V) {\n      return new A.JsLinkedHashMap($K._eval$1(\"@<0>\")._bind$1($V)._eval$1(\"JsLinkedHashMap<1,2>\"));\n    }",
-        "type": "LinkedHashMap<#A,#B> Function<#A extends Object?,#B extends Object?>()"
+        "type": "LinkedHashMap<#A,#B> Function<#A extends Object?,#B extends Object?>()",
+        "functionKind": 3
       },
       "dart:collection::LinkedHashSet.LinkedHashSet": {
         "id": "function/dart:collection::LinkedHashSet.LinkedHashSet",
@@ -19490,7 +19828,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "LinkedHashSet_LinkedHashSet($E) {\n      return new A._LinkedHashSet($E._eval$1(\"_LinkedHashSet<0>\"));\n    }",
-        "type": "LinkedHashSet<#A> Function<#A extends Object?>({bool Function(#A,#A)? equals,int Function(#A)? hashCode,bool Function(dynamic)? isValidKey})"
+        "type": "LinkedHashSet<#A> Function<#A extends Object?>({bool Function(#A,#A)? equals,int Function(#A)? hashCode,bool Function(dynamic)? isValidKey})",
+        "functionKind": 3
       },
       "dart:collection::ListBase.listToString": {
         "id": "function/dart:collection::ListBase.listToString",
@@ -19518,7 +19857,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(List<dynamic>)"
+        "type": "String Function(List<dynamic>)",
+        "functionKind": 0
       },
       "dart:collection::MapBase.mapToString": {
         "id": "function/dart:collection::MapBase.mapToString",
@@ -19548,7 +19888,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "MapBase_mapToString(m) {\n      var result, t1 = {};\n      if (A._isToStringVisiting(m))\n        return \"{...}\";\n      result = new A.StringBuffer(\"\");\n      try {\n        B.JSArray_methods.add$1($._toStringVisiting, m);\n        result._contents += \"{\";\n        t1.first = true;\n        m.forEach$1(0, new A.MapBase_mapToString_closure(t1, result));\n        result._contents += \"}\";\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      t1 = result._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
-        "type": "String Function(Map<Object?,Object?>)"
+        "type": "String Function(Map<Object?,Object?>)",
+        "functionKind": 0
       },
       "dart:collection::MapBase.mapToString.MapBase_mapToString_closure.call": {
         "id": "function/dart:collection::MapBase.mapToString.MapBase_mapToString_closure.call",
@@ -19581,7 +19922,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "call$2(k, v) {\n      var t2,\n        t1 = this._box_0;\n      if (!t1.first)\n        this.result._contents += \", \";\n      t1.first = false;\n      t1 = this.result;\n      t2 = t1._contents += A.S(k);\n      t1._contents = t2 + \": \";\n      t1._contents += A.S(v);\n    }",
-        "type": "void Function(Object?,Object?)"
+        "type": "void Function(Object?,Object?)",
+        "functionKind": 2
       },
       "dart:collection::MapMixin.length": {
         "id": "function/dart:collection::MapMixin.length",
@@ -19603,7 +19945,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "get$length(_) {\n      return this.__js_helper$_length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:collection::MapMixin.toString": {
         "id": "function/dart:collection::MapMixin.toString",
@@ -19625,7 +19968,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return A.MapBase_mapToString(this);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:collection::SetMixin.toString": {
         "id": "function/dart:collection::SetMixin.toString",
@@ -19647,7 +19991,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return A.IterableBase_iterableToFullString(this, \"{\", \"}\");\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._LinkedHashSet": {
         "id": "function/dart:collection::_LinkedHashSet._LinkedHashSet",
@@ -19669,7 +20014,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:collection::_LinkedHashSet._add": {
         "id": "function/dart:collection::_LinkedHashSet._add",
@@ -19697,7 +20043,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_add$1(element) {\n      var rest, hash, bucket, _this = this;\n      A._instanceType(_this)._precomputed1._as(element);\n      rest = _this._collection$_rest;\n      if (rest == null)\n        rest = _this._collection$_rest = A._LinkedHashSet__newHashTable();\n      hash = _this._computeHashCode$1(element);\n      bucket = rest[hash];\n      if (bucket == null)\n        rest[hash] = [_this._newLinkedCell$1(element)];\n      else {\n        if (_this._findBucketIndex$2(bucket, element) >= 0)\n          return false;\n        bucket.push(_this._newLinkedCell$1(element));\n      }\n      return true;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._addHashTableEntry": {
         "id": "function/dart:collection::_LinkedHashSet._addHashTableEntry",
@@ -19730,7 +20077,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_addHashTableEntry$2(table, element) {\n      A._instanceType(this)._precomputed1._as(element);\n      if (type$.nullable__LinkedHashSetCell._as(table[element]) != null)\n        return false;\n      table[element] = this._newLinkedCell$1(element);\n      return true;\n    }",
-        "type": "bool Function(dynamic,Object?)"
+        "type": "bool Function(dynamic,Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._computeHashCode": {
         "id": "function/dart:collection::_LinkedHashSet._computeHashCode",
@@ -19758,7 +20106,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_computeHashCode$1(element) {\n      return J.get$hashCode$(element) & 1073741823;\n    }",
-        "type": "int Function(dynamic)"
+        "type": "int Function(dynamic)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._contains": {
         "id": "function/dart:collection::_LinkedHashSet._contains",
@@ -19779,14 +20128,15 @@
         "parameters": [
           {
             "name": "object",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_contains$1(object) {\n      var rest = this._collection$_rest;\n      if (rest == null)\n        return false;\n      return this._findBucketIndex$2(rest[this._computeHashCode$1(object)], object) >= 0;\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._deleteTableEntry": {
         "id": "function/dart:collection::_LinkedHashSet._deleteTableEntry",
@@ -19819,7 +20169,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(dynamic,dynamic)"
+        "type": "void Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet._findBucketIndex": {
         "id": "function/dart:collection::_LinkedHashSet._findBucketIndex",
@@ -19852,7 +20203,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "_findBucketIndex$2(bucket, element) {\n      var $length, i;\n      if (bucket == null)\n        return -1;\n      $length = bucket.length;\n      for (i = 0; i < $length; ++i)\n        if (J.$eq$(bucket[i]._element, element))\n          return i;\n      return -1;\n    }",
-        "type": "int Function(dynamic,dynamic)"
+        "type": "int Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._getBucket": {
         "id": "function/dart:collection::_LinkedHashSet._getBucket",
@@ -19878,14 +20230,15 @@
           },
           {
             "name": "element",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "List<dynamic>? Function(dynamic,dynamic)"
+        "type": "List<dynamic>? Function(dynamic,dynamic)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._getTableEntry": {
         "id": "function/dart:collection::_LinkedHashSet._getTableEntry",
@@ -19918,7 +20271,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
         "code": "",
-        "type": "dynamic Function(dynamic,dynamic)"
+        "type": "dynamic Function(dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet._isNumericElement": {
         "id": "function/dart:collection::_LinkedHashSet._isNumericElement",
@@ -19946,7 +20300,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet._isStringElement": {
         "id": "function/dart:collection::_LinkedHashSet._isStringElement",
@@ -19974,7 +20329,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "bool Function(dynamic)"
+        "type": "bool Function(dynamic)",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet._modified": {
         "id": "function/dart:collection::_LinkedHashSet._modified",
@@ -19996,7 +20352,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function()"
+        "type": "void Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._newHashTable": {
         "id": "function/dart:collection::_LinkedHashSet._newHashTable",
@@ -20018,7 +20375,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "_LinkedHashSet__newHashTable() {\n      var table = Object.create(null);\n      table[\"<non-identifier-key>\"] = table;\n      delete table[\"<non-identifier-key>\"];\n      return table;\n    }",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet._newLinkedCell": {
         "id": "function/dart:collection::_LinkedHashSet._newLinkedCell",
@@ -20046,7 +20404,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
         "code": "_newLinkedCell$1(element) {\n      var _this = this,\n        cell = new A._LinkedHashSetCell(A._instanceType(_this)._precomputed1._as(element));\n      if (_this._first == null)\n        _this._first = _this._last = cell;\n      else\n        _this._last = _this._last._next = cell;\n      ++_this._collection$_length;\n      _this._modifications = _this._modifications + 1 & 1073741823;\n      return cell;\n    }",
-        "type": "_LinkedHashSetCell Function(Object?)"
+        "type": "_LinkedHashSetCell Function(Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet._setTableEntry": {
         "id": "function/dart:collection::_LinkedHashSet._setTableEntry",
@@ -20084,7 +20443,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
         "code": "",
-        "type": "void Function(dynamic,dynamic,dynamic)"
+        "type": "void Function(dynamic,dynamic,dynamic)",
+        "functionKind": 0
       },
       "dart:collection::_LinkedHashSet.add": {
         "id": "function/dart:collection::_LinkedHashSet.add",
@@ -20112,13 +20472,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "add$1(_, element) {\n      var strings, nums, _this = this;\n      A._instanceType(_this)._precomputed1._as(element);\n      if (typeof element == \"string\" && element !== \"__proto__\") {\n        strings = _this._strings;\n        return _this._addHashTableEntry$2(strings == null ? _this._strings = A._LinkedHashSet__newHashTable() : strings, element);\n      } else if (typeof element == \"number\" && (element & 1073741823) === element) {\n        nums = _this._nums;\n        return _this._addHashTableEntry$2(nums == null ? _this._nums = A._LinkedHashSet__newHashTable() : nums, element);\n      } else\n        return _this._add$1(element);\n    }",
-        "type": "bool Function(Object?)"
+        "type": "bool Function(Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet.contains": {
         "id": "function/dart:collection::_LinkedHashSet.contains",
         "kind": "function",
         "name": "contains",
-        "size": 363,
+        "size": 334,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:collection::_LinkedHashSet",
         "children": [],
@@ -20133,14 +20494,15 @@
         "parameters": [
           {
             "name": "object",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "contains$1(_, object) {\n      var strings, t1;\n      if (typeof object == \"string\" && object !== \"__proto__\") {\n        strings = this._strings;\n        if (strings == null)\n          return false;\n        return type$.nullable__LinkedHashSetCell._as(strings[object]) != null;\n      } else {\n        t1 = this._contains$1(object);\n        return t1;\n      }\n    }",
-        "type": "bool Function(Object?)"
+        "code": "contains$1(_, object) {\n      var strings, t1;\n      if (object !== \"__proto__\") {\n        strings = this._strings;\n        if (strings == null)\n          return false;\n        return type$.nullable__LinkedHashSetCell._as(strings[object]) != null;\n      } else {\n        t1 = this._contains$1(object);\n        return t1;\n      }\n    }",
+        "type": "bool Function(Object?)",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet.iterator": {
         "id": "function/dart:collection::_LinkedHashSet.iterator",
@@ -20162,7 +20524,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
         "code": "get$iterator(_) {\n      var _this = this,\n        t1 = new A._LinkedHashSetIterator(_this, _this._modifications, A._instanceType(_this)._eval$1(\"_LinkedHashSetIterator<1>\"));\n      t1._cell = _this._first;\n      return t1;\n    }",
-        "type": "Iterator<_LinkedHashSet.E> Function()"
+        "type": "Iterator<_LinkedHashSet.E> Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSet.length": {
         "id": "function/dart:collection::_LinkedHashSet.length",
@@ -20184,7 +20547,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(_) {\n      return this._collection$_length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSetCell._LinkedHashSetCell": {
         "id": "function/dart:collection::_LinkedHashSetCell._LinkedHashSetCell",
@@ -20212,7 +20576,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(dynamic)"
+        "type": "dynamic Function(dynamic)",
+        "functionKind": 3
       },
       "dart:collection::_LinkedHashSetIterator._LinkedHashSetIterator": {
         "id": "function/dart:collection::_LinkedHashSetIterator._LinkedHashSetIterator",
@@ -20245,13 +20610,14 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(_LinkedHashSet<_LinkedHashSetIterator.E>,int)"
+        "type": "dynamic Function(_LinkedHashSet<_LinkedHashSetIterator.E>,int)",
+        "functionKind": 3
       },
       "dart:collection::_LinkedHashSetIterator.current": {
         "id": "function/dart:collection::_LinkedHashSetIterator.current",
         "kind": "function",
         "name": "current",
-        "size": 61,
+        "size": 126,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:collection::_LinkedHashSetIterator",
         "children": [],
@@ -20266,8 +20632,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$current() {\n      return this._collection$_current;\n    }",
-        "type": "_LinkedHashSetIterator.E Function()"
+        "code": "get$current() {\n      var t1 = this._collection$_current;\n      return t1 == null ? this.$ti._precomputed1._as(t1) : t1;\n    }",
+        "type": "_LinkedHashSetIterator.E Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedHashSetIterator.moveNext": {
         "id": "function/dart:collection::_LinkedHashSetIterator.moveNext",
@@ -20289,7 +20656,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
         "code": "moveNext$0() {\n      var _this = this,\n        cell = _this._cell,\n        t1 = _this._set;\n      if (_this._modifications !== t1._modifications)\n        throw A.wrapException(A.ConcurrentModificationError$(t1));\n      else if (cell == null) {\n        _this.set$_collection$_current(null);\n        return false;\n      } else {\n        _this.set$_collection$_current(_this.$ti._eval$1(\"1?\")._as(cell._element));\n        _this._cell = cell._next;\n        return true;\n      }\n    }",
-        "type": "bool Function()"
+        "type": "bool Function()",
+        "functionKind": 2
       },
       "dart:collection::_LinkedIdentityHashSet._LinkedIdentityHashSet": {
         "id": "function/dart:collection::_LinkedIdentityHashSet._LinkedIdentityHashSet",
@@ -20311,7 +20679,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:collection::_isToStringVisiting": {
         "id": "function/dart:collection::_isToStringVisiting",
@@ -20339,7 +20708,8 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
         "code": "_isToStringVisiting(o) {\n      var t1, i;\n      for (t1 = $._toStringVisiting.length, i = 0; i < t1; ++i)\n        if (o === $._toStringVisiting[i])\n          return true;\n      return false;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 0
       },
       "dart:core::ArgumentError.ArgumentError": {
         "id": "function/dart:core::ArgumentError.ArgumentError",
@@ -20372,7 +20742,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "ArgumentError$(message, $name) {\n      return new A.ArgumentError(false, null, $name, message);\n    }",
-        "type": "dynamic Function([dynamic,String?])"
+        "type": "dynamic Function([dynamic,String?])",
+        "functionKind": 3
       },
       "dart:core::ArgumentError.ArgumentError.value": {
         "id": "function/dart:core::ArgumentError.ArgumentError.value",
@@ -20410,7 +20781,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "ArgumentError$value(value, $name, message) {\n      return new A.ArgumentError(true, value, $name, message);\n    }",
-        "type": "dynamic Function(dynamic,[String?,dynamic])"
+        "type": "dynamic Function(dynamic,[String?,dynamic])",
+        "functionKind": 3
       },
       "dart:core::ArgumentError._errorExplanation": {
         "id": "function/dart:core::ArgumentError._errorExplanation",
@@ -20432,7 +20804,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorExplanation() {\n      return \"\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ArgumentError._errorName": {
         "id": "function/dart:core::ArgumentError._errorName",
@@ -20454,7 +20827,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ArgumentError.toString": {
         "id": "function/dart:core::ArgumentError.toString",
@@ -20476,7 +20850,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var _this = this,\n        $name = _this.name,\n        nameString = $name == null ? \"\" : \" (\" + $name + \")\",\n        message = _this.message,\n        messageString = message == null ? \"\" : \": \" + message,\n        prefix = _this.get$_errorName() + nameString + messageString;\n      if (!_this._hasValue)\n        return prefix;\n      return prefix + _this.get$_errorExplanation() + \": \" + A.Error_safeToString(_this.invalidValue);\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::AssertionError.AssertionError": {
         "id": "function/dart:core::AssertionError.AssertionError",
@@ -20504,7 +20879,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "AssertionError$(message) {\n      return new A.AssertionError(message);\n    }",
-        "type": "dynamic Function([Object?])"
+        "type": "dynamic Function([Object?])",
+        "functionKind": 3
       },
       "dart:core::AssertionError.toString": {
         "id": "function/dart:core::AssertionError.toString",
@@ -20526,7 +20902,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var t1 = this.message;\n      if (t1 != null)\n        return \"Assertion failed: \" + A.Error_safeToString(t1);\n      return \"Assertion failed\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::ConcurrentModificationError.ConcurrentModificationError": {
         "id": "function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
@@ -20554,7 +20931,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "ConcurrentModificationError$(modifiedObject) {\n      return new A.ConcurrentModificationError(modifiedObject);\n    }",
-        "type": "dynamic Function([Object?])"
+        "type": "dynamic Function([Object?])",
+        "functionKind": 3
       },
       "dart:core::ConcurrentModificationError.toString": {
         "id": "function/dart:core::ConcurrentModificationError.toString",
@@ -20576,7 +20954,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      var t1 = this.modifiedObject;\n      if (t1 == null)\n        return \"Concurrent modification during iteration.\";\n      return \"Concurrent modification during iteration: \" + A.Error_safeToString(t1) + \".\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::CyclicInitializationError.CyclicInitializationError": {
         "id": "function/dart:core::CyclicInitializationError.CyclicInitializationError",
@@ -20597,20 +20976,21 @@
         "parameters": [
           {
             "name": "variableName",
-            "type": "[null|exact=JSString]",
+            "type": "[exact=JSString]",
             "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([String?])"
+        "type": "dynamic Function([String?])",
+        "functionKind": 3
       },
       "dart:core::CyclicInitializationError.toString": {
         "id": "function/dart:core::CyclicInitializationError.toString",
         "kind": "function",
         "name": "toString",
-        "size": 231,
+        "size": 115,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::CyclicInitializationError",
         "children": [],
@@ -20625,8 +21005,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      var variableName = this.variableName;\n      return variableName == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + variableName + \"' during its initialization\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Reading static variable '\" + this.variableName + \"' during its initialization\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::Duration.inMilliseconds": {
         "id": "function/dart:core::Duration.inMilliseconds",
@@ -20648,13 +21029,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::Error._objectToString": {
         "id": "function/dart:core::Error._objectToString",
         "kind": "function",
         "name": "_objectToString",
-        "size": 192,
+        "size": 187,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Error",
         "children": [],
@@ -20675,8 +21057,9 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(object)) + \"'\";\n    }",
-        "type": "String Function(Object)"
+        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.Primitives_objectTypeName(object) + \"'\";\n    }",
+        "type": "String Function(Object)",
+        "functionKind": 0
       },
       "dart:core::Error._stringToSafeString": {
         "id": "function/dart:core::Error._stringToSafeString",
@@ -20704,13 +21087,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "String Function(String)"
+        "type": "String Function(String)",
+        "functionKind": 0
       },
       "dart:core::Error._throw": {
         "id": "function/dart:core::Error._throw",
         "kind": "function",
         "name": "_throw",
-        "size": 187,
+        "size": 252,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Error",
         "children": [],
@@ -20725,19 +21109,20 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Error__throw(error, stackTrace) {\n      error = A.wrapException(error);\n      error.stack = J.toString$0$(stackTrace);\n      throw error;\n      throw A.wrapException(\"unreachable\");\n    }",
-        "type": "Never Function(Object,StackTrace)"
+        "code": "Error__throw(error, stackTrace) {\n      error = A.wrapException(error);\n      if (error == null)\n        error = type$.Object._as(error);\n      error.stack = stackTrace.toString$0(0);\n      throw error;\n      throw A.wrapException(\"unreachable\");\n    }",
+        "type": "Never Function(Object,StackTrace)",
+        "functionKind": 0
       },
       "dart:core::Error.safeToString": {
         "id": "function/dart:core::Error.safeToString",
@@ -20765,7 +21150,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "Error_safeToString(object) {\n      if (typeof object == \"number\" || A._isBool(object) || object == null)\n        return J.toString$0$(object);\n      if (typeof object == \"string\")\n        return JSON.stringify(object);\n      return A.Error__objectToString(object);\n    }",
-        "type": "String Function(Object?)"
+        "type": "String Function(Object?)",
+        "functionKind": 0
       },
       "dart:core::Error.stackTrace": {
         "id": "function/dart:core::Error.stackTrace",
@@ -20782,18 +21168,19 @@
           "external": false
         },
         "returnType": "StackTrace?",
-        "inferredReturnType": "[null|subtype=StackTrace]",
+        "inferredReturnType": "[subtype=StackTrace]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$stackTrace() {\n      return A.getTraceFromException(this.$thrownJsError);\n    }",
-        "type": "StackTrace? Function()"
+        "type": "StackTrace? Function()",
+        "functionKind": 2
       },
       "dart:core::Error.throwWithStackTrace": {
         "id": "function/dart:core::Error.throwWithStackTrace",
         "kind": "function",
         "name": "throwWithStackTrace",
-        "size": 263,
+        "size": 0,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Error",
         "children": [],
@@ -20804,23 +21191,24 @@
           "external": false
         },
         "returnType": "Never",
-        "inferredReturnType": "[empty]",
+        "inferredReturnType": "[null]",
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subtype=StackTrace]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "Error_throwWithStackTrace(error, stackTrace) {\n      A.checkNotNullable(error, \"error\", type$.Object);\n      A.checkNotNullable(stackTrace, \"stackTrace\", type$.StackTrace);\n      A.Error__throw(error, stackTrace);\n      A.ReachabilityError$(string$._null_);\n    }",
-        "type": "Never Function(Object,StackTrace)"
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Never Function(Object,StackTrace)",
+        "functionKind": 0
       },
       "dart:core::Exception.Exception": {
         "id": "function/dart:core::Exception.Exception",
@@ -20848,7 +21236,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "Exception Function([dynamic])"
+        "type": "Exception Function([dynamic])",
+        "functionKind": 3
       },
       "dart:core::IndexError.IndexError": {
         "id": "function/dart:core::IndexError.IndexError",
@@ -20896,13 +21285,14 @@
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(int,dynamic,[String?,String?,int?])"
+        "type": "dynamic Function(int,dynamic,[String?,String?,int?])",
+        "functionKind": 3
       },
       "dart:core::IndexError._errorExplanation": {
         "id": "function/dart:core::IndexError._errorExplanation",
         "kind": "function",
         "name": "_errorExplanation",
-        "size": 387,
+        "size": 260,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::IndexError",
         "children": [],
@@ -20917,8 +21307,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_errorExplanation() {\n      var t1,\n        invalidValue = A._asIntS(this.invalidValue);\n      if (typeof invalidValue !== \"number\")\n        return invalidValue.$lt();\n      if (invalidValue < 0)\n        return \": index must not be negative\";\n      t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
-        "type": "String Function()"
+        "code": "get$_errorExplanation() {\n      if (A._asInt(this.invalidValue) < 0)\n        return \": index must not be negative\";\n      var t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::IndexError._errorName": {
         "id": "function/dart:core::IndexError._errorName",
@@ -20940,7 +21331,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::List.List.filled": {
         "id": "function/dart:core::List.List.filled",
@@ -20973,7 +21365,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "List_List$filled($length, fill, $E) {\n      var i,\n        result = J.JSArray_JSArray$fixed($length, $E);\n      if ($length !== 0 && fill != null)\n        for (i = 0; i < $length; ++i)\n          result[i] = fill;\n      return result;\n    }",
-        "type": "List<#A> Function<#A extends Object?>(int,#A,{bool growable})"
+        "type": "List<#A> Function<#A extends Object?>(int,#A,{bool growable})",
+        "functionKind": 3
       },
       "dart:core::List.List.from": {
         "id": "function/dart:core::List.List.from",
@@ -21001,7 +21394,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "List_List$from(elements, $E) {\n      var t1, _i,\n        list = A._setArrayType([], $E._eval$1(\"JSArray<0>\"));\n      for (t1 = elements.length, _i = 0; _i < t1; ++_i)\n        B.JSArray_methods.add$1(list, $E._as(elements[_i]));\n      return list;\n    }",
-        "type": "List<#A> Function<#A extends Object?>(Iterable<dynamic>,{bool growable})"
+        "type": "List<#A> Function<#A extends Object?>(Iterable<dynamic>,{bool growable})",
+        "functionKind": 3
       },
       "dart:core::List.List.generate": {
         "id": "function/dart:core::List.List.generate",
@@ -21034,7 +21428,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "List_List$generate($length, generator, $E) {\n      var i,\n        result = J.JSArray_JSArray$growable($length, $E);\n      for (i = 0; i < $length; ++i)\n        B.JSArray_methods.$indexSet(result, i, generator.call$1(i));\n      return result;\n    }",
-        "type": "List<#A> Function<#A extends Object?>(int,#A Function(int),{bool growable})"
+        "type": "List<#A> Function<#A extends Object?>(int,#A Function(int),{bool growable})",
+        "functionKind": 3
       },
       "dart:core::Null.hashCode": {
         "id": "function/dart:core::Null.hashCode",
@@ -21056,7 +21451,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(_) {\n      return A.Object.prototype.get$hashCode.call(this, this);\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::Null.toString": {
         "id": "function/dart:core::Null.toString",
@@ -21078,7 +21474,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"null\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::NullThrownError.NullThrownError": {
         "id": "function/dart:core::NullThrownError.NullThrownError",
@@ -21100,7 +21497,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:core::NullThrownError.toString": {
         "id": "function/dart:core::NullThrownError.toString",
@@ -21122,7 +21520,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Throw of null.\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::Object.==": {
         "id": "function/dart:core::Object.==",
@@ -21150,7 +21549,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "$eq(_, other) {\n      return this === other;\n    }",
-        "type": "bool Function(Object)"
+        "type": "bool Function(Object)",
+        "functionKind": 2
       },
       "dart:core::Object.hashCode": {
         "id": "function/dart:core::Object.hashCode",
@@ -21172,13 +21572,14 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "get$hashCode(_) {\n      return A.Primitives_objectHashCode(this);\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::Object.toString": {
         "id": "function/dart:core::Object.toString",
         "kind": "function",
         "name": "toString",
-        "size": 98,
+        "size": 93,
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::Object",
         "children": [],
@@ -21193,8 +21594,9 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0(_) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(this)) + \"'\";\n    }",
-        "type": "String Function()"
+        "code": "toString$0(_) {\n      return \"Instance of '\" + A.Primitives_objectTypeName(this) + \"'\";\n    }",
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::RangeError.RangeError.range": {
         "id": "function/dart:core::RangeError.RangeError.range",
@@ -21237,7 +21639,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(num,int?,int?,[String?,String?])"
+        "type": "dynamic Function(num,int?,int?,[String?,String?])",
+        "functionKind": 3
       },
       "dart:core::RangeError.RangeError.value": {
         "id": "function/dart:core::RangeError.RangeError.value",
@@ -21270,7 +21673,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function(num,[String?,String?])"
+        "type": "dynamic Function(num,[String?,String?])",
+        "functionKind": 3
       },
       "dart:core::RangeError._errorExplanation": {
         "id": "function/dart:core::RangeError._errorExplanation",
@@ -21292,7 +21696,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "get$_errorExplanation() {\n      var explanation,\n        start = this.start,\n        end = this.end;\n      if (start == null)\n        explanation = end != null ? \": Not less than or equal to \" + A.S(end) : \"\";\n      else if (end == null)\n        explanation = \": Not greater than or equal to \" + A.S(start);\n      else if (end > start)\n        explanation = \": Not in inclusive range \" + A.S(start) + \"..\" + A.S(end);\n      else\n        explanation = end < start ? \": Valid value range is empty\" : \": Only valid value is \" + A.S(start);\n      return explanation;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::RangeError._errorName": {
         "id": "function/dart:core::RangeError._errorName",
@@ -21314,7 +21719,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StackOverflowError.StackOverflowError": {
         "id": "function/dart:core::StackOverflowError.StackOverflowError",
@@ -21336,7 +21742,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function()"
+        "type": "dynamic Function()",
+        "functionKind": 3
       },
       "dart:core::StackOverflowError.stackTrace": {
         "id": "function/dart:core::StackOverflowError.stackTrace",
@@ -21358,7 +21765,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "get$stackTrace() {\n      return null;\n    }",
-        "type": "StackTrace? Function()"
+        "type": "StackTrace? Function()",
+        "functionKind": 2
       },
       "dart:core::StackOverflowError.toString": {
         "id": "function/dart:core::StackOverflowError.toString",
@@ -21380,7 +21788,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Stack Overflow\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StackTrace.current": {
         "id": "function/dart:core::StackTrace.current",
@@ -21402,7 +21811,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "StackTrace_current() {\n      var stackTrace, exception;\n      if (A.boolConversionCheck($.$get$_hasErrorStackProperty()))\n        return A.getTraceFromException(new Error());\n      try {\n        throw A.wrapException(\"\");\n      } catch (exception) {\n        stackTrace = A.getTraceFromException(exception);\n        return stackTrace;\n      }\n    }",
-        "type": "StackTrace Function()"
+        "type": "StackTrace Function()",
+        "functionKind": 0
       },
       "dart:core::StateError.StateError": {
         "id": "function/dart:core::StateError.StateError",
@@ -21430,7 +21840,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "StateError$(message) {\n      return new A.StateError(message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:core::StateError.toString": {
         "id": "function/dart:core::StateError.toString",
@@ -21452,7 +21863,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Bad state: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.StringBuffer": {
         "id": "function/dart:core::StringBuffer.StringBuffer",
@@ -21480,7 +21892,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
         "code": "",
-        "type": "dynamic Function([Object])"
+        "type": "dynamic Function([Object])",
+        "functionKind": 3
       },
       "dart:core::StringBuffer._writeAll": {
         "id": "function/dart:core::StringBuffer._writeAll",
@@ -21518,7 +21931,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "StringBuffer__writeAll(string, objects, separator) {\n      var iterator = J.get$iterator$a(objects);\n      if (!iterator.moveNext$0())\n        return string;\n      if (separator.length === 0) {\n        do\n          string += A.S(iterator.get$current());\n        while (iterator.moveNext$0());\n      } else {\n        string += A.S(iterator.get$current());\n        for (; iterator.moveNext$0();)\n          string = string + separator + A.S(iterator.get$current());\n      }\n      return string;\n    }",
-        "type": "String Function(String,Iterable<dynamic>,String)"
+        "type": "String Function(String,Iterable<dynamic>,String)",
+        "functionKind": 0
       },
       "dart:core::StringBuffer._writeOne": {
         "id": "function/dart:core::StringBuffer._writeOne",
@@ -21551,7 +21965,8 @@
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 4,
         "code": "",
-        "type": "String Function(String,Object?)"
+        "type": "String Function(String,Object?)",
+        "functionKind": 0
       },
       "dart:core::StringBuffer._writeString": {
         "id": "function/dart:core::StringBuffer._writeString",
@@ -21579,7 +21994,8 @@
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 7,
         "code": "",
-        "type": "void Function(String)"
+        "type": "void Function(String)",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.length": {
         "id": "function/dart:core::StringBuffer.length",
@@ -21601,7 +22017,8 @@
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
         "code": "get$length(_) {\n      return this._contents.length;\n    }",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.toString": {
         "id": "function/dart:core::StringBuffer.toString",
@@ -21623,7 +22040,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
         "code": "toString$0(_) {\n      var t1 = this._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.write": {
         "id": "function/dart:core::StringBuffer.write",
@@ -21651,7 +22069,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 7,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 2
       },
       "dart:core::StringBuffer.writeAll": {
         "id": "function/dart:core::StringBuffer.writeAll",
@@ -21684,7 +22103,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Iterable<dynamic>,[String])"
+        "type": "void Function(Iterable<dynamic>,[String])",
+        "functionKind": 2
       },
       "dart:core::UnsupportedError.UnsupportedError": {
         "id": "function/dart:core::UnsupportedError.UnsupportedError",
@@ -21712,7 +22132,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "UnsupportedError$(message) {\n      return new A.UnsupportedError(message);\n    }",
-        "type": "dynamic Function(String)"
+        "type": "dynamic Function(String)",
+        "functionKind": 3
       },
       "dart:core::UnsupportedError.toString": {
         "id": "function/dart:core::UnsupportedError.toString",
@@ -21734,7 +22155,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Unsupported operation: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::_Exception._Exception": {
         "id": "function/dart:core::_Exception._Exception",
@@ -21762,7 +22184,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
         "code": "",
-        "type": "dynamic Function([dynamic])"
+        "type": "dynamic Function([dynamic])",
+        "functionKind": 3
       },
       "dart:core::_Exception.toString": {
         "id": "function/dart:core::_Exception.toString",
@@ -21784,7 +22207,8 @@
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"Exception: \" + this.message;\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::_StringStackTrace.toString": {
         "id": "function/dart:core::_StringStackTrace.toString",
@@ -21806,7 +22230,8 @@
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
         "code": "toString$0(_) {\n      return \"\";\n    }",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::bool.hashCode": {
         "id": "function/dart:core::bool.hashCode",
@@ -21828,7 +22253,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "",
-        "type": "int Function()"
+        "type": "int Function()",
+        "functionKind": 2
       },
       "dart:core::bool.toString": {
         "id": "function/dart:core::bool.toString",
@@ -21850,7 +22276,8 @@
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
         "code": "",
-        "type": "String Function()"
+        "type": "String Function()",
+        "functionKind": 2
       },
       "dart:core::print": {
         "id": "function/dart:core::print",
@@ -21878,7 +22305,8 @@
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
         "code": "",
-        "type": "void Function(Object?)"
+        "type": "void Function(Object?)",
+        "functionKind": 0
       },
       "hello_world_deferred.dart::main": {
         "id": "function/hello_world_deferred.dart::main",
@@ -21894,13 +22322,14 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Future<void>*",
+        "returnType": "Future<void>",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
         "code": "main() {\n      var $async$goto = 0,\n        $async$completer = A._makeAsyncAwaitCompleter(type$.void);\n      var $async$main = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {\n        if ($async$errorCode === 1)\n          return A._asyncRethrow($async$result, $async$completer);\n        while (true)\n          switch ($async$goto) {\n            case 0:\n              // Function start\n              $async$goto = 2;\n              return A._asyncAwait(A.loadDeferredLibrary(\"deferred_import\"), $async$main);\n            case 2:\n              // returning from await.\n              A.checkDeferredIsLoaded(\"deferred_import\");\n              A.printString(C.C_Deferred);\n              // implicit return\n              return A._asyncReturn(null, $async$completer);\n          }\n      });\n      return A._asyncStartSync($async$main, $async$completer);\n    }",
-        "type": "Future<void>* Function()"
+        "type": "Future<void> Function()",
+        "functionKind": 0
       }
     },
     "typedef": {},
@@ -21989,18 +22418,6 @@
         "code": "",
         "type": "String"
       },
-      "dart:_internal::ReachabilityError._message": {
-        "id": "field/dart:_internal::ReachabilityError._message",
-        "kind": "field",
-        "name": "_message",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_internal::ReachabilityError",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"`null` encountered as the result from expression with type `Never`.\")",
-        "code": "",
-        "type": "String?"
-      },
       "dart:_internal::printToZone": {
         "id": "field/dart:_internal::printToZone",
         "kind": "field",
@@ -22013,66 +22430,6 @@
         "code": "",
         "type": "void Function(String)?"
       },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.erasedTypes",
-        "kind": "field",
-        "name": "erasedTypes",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"eT\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.evalCache": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.evalCache",
-        "kind": "field",
-        "name": "evalCache",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"eC\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
-        "kind": "field",
-        "name": "sharedEmptyArray",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"sEA\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
-        "kind": "field",
-        "name": "typeParameterVariances",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"tPV\")",
-        "code": "",
-        "type": "String"
-      },
-      "dart:_js_embedded_names::RtiUniverseFieldNames.typeRules": {
-        "id": "field/dart:_js_embedded_names::RtiUniverseFieldNames.typeRules",
-        "kind": "field",
-        "name": "typeRules",
-        "size": 0,
-        "outputUnit": "outputUnit/main",
-        "parent": "class/dart:_js_embedded_names::RtiUniverseFieldNames",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"tR\")",
-        "code": "",
-        "type": "String"
-      },
       "dart:_js_helper::BoundClosure._interceptor": {
         "id": "field/dart:_js_helper::BoundClosure._interceptor",
         "kind": "field",
@@ -22141,7 +22498,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::DeferredNotLoadedError",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
+        "inferredType": "[exact=JSString]",
         "code": "",
         "type": "String"
       },
@@ -22165,7 +22522,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::ExceptionAndStackTrace",
         "children": [],
-        "inferredType": "[null|subtype=StackTrace]",
+        "inferredType": "[subtype=StackTrace]",
         "code": "",
         "type": "StackTrace"
       },
@@ -22261,7 +22618,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::JsNoSuchMethodError",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
+        "inferredType": "[exact=JSString]",
         "code": "",
         "type": "String"
       },
@@ -22405,7 +22762,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:_js_helper::NullError",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
+        "inferredType": "[exact=JSString]",
         "code": "",
         "type": "String"
       },
@@ -22761,12 +23118,12 @@
         "id": "field/dart:_js_helper::_thisScriptBaseUrl",
         "kind": "field",
         "name": "_thisScriptBaseUrl",
-        "size": 179,
+        "size": 183,
         "outputUnit": "outputUnit/main",
         "parent": "library/dart:_js_helper::",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "_lazyFinal($, \"_thisScriptBaseUrl\", \"$get$_thisScriptBaseUrl\", () => {\n      var script = $.$get$thisScript();\n      return script.substring(0, script.lastIndexOf(\"/\"));\n    });\n",
+        "code": "_lazyFinal($, \"_thisScriptBaseUrl\", \"$get$_thisScriptBaseUrl\", () => {\n      var script = $.$get$thisScript();\n      return script.substring(0, script.lastIndexOf(\"/\") + 1);\n    });\n",
         "type": "String"
       },
       "dart:_js_helper::deferredLoadHook": {
@@ -22793,6 +23150,66 @@
         "code": "_lazyFinal($, \"thisScript\", \"$get$thisScript\", () => A._computeThisScript());\n",
         "type": "String?"
       },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.erasedTypes",
+        "kind": "field",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eT\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.evalCache",
+        "kind": "field",
+        "name": "evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eC\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
+        "kind": "field",
+        "name": "sharedEmptyArray",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"sEA\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
+        "kind": "field",
+        "name": "typeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"tPV\")",
+        "code": "",
+        "type": "String"
+      },
+      "dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules": {
+        "id": "field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules",
+        "kind": "field",
+        "name": "typeRules",
+        "size": 0,
+        "outputUnit": "outputUnit/main",
+        "parent": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"tR\")",
+        "code": "",
+        "type": "String"
+      },
       "dart:_late_helper::_Cell._name": {
         "id": "field/dart:_late_helper::_Cell._name",
         "kind": "field",
@@ -23053,7 +23470,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::AsyncError",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
+        "inferredType": "[subclass=Object]",
         "code": "",
         "type": "Object"
       },
@@ -23281,7 +23698,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:async::_StreamIterator",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
+        "inferredType": "[subclass=Object]",
         "code": "",
         "type": "Object?"
       },
@@ -23701,7 +24118,7 @@
         "outputUnit": "outputUnit/main",
         "parent": "class/dart:core::CyclicInitializationError",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
+        "inferredType": "[exact=JSString]",
         "code": "",
         "type": "String?"
       },
@@ -23866,7 +24283,7 @@
       "A.C_Deferred = \"Hello, World!\";\n": {
         "id": "constant/A.C_Deferred = \"Hello, World!\";\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 32,
         "outputUnit": "outputUnit/1",
         "code": "A.C_Deferred = \"Hello, World!\";\n"
@@ -23874,7 +24291,7 @@
       "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n": {
         "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 131,
         "outputUnit": "outputUnit/main",
         "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
@@ -23882,7 +24299,7 @@
       "B.C__RootZone = new A._RootZone();\n": {
         "id": "constant/B.C__RootZone = new A._RootZone();\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 35,
         "outputUnit": "outputUnit/main",
         "code": "B.C__RootZone = new A._RootZone();\n"
@@ -23890,7 +24307,7 @@
       "B.C__StringStackTrace = new A._StringStackTrace();\n": {
         "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 51,
         "outputUnit": "outputUnit/main",
         "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
@@ -23898,7 +24315,7 @@
       "B.Interceptor_methods = J.Interceptor.prototype;\n": {
         "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 49,
         "outputUnit": "outputUnit/main",
         "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
@@ -23906,7 +24323,7 @@
       "B.JSArray_methods = J.JSArray.prototype;\n": {
         "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 41,
         "outputUnit": "outputUnit/main",
         "code": "B.JSArray_methods = J.JSArray.prototype;\n"
@@ -23914,7 +24331,7 @@
       "B.JSInt_methods = J.JSInt.prototype;\n": {
         "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 37,
         "outputUnit": "outputUnit/main",
         "code": "B.JSInt_methods = J.JSInt.prototype;\n"
@@ -23922,7 +24339,7 @@
       "B.JSString_methods = J.JSString.prototype;\n": {
         "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 43,
         "outputUnit": "outputUnit/main",
         "code": "B.JSString_methods = J.JSString.prototype;\n"
@@ -23930,7 +24347,7 @@
       "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n": {
         "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
         "kind": "constant",
-        "name": null,
+        "name": "",
         "size": 59,
         "outputUnit": "outputUnit/main",
         "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
@@ -23986,7 +24403,7 @@
         "id": "closure/dart:_js_helper::_loadHunk._loadHunk_failure",
         "kind": "closure",
         "name": "_loadHunk_failure",
-        "size": 811,
+        "size": 806,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:_js_helper::_loadHunk",
         "function": "function/dart:_js_helper::_loadHunk._loadHunk_failure.call"
@@ -24049,7 +24466,7 @@
         "id": "closure/dart:async::Future.wait.Future_wait_handleError",
         "kind": "closure",
         "name": "Future_wait_handleError",
-        "size": 947,
+        "size": 981,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::Future.wait",
         "function": "function/dart:async::Future.wait.Future_wait_handleError.call"
@@ -24130,7 +24547,7 @@
         "id": "closure/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure%0",
         "kind": "closure",
         "name": "_Future__chainForeignFuture_closure",
-        "size": 348,
+        "size": 366,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::_Future._chainForeignFuture",
         "function": "function/dart:async::_Future._chainForeignFuture._Future__chainForeignFuture_closure.call%0"
@@ -24166,7 +24583,7 @@
         "id": "closure/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleError",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleError",
-        "size": 1198,
+        "size": 1107,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::_Future._propagateToListeners",
         "function": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleError.call"
@@ -24184,7 +24601,7 @@
         "id": "closure/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleWhenCompleteCallback",
-        "size": 1928,
+        "size": 1794,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::_Future._propagateToListeners",
         "function": "function/dart:async::_Future._propagateToListeners._Future__propagateToListeners_handleWhenCompleteCallback.call"
@@ -24238,7 +24655,7 @@
         "id": "closure/dart:async::_rootHandleError._rootHandleError_closure",
         "kind": "closure",
         "name": "_rootHandleError_closure",
-        "size": 346,
+        "size": 440,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::_rootHandleError",
         "function": "function/dart:async::_rootHandleError._rootHandleError_closure.call"
@@ -24247,7 +24664,7 @@
         "id": "closure/dart:async::_wrapJsFunctionForAsync._wrapJsFunctionForAsync_closure",
         "kind": "closure",
         "name": "_wrapJsFunctionForAsync_closure",
-        "size": 310,
+        "size": 309,
         "outputUnit": "outputUnit/main",
         "parent": "function/dart:async::_wrapJsFunctionForAsync",
         "function": "function/dart:async::_wrapJsFunctionForAsync._wrapJsFunctionForAsync_closure.call"
@@ -25176,314 +25593,6 @@
         "mask": null
       }
     ],
-    "field/dart:_internal::NotNullableError._name": [
-      {
-        "id": "field/dart:_internal::NotNullableError._name",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::throwCyclicInit",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_late_helper::throwLateFieldADI",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      }
-    ],
-    "field/dart:_internal::ReachabilityError._message": [
-      {
-        "id": "field/dart:_internal::ReachabilityError._message",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::throwCyclicInit",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_late_helper::throwLateFieldADI",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      }
-    ],
     "field/dart:_js_helper::BoundClosure._interceptor": [
       {
         "id": "field/dart:_js_helper::BoundClosure._interceptor",
@@ -29730,9 +29839,9 @@
         "mask": null
       }
     ],
-    "field/dart:_rti::_Type._rti": [
+    "field/dart:async::AsyncError.error": [
       {
-        "id": "field/dart:_rti::_Type._rti",
+        "id": "field/dart:async::AsyncError.error",
         "mask": null
       },
       {
@@ -29884,20 +29993,6 @@
         "mask": null
       }
     ],
-    "field/dart:async::AsyncError.error": [
-      {
-        "id": "field/dart:async::AsyncError.error",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::throwCyclicInit",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_late_helper::throwLateFieldADI",
-        "mask": null
-      }
-    ],
     "field/dart:async::AsyncError.stackTrace": [
       {
         "id": "field/dart:async::AsyncError.stackTrace",
@@ -35834,6 +35929,150 @@
       {
         "id": "field/dart:_interceptors::ArrayIterator._current",
         "mask": null
+      },
+      {
+        "id": "field/dart:_rti::Rti._precomputed1",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
       }
     ],
     "function/dart:_interceptors::ArrayIterator.moveNext": [
@@ -35884,10 +36123,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_interceptors::JSArray.JSArray.fixed": [
@@ -37246,7 +37481,177 @@
     ],
     "function/dart:_interceptors::JSString.+": [
       {
-        "id": "function/dart:_js_helper::wrapException",
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
+      }
+    ],
+    "function/dart:_internal::LateError.toString": [
+      {
+        "id": "field/dart:_internal::LateError._message",
+        "mask": null
+      }
+    ],
+    "function/dart:_internal::checkNotNullable": [
+      {
+        "id": "function/dart:_internal::NotNullableError.NotNullableError",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_internal::NotNullableError.NotNullableError",
+        "mask": "inlined"
+      }
+    ],
+    "function/dart:_js_helper::BoundClosure.==": [
+      {
+        "id": "field/dart:_js_helper::BoundClosure._receiver",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_js_helper::BoundClosure._target",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_js_helper::BoundClosure._target",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_js_helper::BoundClosure._target",
         "mask": null
       },
       {
@@ -37388,76 +37793,6 @@
       {
         "id": "function/dart:_rti::instanceType",
         "mask": null
-      },
-      {
-        "id": "function/dart:core::ArgumentError.ArgumentError.value",
-        "mask": null
-      }
-    ],
-    "function/dart:_internal::LateError.toString": [
-      {
-        "id": "field/dart:_internal::LateError._message",
-        "mask": null
-      }
-    ],
-    "function/dart:_internal::NotNullableError.toString": [
-      {
-        "id": "field/dart:_internal::NotNullableError._name",
-        "mask": null
-      },
-      {
-        "id": "field/dart:_rti::Rti._precomputed1",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Type.toString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::createRuntimeType",
-        "mask": null
-      }
-    ],
-    "function/dart:_internal::ReachabilityError.toString": [
-      {
-        "id": "field/dart:_internal::ReachabilityError._message",
-        "mask": null
-      }
-    ],
-    "function/dart:_internal::checkNotNullable": [
-      {
-        "id": "function/dart:_internal::NotNullableError.NotNullableError",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_internal::NotNullableError.NotNullableError",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_js_helper::wrapException",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      }
-    ],
-    "function/dart:_js_helper::BoundClosure.==": [
-      {
-        "id": "field/dart:_js_helper::BoundClosure._receiver",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::BoundClosure._target",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::BoundClosure._target",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_js_helper::BoundClosure._target",
-        "mask": "inlined"
       }
     ],
     "function/dart:_js_helper::BoundClosure._computeFieldNamed": [
@@ -37574,10 +37909,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure._computeSignatureFunctionNewRti": [
@@ -37586,302 +37917,14 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.cspForwardCall": [
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverOf",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.cspForwardInterceptedCall": [
@@ -37902,162 +37945,18 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::Closure.forwardCallTo": [
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::BoundClosure.receiverFieldName",
@@ -38080,10 +37979,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._bind",
         "mask": null
       },
@@ -38440,10 +38335,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._bind",
         "mask": null
       },
@@ -38594,10 +38485,6 @@
       {
         "id": "field/dart:_js_helper::DeferredNotLoadedError.libraryName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::JsLinkedHashMap.[]": [
@@ -38635,155 +38522,15 @@
       },
       {
         "id": "function/dart:_js_helper::JsLinkedHashMap._isStringKey",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_js_helper::JsLinkedHashMap._isStringKey",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::JsLinkedHashMap.internalGet",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::JsLinkedHashMap.[]=": [
@@ -39778,10 +39525,6 @@
       {
         "id": "field/dart:_js_helper::JsNoSuchMethodError._receiver",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::LinkedHashMapKeyIterable.length": [
@@ -39802,10 +39545,6 @@
       {
         "id": "field/dart:_js_helper::NullError._method",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::NullThrownFromJavaScriptException.toString": [
@@ -40056,14 +39795,6 @@
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:_internal::NotNullableError.toString",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/dart:_internal::ReachabilityError.toString",
-        "mask": "[subclass=Object]"
-      },
-      {
         "id": "function/dart:_js_helper::BoundClosure.toString",
         "mask": "[subclass=Object]"
       },
@@ -40112,18 +39843,10 @@
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:_js_helper::wrapException",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Error.toString",
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:_rti::_Type.toString",
-        "mask": "[subclass=Object]"
-      },
-      {
         "id": "function/dart:async::AsyncError.toString",
         "mask": "[subclass=Object]"
       },
@@ -40140,10 +39863,6 @@
         "mask": "[subclass=Object]"
       },
       {
-        "id": "function/dart:core::ArgumentError.ArgumentError.value",
-        "mask": null
-      },
-      {
         "id": "function/dart:core::ArgumentError.toString",
         "mask": "[subclass=Object]"
       },
@@ -40261,151 +39980,11 @@
       },
       {
         "id": "function/dart:_interceptors::JSString.isEmpty",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_interceptors::JSString.isEmpty",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
+        "mask": "inlined"
       }
     ],
     "function/dart:_js_helper::_AssertionError.toString": [
@@ -40728,152 +40307,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::requiresPreamble",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_js_helper::_computeThisScriptFromTrace": [
@@ -41028,10 +40463,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::convertDartClosureToJS",
         "mask": null
       },
@@ -41625,11 +41056,11 @@
       },
       {
         "id": "function/dart:_js_helper::NullError.NullError",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_js_helper::NullError.NullError",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::S",
@@ -41641,11 +41072,11 @@
       },
       {
         "id": "function/dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_js_helper::contains",
@@ -41867,7 +41298,7 @@
       },
       {
         "id": "function/dart:collection::_LinkedHashSet.contains",
-        "mask": "[null|subclass=_LinkedHashSet]"
+        "mask": "[subclass=_LinkedHashSet]"
       }
     ],
     "function/dart:_js_helper::closureFromTearOff": [
@@ -42475,7 +41906,7 @@
       },
       {
         "id": "function/dart:collection::_LinkedHashSet.add",
-        "mask": "[null|subclass=_LinkedHashSet]"
+        "mask": "[subclass=_LinkedHashSet]"
       }
     ],
     "function/dart:_js_helper::loadDeferredLibrary.loadDeferredLibrary_initializeSomeLoadedHunks.call": [
@@ -43220,14 +42651,6 @@
         "mask": "[null|subclass=Object]"
       },
       {
-        "id": "function/dart:_internal::NotNullableError.toString",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/dart:_internal::ReachabilityError.toString",
-        "mask": "[null|subclass=Object]"
-      },
-      {
         "id": "function/dart:_js_helper::BoundClosure.toString",
         "mask": "[null|subclass=Object]"
       },
@@ -43280,10 +42703,6 @@
         "mask": "[null|subclass=Object]"
       },
       {
-        "id": "function/dart:_rti::_Type.toString",
-        "mask": "[null|subclass=Object]"
-      },
-      {
         "id": "function/dart:async::AsyncError.toString",
         "mask": "[null|subclass=Object]"
       },
@@ -43386,6 +42805,146 @@
       {
         "id": "function/dart:_js_helper::saveStackTrace",
         "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
       }
     ],
     "function/dart:_js_helper::wrapException": [
@@ -43582,10 +43141,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::throwExpression",
         "mask": null
       }
@@ -43750,10 +43305,6 @@
       {
         "id": "function/dart:_rti::_Utils.asString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
       }
     ],
     "function/dart:_rti::Rti._getFunctionParameters": [
@@ -44600,10 +44151,6 @@
     ],
     "function/dart:_rti::_Error.compose": [
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_rtiToString",
         "mask": null
       },
@@ -44751,17 +44298,17 @@
     "function/dart:_rti::_Parser.handleDigit": [
       {
         "id": "function/dart:_recipe_syntax::Recipe.digitValue",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
         "mask": null
       },
       {
+        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_recipe_syntax::Recipe.digitValue",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_recipe_syntax::Recipe.isDigit",
         "mask": null
       },
@@ -44770,14 +44317,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Parser.charCodeAt",
         "mask": null
       },
@@ -44787,143 +44326,11 @@
       },
       {
         "id": "function/dart:_rti::_Parser.push",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Parser.push",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
+        "mask": "inlined"
       }
     ],
     "function/dart:_rti::_Parser.handleExtendedOperations": [
@@ -46180,14 +45587,6 @@
     ],
     "function/dart:_rti::_Parser.toType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Parser.indexToType",
         "mask": null
       },
@@ -46213,11 +45612,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.asString",
@@ -46242,138 +45641,6 @@
       {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Parser.toTypes": [
@@ -46436,16 +45703,6 @@
         "mask": "inlined"
       }
     ],
-    "function/dart:_rti::_Type.toString": [
-      {
-        "id": "field/dart:_rti::_Type._rti",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_rtiToString",
-        "mask": null
-      }
-    ],
     "function/dart:_rti::_TypeError._TypeError.forType": [
       {
         "id": "function/dart:_rti::_Error.compose",
@@ -46516,14 +45773,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getCanonicalRecipe",
         "mask": null
       },
@@ -46541,10 +45790,6 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
@@ -46556,7 +45801,7 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayLength",
+        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": "inlined"
       },
       {
@@ -46564,6 +45809,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.asBool",
         "mask": null
       },
@@ -46586,138 +45835,6 @@
       {
         "id": "function/dart:_rti::_Utils.asString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe._canonicalRecipeOfAny": [
@@ -49180,14 +48297,6 @@
     ],
     "function/dart:_rti::_Universe.findErasedType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe._canonicalRecipeOfErased",
         "mask": null
       },
@@ -49237,11 +48346,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.isNum",
@@ -49254,147 +48363,11 @@
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe.findRule": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::_Universe._findRule",
         "mask": null
       },
       {
@@ -49403,10 +48376,6 @@
       },
       {
         "id": "function/dart:_rti::_Universe._findRule",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Universe._findRule",
         "mask": "inlined"
       },
       {
@@ -49428,138 +48397,6 @@
       {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_Universe.findTypeParameterVariances": [
@@ -49876,14 +48713,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -49896,144 +48725,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asDoubleQ": [
@@ -50042,14 +48739,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50062,144 +48751,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asDoubleS": [
@@ -50208,14 +48765,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50228,144 +48777,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asInt": [
@@ -50374,14 +48791,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50394,144 +48803,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asIntQ": [
@@ -50540,14 +48817,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50560,144 +48829,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asIntS": [
@@ -50706,14 +48843,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50726,144 +48855,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isInt",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isInt",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asNum": [
@@ -50872,14 +48869,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -50892,144 +48881,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asNumQ": [
@@ -51038,11 +48895,29 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
+        "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::_Utils.asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asNum",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": "inlined"
+      }
+    ],
+    "function/dart:_rti::_asNumS": [
+      {
+        "id": "function/dart:_js_helper::wrapException",
         "mask": null
       },
       {
@@ -51058,147 +48933,15 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isNum",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isNum",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
-    "function/dart:_rti::_asNumS": [
+    "function/dart:_rti::_asObject": [
       {
         "id": "function/dart:_js_helper::wrapException",
         "mask": null
@@ -51216,164 +48959,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asNum",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      }
-    ],
-    "function/dart:_rti::_asObject": [
-      {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_arrayInstanceType",
         "mask": null
       },
@@ -51512,14 +49097,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -51532,144 +49109,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asStringQ": [
@@ -51678,14 +49123,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -51698,144 +49135,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_asStringS": [
@@ -51844,14 +49149,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_TypeError._TypeError.forType",
         "mask": null
       },
@@ -51864,144 +49161,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isString",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isString",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_failedAsCheck": [
@@ -52082,14 +49247,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": "[null|exact=JSString]"
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::ioore",
         "mask": null
       },
@@ -52159,18 +49316,6 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
@@ -52182,6 +49327,30 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.arrayLength",
         "mask": "inlined"
       },
@@ -52190,18 +49359,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.asBool",
         "mask": null
       },
@@ -52215,6 +49372,18 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
       {
@@ -52222,26 +49391,14 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.asString",
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.isIdentical",
         "mask": null
       },
@@ -52421,11 +49578,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._isCheck",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._isCheck",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
@@ -52570,6 +49727,10 @@
       {
         "id": "function/dart:_rti::instanceType",
         "mask": null
+      },
+      {
+        "id": "function/dart:_rti::isNullable",
+        "mask": null
       }
     ],
     "function/dart:_rti::_generalIsTestImplementation": [
@@ -52612,11 +49773,7 @@
     ],
     "function/dart:_rti::_generalNullableAsCheckImplementation": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
+        "id": "function/dart:_rti::Rti._isCheck",
         "mask": null
       },
       {
@@ -52624,7 +49781,7 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::Rti._isCheck",
+        "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
       {
@@ -52632,144 +49789,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_failedAsCheck",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_generalNullableIsTestImplementation": [
@@ -52984,6 +50005,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::isNullable",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::isObjectType",
         "mask": null
       },
@@ -53320,14 +50345,6 @@
     ],
     "function/dart:_rti::_instanceTypeFromConstructorMiss": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe.findErasedType",
         "mask": null
       },
@@ -53336,110 +50353,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isClosure",
         "mask": null
       },
@@ -53448,40 +50361,12 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
+        "id": "function/dart:_rti::_theUniverse",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_theUniverse",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_theUniverse",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isClosure": [
@@ -53912,14 +50797,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getInterfaceName",
         "mask": "inlined"
       },
@@ -53937,17 +50814,17 @@
       },
       {
         "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::Rti._getInterfaceTypeArguments",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::Rti._getPrimary",
         "mask": null
       },
@@ -53977,11 +50854,11 @@
       },
       {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Universe.findTypeParameterVariances",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Universe.sharedEmptyArray",
@@ -53997,14 +50874,10 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayLength",
         "mask": null
       },
       {
@@ -54012,6 +50885,10 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayLength",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::_Utils.arraySetAt",
         "mask": null
       },
@@ -54021,17 +50898,17 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asString",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.asString",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:_rti::_Utils.isString",
         "mask": "inlined"
       },
@@ -54041,151 +50918,19 @@
       },
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.newArrayOrEmpty",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_areArgumentsSubtypes",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_theUniverse",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isListTestViaProperty": [
@@ -54194,14 +50939,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
         "mask": null
       },
@@ -54211,11 +50948,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.instanceOf",
@@ -54230,110 +50967,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
@@ -54342,36 +50975,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_nullIs",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_isSubtype": [
@@ -54401,11 +51006,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._getFutureOrArgument",
@@ -54480,6 +51085,10 @@
         "mask": "inlined"
       },
       {
+        "id": "function/dart:_rti::Rti._getQuestionFromStar",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::Rti._getRest",
         "mask": null
       },
@@ -54489,10 +51098,6 @@
       },
       {
         "id": "function/dart:_rti::Rti._getStarArgument",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._getStarArgument",
         "mask": "inlined"
       },
       {
@@ -54500,22 +51105,26 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
+        "id": "function/dart:_rti::Rti._getStarArgument",
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:_rti::_Utils.arrayAt",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.arrayConcat",
         "mask": null
       },
@@ -54529,11 +51138,11 @@
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.arrayLength",
@@ -54782,14 +51391,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._getSpecializedTestResource",
         "mask": null
       },
@@ -54799,118 +51400,18 @@
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.asRti",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::_Utils.instanceOf",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
+        "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
       {
@@ -54918,40 +51419,8 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isDartObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_nullIs",
         "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::_nullIs": [
@@ -55166,10 +51635,6 @@
     ],
     "function/dart:_rti::_rtiArrayToString": [
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Utils.arrayAt",
         "mask": null
       },
@@ -55228,18 +51693,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_interceptors::JSString.+",
-        "mask": "[null|exact=JSString]"
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::ioore",
         "mask": null
       },
@@ -55261,11 +51714,11 @@
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBase",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::Rti._getGenericFunctionBounds",
@@ -56590,80 +53043,6 @@
         "mask": null
       }
     ],
-    "function/dart:_rti::createRuntimeType": [
-      {
-        "id": "field/dart:_rti::Rti._cachedRuntimeType",
-        "mask": null
-      },
-      {
-        "id": "field/dart:_rti::Rti._cachedRuntimeType",
-        "mask": null
-      },
-      {
-        "id": "field/dart:_rti::Rti._canonicalRecipe",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._getCachedRuntimeType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._getCachedRuntimeType",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::Rti._getCachedRuntimeType",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::Rti._getCanonicalRecipe",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._getCanonicalRecipe",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::Rti._setCachedRuntimeType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._setCachedRuntimeType",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Type._Type",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Type._Type",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Type._Type",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Type._Type",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_Universe.eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Utils.asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_theUniverse",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_theUniverse",
-        "mask": "inlined"
-      }
-    ],
     "function/dart:_rti::evalInInstance": [
       {
         "id": "function/dart:_rti::_rtiEval",
@@ -56690,27 +53069,15 @@
     ],
     "function/dart:_rti::getTypeFromTypesTable": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Universe.eval",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_rti::_Utils.arrayAt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_Utils.arraySetAt",
         "mask": "inlined"
       },
       {
@@ -56718,6 +53085,10 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::_Utils.arraySetAt",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
@@ -56742,130 +53113,6 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_theUniverse",
         "mask": null
       },
@@ -56876,26 +53123,10 @@
       {
         "id": "function/dart:_rti::findType",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::instanceOrFunctionType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::Rti._isUnionOfFunctionType",
         "mask": null
       },
@@ -56904,110 +53135,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isClosure",
         "mask": null
       },
@@ -57016,52 +53143,16 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::closureFunctionType",
         "mask": null
       },
       {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::instanceType",
         "mask": null
       }
     ],
     "function/dart:_rti::instanceType": [
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_Utils.asRti",
         "mask": null
       },
@@ -57082,106 +53173,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_instanceType",
         "mask": null
       },
@@ -57194,44 +53185,12 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
         "id": "function/dart:_rti::_isDartObject",
         "mask": null
       },
       {
         "id": "function/dart:_rti::_isDartObject",
         "mask": "inlined"
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
       }
     ],
     "function/dart:_rti::isBottomType": [
@@ -58216,10 +54175,150 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
         "id": "function/dart:_rti::Rti._eval",
         "mask": null
       },
       {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
+      },
+      {
         "id": "function/dart:async::_Future._Future.immediate",
         "mask": null
       },
@@ -58483,7 +54582,7 @@
       },
       {
         "id": "function/dart:async::_Future.then",
-        "mask": "[null|exact=_Future]"
+        "mask": "[exact=_Future]"
       },
       {
         "id": "function/dart:async::_RootZone.errorCallback",
@@ -59200,10 +55299,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:async::AsyncError.defaultStackTrace",
-        "mask": null
-      },
-      {
         "id": "function/dart:async::_Future._asyncCompleteError",
         "mask": null
       },
@@ -63076,10 +59171,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:async::_Future._chainForeignFuture",
-        "mask": null
-      },
-      {
         "id": "function/dart:async::_Future._cloneResult",
         "mask": null
       },
@@ -63089,6 +59180,10 @@
       },
       {
         "id": "function/dart:async::_Future._error",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:async::_Future._error",
         "mask": null
       },
       {
@@ -63096,34 +59191,30 @@
         "mask": "inlined"
       },
       {
-        "id": "function/dart:async::_Future._error",
-        "mask": "inlined"
+        "id": "function/dart:async::_Future._hasError",
+        "mask": null
       },
       {
         "id": "function/dart:async::_Future._hasError",
         "mask": "inlined"
       },
       {
-        "id": "function/dart:async::_Future._hasError",
-        "mask": null
+        "id": "function/dart:async::_Future._ignoreError",
+        "mask": "inlined"
       },
       {
         "id": "function/dart:async::_Future._ignoreError",
         "mask": null
       },
       {
-        "id": "function/dart:async::_Future._ignoreError",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:async::_Future._isComplete",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:async::_Future._isComplete",
         "mask": null
       },
       {
+        "id": "function/dart:async::_Future._isComplete",
+        "mask": "inlined"
+      },
+      {
         "id": "function/dart:async::_Future._propagateToListeners",
         "mask": null
       },
@@ -63274,10 +59365,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::boolConversionCheck",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::getTraceFromException",
         "mask": null
       },
@@ -63431,21 +59518,21 @@
       },
       {
         "id": "function/dart:async::_Future._error",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:async::_Future._error",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:async::_Future._error",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/dart:async::_Future._error",
         "mask": null
       },
       {
-        "id": "function/dart:async::_Future._error",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:async::_Future._error",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/dart:async::_Future._error",
-        "mask": "inlined"
-      },
-      {
         "id": "function/dart:async::_FutureListener._onError",
         "mask": null
       },
@@ -66193,21 +62280,21 @@
       },
       {
         "id": "function/dart:async::_AsyncAwaitCompleter.completeError",
-        "mask": "[null|subtype=Completer]"
+        "mask": "[subtype=Completer]"
       },
       {
         "id": "function/dart:async::_Completer.completeError",
-        "mask": "[null|subtype=Completer]"
+        "mask": "[subtype=Completer]"
       }
     ],
     "function/dart:async::_asyncReturn": [
       {
         "id": "function/dart:async::_AsyncAwaitCompleter.complete",
-        "mask": "[null|subtype=Completer]"
+        "mask": "[subtype=Completer]"
       },
       {
         "id": "function/dart:async::_AsyncCompleter.complete",
-        "mask": "[null|subtype=Completer]"
+        "mask": "[subtype=Completer]"
       }
     ],
     "function/dart:async::_asyncStartSync": [
@@ -66812,12 +62899,28 @@
     ],
     "function/dart:async::_rootHandleError._rootHandleError_closure.call": [
       {
-        "id": "function/dart:_internal::ReachabilityError.ReachabilityError",
+        "id": "function/dart:_internal::checkNotNullable",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_internal::checkNotNullable",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:core::Error._throw",
         "mask": null
       },
       {
         "id": "function/dart:core::Error.throwWithStackTrace",
         "mask": null
+      },
+      {
+        "id": "function/dart:core::Error.throwWithStackTrace",
+        "mask": "inlined"
       }
     ],
     "function/dart:async::_rootRun": [
@@ -69448,8 +65551,152 @@
     ],
     "function/dart:collection::_LinkedHashSetIterator.current": [
       {
+        "id": "field/dart:_rti::Rti._precomputed1",
+        "mask": null
+      },
+      {
         "id": "field/dart:collection::_LinkedHashSetIterator._current",
         "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
       }
     ],
     "function/dart:collection::_LinkedHashSetIterator.moveNext": [
@@ -69744,10 +65991,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
-      },
-      {
         "id": "function/dart:_js_helper::StaticClosure.toString",
         "mask": "[subclass=Closure]"
       }
@@ -69760,12 +66003,8 @@
     ],
     "function/dart:core::Error._throw": [
       {
-        "id": "function/dart:_interceptors::JSNull.toString",
-        "mask": "[null|subtype=StackTrace]"
-      },
-      {
         "id": "function/dart:_js_helper::_StackTrace.toString",
-        "mask": "[null|subtype=StackTrace]"
+        "mask": "[subtype=StackTrace]"
       },
       {
         "id": "function/dart:_js_helper::wrapException",
@@ -69776,12 +66015,152 @@
         "mask": null
       },
       {
+        "id": "function/dart:_rti::Rti._bind",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::Rti._eval",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_arrayInstanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asBoolS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDouble",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asDoubleS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asIntS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asNumS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringQ",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asStringS",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_asTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedAsCheck",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_installSpecializedIsTest",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_instanceType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isBool",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isInt",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isNum",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isObject",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isString",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::_isTop",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::findType",
+        "mask": null
+      },
+      {
+        "id": "function/dart:_rti::instanceType",
+        "mask": null
+      },
+      {
         "id": "function/dart:core::Object.toString",
-        "mask": "[null|subtype=StackTrace]"
+        "mask": "[subtype=StackTrace]"
       },
       {
         "id": "function/dart:core::_StringStackTrace.toString",
-        "mask": "[null|subtype=StackTrace]"
+        "mask": "[subtype=StackTrace]"
       }
     ],
     "function/dart:core::Error.safeToString": [
@@ -69980,28 +66359,6 @@
         "mask": null
       }
     ],
-    "function/dart:core::Error.throwWithStackTrace": [
-      {
-        "id": "function/dart:_internal::ReachabilityError.ReachabilityError",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_internal::checkNotNullable",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_internal::checkNotNullable",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:core::Error._throw",
-        "mask": null
-      }
-    ],
     "function/dart:core::Exception.Exception": [
       {
         "id": "function/dart:core::_Exception._Exception",
@@ -70018,7 +66375,7 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::_asIntS",
+        "id": "function/dart:_rti::_asInt",
         "mask": null
       }
     ],
@@ -70364,10 +66721,6 @@
       {
         "id": "function/dart:_js_helper::Primitives.objectTypeName",
         "mask": null
-      },
-      {
-        "id": "function/dart:_js_helper::S",
-        "mask": null
       }
     ],
     "function/dart:core::RangeError._errorExplanation": [
@@ -70563,11 +66916,11 @@
       },
       {
         "id": "function/dart:_interceptors::JSString.isEmpty",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/dart:_interceptors::JSString.isEmpty",
-        "mask": null
+        "mask": "inlined"
       },
       {
         "id": "function/dart:_js_helper::Primitives.stringConcatUnchecked",
@@ -70578,146 +66931,6 @@
         "mask": null
       },
       {
-        "id": "function/dart:_rti::Rti._bind",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::Rti._eval",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_arrayInstanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asBoolS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDouble",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asDoubleS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asIntS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asNumS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringQ",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asStringS",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_asTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableAsCheckImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_generalNullableIsTestImplementation",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedAsCheck",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_installSpecializedIsTest",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_instanceType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isBool",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isInt",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isNum",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isObject",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isString",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::_isTop",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::findType",
-        "mask": null
-      },
-      {
-        "id": "function/dart:_rti::instanceType",
-        "mask": null
-      },
-      {
         "id": "function/dart:collection::_LinkedHashSet.iterator",
         "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
       },
@@ -70945,7 +67158,7 @@
       "id": "outputUnit/1",
       "kind": "outputUnit",
       "name": "1",
-      "size": 596,
+      "size": 594,
       "filename": "hello_world_deferred.js_1.part.js",
       "imports": [
         "deferred_import"
@@ -70955,7 +67168,7 @@
       "id": "outputUnit/main",
       "kind": "outputUnit",
       "name": "main",
-      "size": 190719,
+      "size": 188050,
       "filename": "hello_world_deferred.js",
       "imports": []
     }
@@ -70974,11 +67187,11 @@
   "dump_minor_version": 1,
   "program": {
     "entrypoint": "function/hello_world_deferred.dart::main",
-    "size": 191315,
+    "size": 188644,
     "dart2jsVersion": null,
-    "compilationMoment": "2022-04-19 11:39:03.126775",
-    "compilationDuration": 2121195,
-    "toJsonDuration": 3000,
+    "compilationMoment": "2022-05-26 21:07:11.259922",
+    "compilationDuration": 4395336,
+    "toJsonDuration": 9000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
     "isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 72d4e7b..6579ea9 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -22,11 +22,11 @@
       final proto = AllInfoProtoCodec().encode(decoded);
 
       expect(proto.program.entrypointId, isNotNull);
-      expect(proto.program.size, 91189);
+      expect(proto.program.size, 90362);
       expect(proto.program.compilationMoment.toInt(),
-          DateTime.parse("2022-04-19 11:35:28.623405").microsecondsSinceEpoch);
+          DateTime.parse("2022-05-26 21:08:43.608041").microsecondsSinceEpoch);
       expect(proto.program.toProtoDuration.toInt(),
-          Duration(milliseconds: 2).inMicroseconds);
+          Duration(milliseconds: 3).inMicroseconds);
       expect(proto.program.dumpInfoDuration.toInt(),
           Duration(milliseconds: 0).inMicroseconds);
       expect(proto.program.noSuchMethodEnabled, isFalse);
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
index 80a0870..bb80faf 100644
--- a/pkg/dart2js_info/test/parse_test.dart
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -22,11 +22,11 @@
       expect(program, isNotNull);
 
       expect(program.entrypoint, isNotNull);
-      expect(program.size, 91189);
+      expect(program.size, 90362);
       expect(program.compilationMoment,
-          DateTime.parse("2022-04-19 11:35:28.623405"));
-      expect(program.compilationDuration, Duration(microseconds: 1461256));
-      expect(program.toJsonDuration, Duration(milliseconds: 2));
+          DateTime.parse("2022-05-26 21:08:43.608041"));
+      expect(program.compilationDuration, Duration(microseconds: 3177312));
+      expect(program.toJsonDuration, Duration(milliseconds: 3));
       expect(program.dumpInfoDuration, Duration(seconds: 0));
       expect(program.noSuchMethodEnabled, false);
       expect(program.minified, false);
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index 294b9a3..b70c9c1 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -2,10 +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.
 
-// @dart = 2.9
-
 import 'dart:collection' show HashMap, HashSet, Queue;
 
+import 'package:collection/collection.dart' show IterableNullableExtension;
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 import 'package:kernel/type_environment.dart';
@@ -109,7 +108,7 @@
         HashMap.fromIterables(allClasses, allClasses.map(getInstanceFieldMap));
 
     for (var class_ in allClasses) {
-      Set<Class> superclasses;
+      Set<Class>? superclasses;
 
       // Visit accessors in the current class, and see if they override an
       // otherwise private field.
@@ -131,15 +130,15 @@
 
         if (superclasses == null) {
           superclasses = <Class>{};
-          void collectSupertypes(Class c) {
-            if (!superclasses.add(c)) return;
+          void collectSupertypes(Class c, Set<Class> supers) {
+            if (!supers.add(c)) return;
             var s = c.superclass;
-            if (s != null) collectSupertypes(s);
+            if (s != null) collectSupertypes(s, supers);
             var m = c.mixedInClass;
-            if (m != null) collectSupertypes(m);
+            if (m != null) collectSupertypes(m, supers);
           }
 
-          collectSupertypes(class_);
+          collectSupertypes(class_, superclasses);
           superclasses.remove(class_);
           superclasses.removeWhere((s) => s.enclosingLibrary != library);
         }
@@ -147,9 +146,8 @@
         // Look in all super classes to see if we're overriding a field in our
         // library, if so mark that field as overridden.
         var name = member.name.text;
-        _overriddenPrivateFields.addAll(superclasses
-            .map((c) => allFields[c][name])
-            .where((f) => f != null));
+        _overriddenPrivateFields.addAll(
+            superclasses.map((c) => allFields[c]![name]).whereNotNull());
       }
     }
   }
@@ -159,7 +157,7 @@
     // If the field was marked non-virtual, we know for sure.
     if (field.isStatic) return false;
 
-    var class_ = field.enclosingClass;
+    var class_ = field.enclosingClass!;
     if (class_.isEnum) {
       // Enums are not extensible.
       return false;
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index bdc9ea7..e3d8120 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1364,7 +1364,6 @@
 tex
 textualize
 textualized
-tflite
 th
 therein
 they'll
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart
index f9ddb1b..e7aa041 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart
@@ -1,7 +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.9
+
 bool enableRead = true;
 
 int read(int value) => enableRead ? value : -1;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline.expect
index 52eeaa7..d9d43c9 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool enableRead = true;
 int read(int value) => enableRead ? value : -1;
 int method1() => 0;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline_modelled.expect
index 7b9b8af..fafec6e 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool enableRead = true;
 callField(Class c) {}
 callGetter(Class c) {}
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
index 90a2cad..b9c0727 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
+static method callField(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::field1a}());
-  self::expect(0, c.{self::Class::field1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
+static method callGetter(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::getter1a}());
-  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect
index 90a2cad..b9c0727 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
+static method callField(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::field1a}());
-  self::expect(0, c.{self::Class::field1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
+static method callGetter(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::getter1a}());
-  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
index db0c796..d6bfb51 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
@@ -1,103 +1,93 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a;
-  field () →* core::int* field1b;
-  field (core::int*) →* core::int* field2;
-  field (core::int*, core::int*) →* core::int* field3;
-  field (core::int*, [core::int*]) →* core::int* field4;
-  field ([core::int*, core::int*]) →* core::int* field5;
-  field (core::int*, {b: core::int*}) →* core::int* field6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a;
+  field () → core::int field1b;
+  field (core::int) → core::int field2;
+  field (core::int, core::int) → core::int field3;
+  field (core::int, [core::int]) → core::int field4;
+  field ([core::int, core::int]) → core::int field5;
+  field (core::int, {b: core::int}) → core::int field6;
+  field ({a: core::int, b: core::int}) → core::int field7;
+  synthetic constructor •() → self::Class
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     ;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     ;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     ;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     ;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     ;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     ;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     ;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     ;
-  get field1a() → core::Function*
+  get field1a() → core::Function
     ;
-  get field1b() → () →* core::int*
+  get field1b() → () → core::int
     ;
-  get field2() → (core::int*) →* core::int*
+  get field2() → (core::int) → core::int
     ;
-  get field3() → (core::int*, core::int*) →* core::int*
+  get field3() → (core::int, core::int) → core::int
     ;
-  get field4() → (core::int*, [core::int*]) →* core::int*
+  get field4() → (core::int, [core::int]) → core::int
     ;
-  get field5() → ([core::int*, core::int*]) →* core::int*
+  get field5() → ([core::int, core::int]) → core::int
     ;
-  get field6() → (core::int*, {b: core::int*}) →* core::int*
+  get field6() → (core::int, {b: core::int}) → core::int
     ;
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get field7() → ({a: core::int, b: core::int}) → core::int
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     ;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     ;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     ;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     ;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     ;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     ;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     ;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     ;
 }
-static field core::bool* enableRead;
-static method read(core::int* value) → core::int*
+static field core::bool enableRead;
+static method read(core::int value) → core::int
   ;
-static method method1() → core::int*
+static method method1() → core::int
   ;
-static method method2(core::int* a) → core::int*
+static method method2(core::int a) → core::int
   ;
-static method method3(core::int* a, core::int* b) → core::int*
+static method method3(core::int a, core::int b) → core::int
   ;
-static method method4(core::int* a, [has-declared-initializer core::int* b]) → core::int*
+static method method4(core::int a, [has-declared-initializer core::int b]) → core::int
   ;
-static method method5([has-declared-initializer core::int* a, has-declared-initializer core::int* b]) → core::int*
+static method method5([has-declared-initializer core::int a, has-declared-initializer core::int b]) → core::int
   ;
-static method method6(core::int* a, {has-declared-initializer core::int* b}) → core::int*
+static method method6(core::int a, {has-declared-initializer core::int b}) → core::int
   ;
-static method method7({has-declared-initializer core::int* a, has-declared-initializer core::int* b}) → core::int*
+static method method7({has-declared-initializer core::int a, has-declared-initializer core::int b}) → core::int
   ;
 static method main() → dynamic
   ;
-static method callField(self::Class* c) → dynamic
+static method callField(self::Class c) → dynamic
   ;
-static method callGetter(self::Class* c) → dynamic
+static method callGetter(self::Class c) → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
index 19a91a7..9e2bb18 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
+static method callField(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::field1a}());
-  self::expect(0, c.{self::Class::field1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
+static method callGetter(self::Class c) → dynamic {
   self::expect(0, c.{self::Class::getter1a}());
-  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter1b}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart
index b7b47d6..8b26b24 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart
@@ -1,7 +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.9
+
 class A<T> {
   void Function(T) f;
   A(this.f);
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline.expect
index 116a8da..eb3e361 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   void Function(T) f;
   A(this.f);
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline_modelled.expect
index 4b5395b..b5116cc 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   A(this.f);
   foo(T x) => this.f(x);
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
index c46c847..e14751b 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect
index c46c847..e14751b 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
index 5ef3cd8..71acb0c 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T% x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
index c46c847..e14751b 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index e478644..ab59caa 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -92,4 +92,5 @@
 rasta/super_operator: TypeCheckError
 rasta/unresolved_recovery: TypeCheckError
 regress/issue_31180: TypeCheckError
+regress/issue_31180_2: TypeCheckError
 runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart b/pkg/front_end/testcases/rasta/abstract_constructor.dart
index 5fd7ad1..8caa4ed 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 abstract class C {}
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline.expect
index d863236..101867d 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class C {}
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline_modelled.expect
index d863236..101867d 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class C {}
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.expect
index bbfdd17..e4e38f1 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("C");
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect
index bbfdd17..e4e38f1 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("C");
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.outline.expect
index dc0f127..869be6f 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.transformed.expect
index bbfdd17..e4e38f1 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("C");
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart
index 5b7e744..937b755 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   const C() : this.x(1);
   const C.x();
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline.expect
index db4483c..8c60ced 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   const C() : this.x(1);
   const C.x();
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline_modelled.expect
index db4483c..8c60ced 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   const C() : this.x(1);
   const C.x();
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.expect
index c1d156b..b4108bf 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,25 +11,15 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   const C() : this.x(1);
                     ^"
     ;
-  const constructor x() → self::C*
+  const constructor x() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect
index c1d156b..b4108bf 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,25 +11,15 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   const C() : this.x(1);
                     ^"
     ;
-  const constructor x() → self::C*
+  const constructor x() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.outline.expect
index 12b1cd9..0301b7d 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,25 +11,15 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   const C() : this.x(1);
                     ^"
     ;
-  const constructor x() → self::C*
+  const constructor x() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.transformed.expect
index c1d156b..b4108bf 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,25 +11,15 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   const C() : this.x(1);
                     ^"
     ;
-  const constructor x() → self::C*
+  const constructor x() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart b/pkg/front_end/testcases/rasta/bad_continue.dart
index d103e3e..5399f78 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   continue here;
   label: continue label;
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.expect
index 755a3f3..9f22389 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect
index 755a3f3..9f22389 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.transformed.expect
index 755a3f3..9f22389 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart b/pkg/front_end/testcases/rasta/bad_default_constructor.dart
index 0678364..833743e 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline.expect
index d56bf58..5f62a0e 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline_modelled.expect
index d56bf58..5f62a0e 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.expect
index 864e20e..a343a16 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,22 +15,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect
index 864e20e..a343a16 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,22 +15,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.outline.expect
index 1abde2f..28fef78 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.transformed.expect
index 864e20e..a343a16 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,22 +15,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart
index 29541d3..2936518 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline.expect
index b68c9dc..a9880f1 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline_modelled.expect
index b68c9dc..a9880f1 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
index 930818a..c8ba5da 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
   const B() : super();
                    ^"
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
index 930818a..c8ba5da 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
   const B() : super();
                    ^"
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
index 2bbebbe..d93d006 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,21 +14,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
   const B() : super();
                    ^"
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
index 930818a..c8ba5da 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
   const B() : super();
                    ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart
index 3f08dcee..e5e539c 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   A(this.x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline.expect
index 102a937..9f4c8b4 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(this.x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline_modelled.expect
index 102a937..9f4c8b4 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(this.x);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.expect
index add2a41..d9770f0 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,24 +14,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect
index add2a41..d9770f0 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,24 +14,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.outline.expect
index 7720f7e..90b7ead 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,21 +10,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.transformed.expect
index add2a41..d9770f0 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,24 +14,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B*
+  const constructor •() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart b/pkg/front_end/testcases/rasta/bad_interpolation.dart
index 95f0b8d..98fd62e 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   print(" $x.);
 }
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
index e09a8ab..3f6b2d8 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect
index e09a8ab..3f6b2d8 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.outline.expect
index 2622e7c..2f1ab42 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
index e09a8ab..3f6b2d8 100644
--- a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart b/pkg/front_end/testcases/rasta/bad_redirection.dart
index c725b0a..24298ef 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 class Foo {
   Foo() = Bar;
 }
 
 class Bar extends Foo {
-  factory Bar() => null;
+  factory Bar() => throw '';
 }
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.textual_outline.expect
index 16f07fc..797357e 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class Foo {
   Foo() = Bar;
 }
 class Bar extends Foo {
-  factory Bar() => null;
+  factory Bar() => throw '';
 }
 main() {}
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.expect
index e0af5b5..4aa01a5 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,26 +21,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Constructors can't have a return type.
 Try removing the return type.
   Foo() = Bar;
           ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  static factory •() → self::Bar*
-    return null;
+  static factory •() → self::Bar
+    return throw "";
 }
 static method main() → dynamic {
   new self::Foo::•();
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect
index e0af5b5..4aa01a5 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,26 +21,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Constructors can't have a return type.
 Try removing the return type.
   Foo() = Bar;
           ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  static factory •() → self::Bar*
-    return null;
+  static factory •() → self::Bar
+    return throw "";
 }
 static method main() → dynamic {
   new self::Foo::•();
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.outline.expect
index 317008d..4b320ce 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,21 +11,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  static factory •() → self::Bar*
+  static factory •() → self::Bar
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.transformed.expect
index e0af5b5..4aa01a5 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,26 +21,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Constructors can't have a return type.
 Try removing the return type.
   Foo() = Bar;
           ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  static factory •() → self::Bar*
-    return null;
+  static factory •() → self::Bar
+    return throw "";
 }
 static method main() → dynamic {
   new self::Foo::•();
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart
index fa1fcfb..1a26aea 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   C() : field = null;
   set field(value) {}
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline.expect
index 4f7939a..02d3a33 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C() : field = null;
   set field(value) {}
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline_modelled.expect
index 4f7939a..02d3a33 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C() : field = null;
   set field(value) {}
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.expect
index 09e385e1..a71c43b 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
   set field(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect
index 09e385e1..a71c43b 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
   set field(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.outline.expect
index 5a5ab2a..e7ae10a 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
   set field(dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.transformed.expect
index 09e385e1..a71c43b 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
   set field(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart b/pkg/front_end/testcases/rasta/bad_unicode.dart
index 4eef588..51c6502 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   print("\u00"); // Bad Unicode escape, must have 4 hex digits.
 }
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
index 5c448ec..3274459 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
index 5c448ec..3274459 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
index 5c448ec..3274459 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart b/pkg/front_end/testcases/rasta/breaking_bad.dart
index 7310e3f..b82c7ed 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   break;
   walt: break walt;
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.expect
index b2fb346..0517025 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect
index b2fb346..0517025 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.transformed.expect
index b2fb346..0517025 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/cascades.dart b/pkg/front_end/testcases/rasta/cascades.dart
index 1b03e05..add829e 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart
+++ b/pkg/front_end/testcases/rasta/cascades.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   add(x) => x;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/cascades.dart.textual_outline.expect
index 4d0ee09..014f06c 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   add(x) => x;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/cascades.dart.textual_outline_modelled.expect
index 4d0ee09..014f06c 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   add(x) => x;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
index 73ffa41..dcdfded 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method add(dynamic x) → dynamic
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   function f(dynamic x) → dynamic
     return x;
-  let final self::A* #t1 = a in block {
-    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
+  let final self::A #t1 = a in block {
+    #t1.{self::A::add}(f){(dynamic) → dynamic}{dynamic}.call("WHAT");
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect
index 73ffa41..dcdfded 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method add(dynamic x) → dynamic
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   function f(dynamic x) → dynamic
     return x;
-  let final self::A* #t1 = a in block {
-    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
+  let final self::A #t1 = a in block {
+    #t1.{self::A::add}(f){(dynamic) → dynamic}{dynamic}.call("WHAT");
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.outline.expect
index 3968ffd..7cf88ec 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method add(dynamic x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
index 73ffa41..dcdfded 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method add(dynamic x) → dynamic
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   function f(dynamic x) → dynamic
     return x;
-  let final self::A* #t1 = a in block {
-    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
+  let final self::A #t1 = a in block {
+    #t1.{self::A::add}(f){(dynamic) → dynamic}{dynamic}.call("WHAT");
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart b/pkg/front_end/testcases/rasta/class_hierarchy.dart
index 974a13e..8d181ce 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A extends Missing {}
 
 class B implements Missing {}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline.expect
index d5772ff..4730157 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Missing {}
 
 class B implements Missing {}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline_modelled.expect
index d5772ff..4730157 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Missing {}
 
 class B implements Missing {}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
index b641197..34806ad 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,66 +30,26 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C*
+  const synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::D*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::D
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
                 ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   new self::A::•();
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect
index b641197..34806ad 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,66 +30,26 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C*
+  const synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::D*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::D
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
                 ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   new self::A::•();
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
index b631f32..94400c1 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,64 +30,24 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C*
+  const synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::•];
-  static factory •() → self::D*
+  static final field dynamic _redirecting# = <dynamic>[self::D::•]/*isLegacy*/;
+  static factory •() → self::D
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
                 ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
index b641197..34806ad 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,66 +30,26 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C*
+  const synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::D*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::D
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
                 ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   new self::A::•();
diff --git a/pkg/front_end/testcases/rasta/class_member.dart b/pkg/front_end/testcases/rasta/class_member.dart
index 116767f..8c81300 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart
+++ b/pkg/front_end/testcases/rasta/class_member.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 // Tests that class members are listed in the normal order.
 
 class Foo {
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/class_member.dart.textual_outline.expect
index 12cb568..f3931ce 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   a() {}
   b() {}
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/class_member.dart.textual_outline_modelled.expect
index 3239086..2b3571b 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo.constructor1();
   Foo.constructor2();
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.weak.expect b/pkg/front_end/testcases/rasta/class_member.dart.weak.expect
index e692877..7a679fb 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,26 +6,16 @@
   field dynamic field1 = null;
   field dynamic field2 = null;
   field dynamic field3 = null;
-  constructor constructor1() → self::Foo*
+  constructor constructor1() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor2() → self::Foo*
+  constructor constructor2() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor3() → self::Foo*
+  constructor constructor3() → self::Foo
     : super core::Object::•()
     ;
   method a() → dynamic {}
   method b() → dynamic {}
   method c() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect
index e692877..7a679fb 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,26 +6,16 @@
   field dynamic field1 = null;
   field dynamic field2 = null;
   field dynamic field3 = null;
-  constructor constructor1() → self::Foo*
+  constructor constructor1() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor2() → self::Foo*
+  constructor constructor2() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor3() → self::Foo*
+  constructor constructor3() → self::Foo
     : super core::Object::•()
     ;
   method a() → dynamic {}
   method b() → dynamic {}
   method c() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/class_member.dart.weak.outline.expect
index efb8632..b272f2a 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,11 +6,11 @@
   field dynamic field1;
   field dynamic field2;
   field dynamic field3;
-  constructor constructor1() → self::Foo*
+  constructor constructor1() → self::Foo
     ;
-  constructor constructor2() → self::Foo*
+  constructor constructor2() → self::Foo
     ;
-  constructor constructor3() → self::Foo*
+  constructor constructor3() → self::Foo
     ;
   method a() → dynamic
     ;
@@ -18,14 +18,4 @@
     ;
   method c() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/class_member.dart.weak.transformed.expect
index e692877..7a679fb 100644
--- a/pkg/front_end/testcases/rasta/class_member.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_member.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,26 +6,16 @@
   field dynamic field1 = null;
   field dynamic field2 = null;
   field dynamic field3 = null;
-  constructor constructor1() → self::Foo*
+  constructor constructor1() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor2() → self::Foo*
+  constructor constructor2() → self::Foo
     : super core::Object::•()
     ;
-  constructor constructor3() → self::Foo*
+  constructor constructor3() → self::Foo
     : super core::Object::•()
     ;
   method a() → dynamic {}
   method b() → dynamic {}
   method c() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart
index 23df9c0..3720069 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 const c = 1;
 main() {
   c;
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline.expect
index c6e2289..6b59d01 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const c = 1;
 main() {}
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline_modelled.expect
index c6e2289..6b59d01 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const c = 1;
 main() {}
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
index ada899d..ad168ec 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* c = #C1;
+static const field core::int c = #C1;
 static method main() → dynamic {
   #C1;
   invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect
index ada899d..ad168ec 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* c = #C1;
+static const field core::int c = #C1;
 static method main() → dynamic {
   #C1;
   invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.outline.expect
index 2188126..c41715b 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* c = 1;
+static const field core::int c = 1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
index ada899d..ad168ec 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* c = #C1;
+static const field core::int c = #C1;
 static method main() → dynamic {
   #C1;
   invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
diff --git a/pkg/front_end/testcases/rasta/deferred_lib.dart b/pkg/front_end/testcases/rasta/deferred_lib.dart
index e468f23..b4e6442 100644
--- a/pkg/front_end/testcases/rasta/deferred_lib.dart
+++ b/pkg/front_end/testcases/rasta/deferred_lib.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 library deferred_lib;
 
 foo() => null;
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart b/pkg/front_end/testcases/rasta/deferred_load.dart
index fa67dd1..1ba7abd 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline.expect
index ce5481b..e513d3a 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline_modelled.expect
index ce5481b..e513d3a 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.expect
index d01ac3d..71e6036 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 
@@ -8,10 +8,10 @@
   #C1;
   LoadLibrary(lib);
 }
-static method _#loadLibrary_lib() → asy::Future<dynamic>*
+static method _#loadLibrary_lib() → asy::Future<dynamic>
   return LoadLibrary(lib);
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect
index d01ac3d..71e6036 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 
@@ -8,10 +8,10 @@
   #C1;
   LoadLibrary(lib);
 }
-static method _#loadLibrary_lib() → asy::Future<dynamic>*
+static method _#loadLibrary_lib() → asy::Future<dynamic>
   return LoadLibrary(lib);
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.outline.expect
index 7fe8d37..a708dd1 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.transformed.expect
index d01ac3d..71e6036 100644
--- a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 
@@ -8,10 +8,10 @@
   #C1;
   LoadLibrary(lib);
 }
-static method _#loadLibrary_lib() → asy::Future<dynamic>*
+static method _#loadLibrary_lib() → asy::Future<dynamic>
   return LoadLibrary(lib);
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart b/pkg/front_end/testcases/rasta/duplicated_mixin.dart
index e47db11..09c9107 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Mixin {
   var field;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline.expect
index 3639d19..6da2cea 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Mixin {
   var field;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline_modelled.expect
index 2116733..525de0e 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Object with Mixin, Mixin {}
 
 class Mixin {
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.expect
index 3324351..4a60de7 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub get field() → dynamic
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin&Mixin
     : super self::_A&Object&Mixin::•()
     ;
   mixin-super-stub get field() → dynamic
@@ -47,7 +27,7 @@
     return super.{self::Mixin::field} = value;
 }
 class A extends self::_A&Object&Mixin&Mixin {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&Mixin&Mixin::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect
index 3324351..4a60de7 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub get field() → dynamic
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin&Mixin
     : super self::_A&Object&Mixin::•()
     ;
   mixin-super-stub get field() → dynamic
@@ -47,7 +27,7 @@
     return super.{self::Mixin::field} = value;
 }
 class A extends self::_A&Object&Mixin&Mixin {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&Mixin&Mixin::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.outline.expect
index 49d4750..93387b2 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub get field() → dynamic
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&Object&Mixin&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin&Mixin
     : super self::_A&Object&Mixin::•()
     ;
   mixin-super-stub get field() → dynamic
@@ -46,6 +26,6 @@
     return super.{self::Mixin::field} = value;
 }
 class A extends self::_A&Object&Mixin&Mixin {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.transformed.expect
index 82471af..8630f78 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.transformed.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin extends core::Object implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
   field dynamic field = null;
-  synthetic constructor •() → self::_A&Object&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&Mixin&Mixin extends self::_A&Object&Mixin implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
   field dynamic field = null;
-  synthetic constructor •() → self::_A&Object&Mixin&Mixin*
+  synthetic constructor •() → self::_A&Object&Mixin&Mixin
     : super self::_A&Object&Mixin::•()
     ;
 }
 class A extends self::_A&Object&Mixin&Mixin {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&Mixin&Mixin::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/enum.dart b/pkg/front_end/testcases/rasta/enum.dart
index 617fade..58edf77 100644
--- a/pkg/front_end/testcases/rasta/enum.dart
+++ b/pkg/front_end/testcases/rasta/enum.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 enum Foo {
   ec1,
   ec2,
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
index 08d5765..c0c63c5 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 enum Foo {
   ec1,
   ec2,
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
index 08d5765..c0c63c5 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 enum Foo {
   ec1,
   ec2,
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index ce798e5..72fd4bf 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -1,27 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C7;
-  static const field self::Foo* ec1 = #C3;
-  static const field self::Foo* ec2 = #C6;
-  const constructor •(core::int* #index, core::String* #name) → self::Foo*
+  static const field core::List<self::Foo> values = #C7;
+  static const field self::Foo ec1 = #C3;
+  static const field self::Foo ec2 = #C6;
+  const constructor •(core::int #index, core::String #name) → self::Foo
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
index ce798e5..72fd4bf 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
@@ -1,27 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C7;
-  static const field self::Foo* ec1 = #C3;
-  static const field self::Foo* ec2 = #C6;
-  const constructor •(core::int* #index, core::String* #name) → self::Foo*
+  static const field core::List<self::Foo> values = #C7;
+  static const field self::Foo ec1 = #C3;
+  static const field self::Foo ec2 = #C6;
+  const constructor •(core::int #index, core::String #name) → self::Foo
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
index e98c789..6ce3e54 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
@@ -1,27 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::ec1, self::Foo::ec2];
-  static const field self::Foo* ec1 = const self::Foo::•(0, "ec1");
-  static const field self::Foo* ec2 = const self::Foo::•(1, "ec2");
-  const constructor •(core::int* #index, core::String* #name) → self::Foo*
+  static const field core::List<self::Foo> values = const <self::Foo>[self::Foo::ec1, self::Foo::ec2];
+  static const field self::Foo ec1 = const self::Foo::•(0, "ec1");
+  static const field self::Foo ec2 = const self::Foo::•(1, "ec2");
+  const constructor •(core::int #index, core::String #name) → self::Foo
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index ce798e5..72fd4bf 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -1,27 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C7;
-  static const field self::Foo* ec1 = #C3;
-  static const field self::Foo* ec2 = #C6;
-  const constructor •(core::int* #index, core::String* #name) → self::Foo*
+  static const field core::List<self::Foo> values = #C7;
+  static const field self::Foo ec1 = #C3;
+  static const field self::Foo ec2 = #C6;
+  const constructor •(core::int #index, core::String #name) → self::Foo
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/rasta/export.dart b/pkg/front_end/testcases/rasta/export.dart
index 34e908c..ca462cf 100644
--- a/pkg/front_end/testcases/rasta/export.dart
+++ b/pkg/front_end/testcases/rasta/export.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 library export;
 
 export 'foo.dart';
diff --git a/pkg/front_end/testcases/rasta/export.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/export.dart.textual_outline.expect
index 4b760d0..a55dbf5 100644
--- a/pkg/front_end/testcases/rasta/export.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library export;
 
 export 'foo.dart';
diff --git a/pkg/front_end/testcases/rasta/export.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/export.dart.textual_outline_modelled.expect
index 4b760d0..a55dbf5 100644
--- a/pkg/front_end/testcases/rasta/export.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library export;
 
 export 'foo.dart';
diff --git a/pkg/front_end/testcases/rasta/export.dart.weak.expect b/pkg/front_end/testcases/rasta/export.dart.weak.expect
index 6eb1e47..18c8e6a 100644
--- a/pkg/front_end/testcases/rasta/export.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.weak.expect
@@ -1,4 +1,4 @@
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect
index 6eb1e47..18c8e6a 100644
--- a/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/export.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/export.dart.weak.outline.expect
index e2ffc83..e6cf067 100644
--- a/pkg/front_end/testcases/rasta/export.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/export.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/export.dart.weak.transformed.expect
index 6eb1e47..18c8e6a 100644
--- a/pkg/front_end/testcases/rasta/export.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/export.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart b/pkg/front_end/testcases/rasta/external_factory_redirection.dart
index 6e19a02..f4833dd 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   "Should redirect to LinkedHashMap constructor.";
   new Map<Symbol, dynamic>(); // This is a patched constructor whose
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.expect
index 8b7a99d..78475b5 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   "Should redirect to LinkedHashMap constructor.";
-  core::Map::•<core::Symbol*, dynamic>();
+  core::Map::•<core::Symbol, dynamic>();
 }
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect
index 8b7a99d..78475b5 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   "Should redirect to LinkedHashMap constructor.";
-  core::Map::•<core::Symbol*, dynamic>();
+  core::Map::•<core::Symbol, dynamic>();
 }
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.transformed.expect
index 8b7a99d..78475b5 100644
--- a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   "Should redirect to LinkedHashMap constructor.";
-  core::Map::•<core::Symbol*, dynamic>();
+  core::Map::•<core::Symbol, dynamic>();
 }
diff --git a/pkg/front_end/testcases/rasta/foo.dart b/pkg/front_end/testcases/rasta/foo.dart
index bb576bd..6400698 100644
--- a/pkg/front_end/testcases/rasta/foo.dart
+++ b/pkg/front_end/testcases/rasta/foo.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 library foo;
 
 foo() {
diff --git a/pkg/front_end/testcases/rasta/foo.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/foo.dart.textual_outline.expect
index 61dc73c..0d1b8df4 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library foo;
 
 foo() {}
diff --git a/pkg/front_end/testcases/rasta/foo.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/foo.dart.textual_outline_modelled.expect
index 61dc73c..0d1b8df4 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library foo;
 
 foo() {}
diff --git a/pkg/front_end/testcases/rasta/foo.dart.weak.expect b/pkg/front_end/testcases/rasta/foo.dart.weak.expect
index 5f90b5a..112f9c3 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.weak.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect
index 5f90b5a..112f9c3 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/foo.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/foo.dart.weak.outline.expect
index 8376691..91d38f6 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/foo.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/foo.dart.weak.transformed.expect
index 5f90b5a..112f9c3 100644
--- a/pkg/front_end/testcases/rasta/foo.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/foo.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart b/pkg/front_end/testcases/rasta/for_loop.dart
index 0f25bd2..0155ab3 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart
+++ b/pkg/front_end/testcases/rasta/for_loop.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   int c = new DateTime.now().millisecondsSinceEpoch;
   for (int i = 0; i < 100; i++) {
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
index 94b2d41..0266bdd 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
+  core::int c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1);
   }
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
-    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; c.{core::num::<}(42){(core::num) → core::bool} ?{core::int} throw "fisk" : let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) {
+    core::print(let final core::int #t5 = i in let final core::int #t6 = i = #t5.{core::num::+}(1){(core::num) → core::int} in #t5);
   }
 }
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect
index 94b2d41..0266bdd 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
+  core::int c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1);
   }
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
-    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; c.{core::num::<}(42){(core::num) → core::bool} ?{core::int} throw "fisk" : let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) {
+    core::print(let final core::int #t5 = i in let final core::int #t6 = i = #t5.{core::num::+}(1){(core::num) → core::int} in #t5);
   }
 }
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
index 94b2d41..0266bdd 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
+  core::int c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1);
   }
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
-    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; c.{core::num::<}(42){(core::num) → core::bool} ?{core::int} throw "fisk" : let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) {
+    core::print(let final core::int #t5 = i in let final core::int #t6 = i = #t5.{core::num::+}(1){(core::num) → core::int} in #t5);
   }
 }
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart b/pkg/front_end/testcases/rasta/generic_factory.dart
index a72e756..2bac5a2 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C1 {}
 
 class C2 {}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline.expect
index 53896d3..0b8bde5 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C1 {}
 
 class C2 {}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline_modelled.expect
index 6027134..449bfaf 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   A.internal();
   factory A.a() = B<T>.a;
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
index 05e4007..644a206 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,87 +28,47 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
-  constructor internal() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
+  constructor internal() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    return self::B::a<self::A::a::T*>();
-  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
+  static factory a<T extends core::Object? = dynamic>() → self::A<self::A::a::T%>
+    return self::B::a<self::A::a::T%>();
+  static factory b<T extends core::Object? = dynamic>() → self::A<self::A::b::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
+  static factory c<T extends core::Object? = dynamic>() → self::A<self::A::c::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
   factory A.c() = Missing;
                   ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
-  constructor internal() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends self::A<self::B::S%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5]/*isLegacy*/;
+  constructor internal() → self::B<self::B::S%>
     : super self::A::internal()
     ;
-  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    return new self::C::•<self::B::a::S*>();
-  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
+  static factory a<S extends core::Object? = dynamic>() → self::B<self::B::a::S%>
+    return new self::C::•<self::B::a::S%>();
+  static factory b<S extends core::Object? = dynamic>() → self::B<self::B::b::S%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
@@ -116,20 +76,20 @@
   factory B.b() = C<C2>;
                   ^";
 }
-class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
-  constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<self::C::U%> {
+  constructor •() → self::C<self::C::U%>
     : super self::B::internal()
     ;
 }
 static method main() → dynamic {
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect
index 05e4007..644a206 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,87 +28,47 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
-  constructor internal() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
+  constructor internal() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    return self::B::a<self::A::a::T*>();
-  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
+  static factory a<T extends core::Object? = dynamic>() → self::A<self::A::a::T%>
+    return self::B::a<self::A::a::T%>();
+  static factory b<T extends core::Object? = dynamic>() → self::A<self::A::b::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
+  static factory c<T extends core::Object? = dynamic>() → self::A<self::A::c::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
   factory A.c() = Missing;
                   ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
-  constructor internal() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends self::A<self::B::S%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5]/*isLegacy*/;
+  constructor internal() → self::B<self::B::S%>
     : super self::A::internal()
     ;
-  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    return new self::C::•<self::B::a::S*>();
-  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
+  static factory a<S extends core::Object? = dynamic>() → self::B<self::B::a::S%>
+    return new self::C::•<self::B::a::S%>();
+  static factory b<S extends core::Object? = dynamic>() → self::B<self::B::b::S%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
@@ -116,20 +76,20 @@
   factory B.b() = C<C2>;
                   ^";
 }
-class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
-  constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<self::C::U%> {
+  constructor •() → self::C<self::C::U%>
     : super self::B::internal()
     ;
 }
 static method main() → dynamic {
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
index ba2de86..e9e5b22 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,82 +28,42 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
-  constructor internal() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c]/*isLegacy*/;
+  constructor internal() → self::A<self::A::T%>
     ;
-  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    return self::B::a<self::A::a::T*>();
-  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
+  static factory a<T extends core::Object? = dynamic>() → self::A<self::A::a::T%>
+    return self::B::a<self::A::a::T%>();
+  static factory b<T extends core::Object? = dynamic>() → self::A<self::A::b::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
+  static factory c<T extends core::Object? = dynamic>() → self::A<self::A::c::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
   factory A.c() = Missing;
                   ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
-  constructor internal() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends self::A<self::B::S%> {
+  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b]/*isLegacy*/;
+  constructor internal() → self::B<self::B::S%>
     ;
-  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    return new self::C::•<self::B::a::S*>();
-  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
+  static factory a<S extends core::Object? = dynamic>() → self::B<self::B::a::S%>
+    return new self::C::•<self::B::a::S%>();
+  static factory b<S extends core::Object? = dynamic>() → self::B<self::B::b::S%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
@@ -111,8 +71,8 @@
   factory B.b() = C<C2>;
                   ^";
 }
-class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
-  constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<self::C::U%> {
+  constructor •() → self::C<self::C::U%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
index 05e4007..644a206 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,87 +28,47 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
-  constructor internal() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
+  constructor internal() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    return self::B::a<self::A::a::T*>();
-  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
+  static factory a<T extends core::Object? = dynamic>() → self::A<self::A::a::T%>
+    return self::B::a<self::A::a::T%>();
+  static factory b<T extends core::Object? = dynamic>() → self::A<self::A::b::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
+  static factory c<T extends core::Object? = dynamic>() → self::A<self::A::c::T%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
   factory A.c() = Missing;
                   ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
-  constructor internal() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends self::A<self::B::S%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5]/*isLegacy*/;
+  constructor internal() → self::B<self::B::S%>
     : super self::A::internal()
     ;
-  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    return new self::C::•<self::B::a::S*>();
-  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
+  static factory a<S extends core::Object? = dynamic>() → self::B<self::B::a::S%>
+    return new self::C::•<self::B::a::S%>();
+  static factory b<S extends core::Object? = dynamic>() → self::B<self::B::b::S%>
     return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
@@ -116,20 +76,20 @@
   factory B.b() = C<C2>;
                   ^";
 }
-class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
-  constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<self::C::U%> {
+  constructor •() → self::C<self::C::U%>
     : super self::B::internal()
     ;
 }
 static method main() → dynamic {
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
   factory A.b() = B<C1>.a;
                   ^";
-  new self::C::•<self::C3*>();
+  new self::C::•<self::C3>();
   invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
diff --git a/pkg/front_end/testcases/rasta/hello.dart b/pkg/front_end/testcases/rasta/hello.dart
index 28a3828..671d11f 100644
--- a/pkg/front_end/testcases/rasta/hello.dart
+++ b/pkg/front_end/testcases/rasta/hello.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   print("Hello, World!");
 }
diff --git a/pkg/front_end/testcases/rasta/hello.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/hello.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/hello.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/hello.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/hello.dart.weak.expect b/pkg/front_end/testcases/rasta/hello.dart.weak.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/hello.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/hello.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/hello.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/hello.dart.weak.transformed.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/rasta/hello.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/hello.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/import_export.dart b/pkg/front_end/testcases/rasta/import_export.dart
index c1897b3..8d6f2c4 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart
+++ b/pkg/front_end/testcases/rasta/import_export.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'export.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/import_export.dart.textual_outline.expect
index 27381f0..9b23e8d 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'export.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/import_export.dart.textual_outline_modelled.expect
index 27381f0..9b23e8d 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'export.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.weak.expect b/pkg/front_end/testcases/rasta/import_export.dart.weak.expect
index 18b095f..88d5e02 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 
@@ -8,7 +8,7 @@
   foo::foo();
 }
 
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self2;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect
index 18b095f..88d5e02 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 
@@ -8,7 +8,7 @@
   foo::foo();
 }
 
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self2;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/import_export.dart.weak.outline.expect
index 13347c0..8d8a768 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///export.dart";
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self2;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -14,7 +14,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/import_export.dart.weak.transformed.expect
index 18b095f..88d5e02 100644
--- a/pkg/front_end/testcases/rasta/import_export.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/import_export.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "foo.dart" as foo;
 
@@ -8,7 +8,7 @@
   foo::foo();
 }
 
-library export;
+library export /*isNonNullableByDefault*/;
 import self as self2;
 import "foo.dart" as foo;
 additionalExports = (foo::foo)
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///foo.dart";
 
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as foo;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart b/pkg/front_end/testcases/rasta/issue_000001.dart
index 0be82f7..6142ebc 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 test0(x) {
   print('test0');
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline.expect
index 17aaaa5..e580ef6 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 test0(x) {}
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline_modelled.expect
index d9163bd..246dbef 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 test0(x) {}
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.expect
index aa235f1..53ebe7b 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect
index aa235f1..53ebe7b 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.outline.expect
index 2a30a05..28f547f 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test0(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.transformed.expect
index aa235f1..53ebe7b 100644
--- a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart b/pkg/front_end/testcases/rasta/issue_000002.dart
index 34a90c9..2efd103 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'dart:typed_data';
 
 import 'package:expect/expect.dart';
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline.expect
index a8ba427..e7403ac 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:typed_data';
 import 'package:expect/expect.dart';
 
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline_modelled.expect
index f68c6b0..e19be7a 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:typed_data';
 import 'package:expect/expect.dart';
 
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
index 90a6469..23cb171 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -9,24 +9,14 @@
 
 class Foo extends core::Object {
   final field dynamic value;
-  constructor •(dynamic value) → self::Foo*
+  constructor •(dynamic value) → self::Foo
     : self::Foo::value = value, super core::Object::•() {}
-  static factory fac(dynamic value) → self::Foo* {
+  static factory fac(dynamic value) → self::Foo {
     return new self::Foo::•(value);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static field core::List<core::int> list = <core::int>[1, 2, 3];
 static method main() → dynamic {
-  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
-  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int) → core::int} =={core::num::==}{(core::Object) → core::bool} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect
index 90a6469..23cb171 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -9,24 +9,14 @@
 
 class Foo extends core::Object {
   final field dynamic value;
-  constructor •(dynamic value) → self::Foo*
+  constructor •(dynamic value) → self::Foo
     : self::Foo::value = value, super core::Object::•() {}
-  static factory fac(dynamic value) → self::Foo* {
+  static factory fac(dynamic value) → self::Foo {
     return new self::Foo::•(value);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static field core::List<core::int> list = <core::int>[1, 2, 3];
 static method main() → dynamic {
-  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
-  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int) → core::int} =={core::num::==}{(core::Object) → core::bool} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.outline.expect
index b2a8f85..89ce850 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -7,21 +7,11 @@
 
 class Foo extends core::Object {
   final field dynamic value;
-  constructor •(dynamic value) → self::Foo*
+  constructor •(dynamic value) → self::Foo
     ;
-  static factory fac(dynamic value) → self::Foo*
+  static factory fac(dynamic value) → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::int*>* list;
+static field core::List<core::int> list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
index 8a8d79b..d7d84fb 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -9,24 +9,14 @@
 
 class Foo extends core::Object {
   final field dynamic value;
-  constructor •(dynamic value) → self::Foo*
+  constructor •(dynamic value) → self::Foo
     : self::Foo::value = value, super core::Object::•() {}
-  static factory fac(dynamic value) → self::Foo* {
+  static factory fac(dynamic value) → self::Foo {
     return new self::Foo::•(value);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::int*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
+static field core::List<core::int> list = core::_GrowableList::_literal3<core::int>(1, 2, 3);
 static method main() → dynamic {
-  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
-  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int) → core::int} =={core::num::==}{(core::Object) → core::bool} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart b/pkg/front_end/testcases/rasta/issue_000004.dart
index e474361..1585f72 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'package:expect/expect.dart';
 
 fact4() {
@@ -13,14 +13,14 @@
 }
 
 fact5() {
-  var f = 1, n;
+  int f = 1, n;
   for (n in [1, 2, 3, 4, 5]) {
     f *= n;
   }
   return f;
 }
 
-var global;
+int global = 0;
 fact6() {
   var f = 1;
   for (global in [1, 2, 3, 4, 5, 6]) {
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline.expect
index c8f6f17..bd52987 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 fact4() {}
 fact5() {}
-var global;
+int global = 0;
 fact6() {}
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline_modelled.expect
index 92e527e..0ed1798 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 fact4() {}
 fact5() {}
 fact6() {}
+int global = 0;
 main() {}
-var global;
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
index 8b66203..3ae8ff5 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
@@ -1,37 +1,37 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-static field dynamic global;
+static field core::int global = 0;
 static method fact4() → dynamic {
-  core::int* f = 1;
-  for (core::int* n in <core::int*>[1, 2, 3, 4]) {
-    f = f.{core::num::*}(n){(core::num*) →* core::int*};
+  core::int f = 1;
+  for (core::int n in <core::int>[1, 2, 3, 4]) {
+    f = f.{core::num::*}(n){(core::num) → core::int};
   }
   return f;
 }
 static method fact5() → dynamic {
-  core::int* f = 1;
-  dynamic n;
-  for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
+  core::int f = 1;
+  core::int n;
+  for (final core::int #t1 in <core::int>[1, 2, 3, 4, 5]) {
     n = #t1;
-    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+    f = f.{core::num::*}(n){(core::num) → core::int};
   }
   return f;
 }
 static method fact6() → dynamic {
-  core::int* f = 1;
-  for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
+  core::int f = 1;
+  for (final core::int #t2 in <core::int>[1, 2, 3, 4, 5, 6]) {
     self::global = #t2;
-    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+    f = f.{core::num::*}(self::global){(core::num) → core::int};
   }
   return f;
 }
 static method main() → dynamic {
-  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
-  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
-  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object) → core::bool} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object) → core::bool} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object) → core::bool} 720);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect
index 8b66203..3ae8ff5 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect
@@ -1,37 +1,37 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-static field dynamic global;
+static field core::int global = 0;
 static method fact4() → dynamic {
-  core::int* f = 1;
-  for (core::int* n in <core::int*>[1, 2, 3, 4]) {
-    f = f.{core::num::*}(n){(core::num*) →* core::int*};
+  core::int f = 1;
+  for (core::int n in <core::int>[1, 2, 3, 4]) {
+    f = f.{core::num::*}(n){(core::num) → core::int};
   }
   return f;
 }
 static method fact5() → dynamic {
-  core::int* f = 1;
-  dynamic n;
-  for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
+  core::int f = 1;
+  core::int n;
+  for (final core::int #t1 in <core::int>[1, 2, 3, 4, 5]) {
     n = #t1;
-    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+    f = f.{core::num::*}(n){(core::num) → core::int};
   }
   return f;
 }
 static method fact6() → dynamic {
-  core::int* f = 1;
-  for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
+  core::int f = 1;
+  for (final core::int #t2 in <core::int>[1, 2, 3, 4, 5, 6]) {
     self::global = #t2;
-    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+    f = f.{core::num::*}(self::global){(core::num) → core::int};
   }
   return f;
 }
 static method main() → dynamic {
-  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
-  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
-  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object) → core::bool} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object) → core::bool} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object) → core::bool} 720);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.outline.expect
index 8358cbc..f460010 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.outline.expect
@@ -1,9 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-static field dynamic global;
+static field core::int global;
 static method fact4() → dynamic
   ;
 static method fact5() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
index ad7b018..0d637ca 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
@@ -1,55 +1,55 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-static field dynamic global;
+static field core::int global = 0;
 static method fact4() → dynamic {
-  core::int* f = 1;
+  core::int f = 1;
   {
-    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal4<core::int*>(1, 2, 3, 4).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal4<core::int>(1, 2, 3, 4).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int* n = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      core::int n = :sync-for-iterator.{core::Iterator::current}{core::int};
       {
-        f = f.{core::num::*}(n){(core::num*) →* core::int*};
+        f = f.{core::num::*}(n){(core::num) → core::int};
       }
     }
   }
   return f;
 }
 static method fact5() → dynamic {
-  core::int* f = 1;
-  dynamic n;
+  core::int f = 1;
+  core::int n;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::_literal5<dynamic>(1, 2, 3, 4, 5).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal5<core::int>(1, 2, 3, 4, 5).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final core::int #t1 = :sync-for-iterator.{core::Iterator::current}{core::int};
       {
         n = #t1;
-        f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+        f = f.{core::num::*}(n){(core::num) → core::int};
       }
     }
   }
   return f;
 }
 static method fact6() → dynamic {
-  core::int* f = 1;
+  core::int f = 1;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::_literal6<dynamic>(1, 2, 3, 4, 5, 6).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal6<core::int>(1, 2, 3, 4, 5, 6).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final core::int #t2 = :sync-for-iterator.{core::Iterator::current}{core::int};
       {
         self::global = #t2;
-        f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+        f = f.{core::num::*}(self::global){(core::num) → core::int};
       }
     }
   }
   return f;
 }
 static method main() → dynamic {
-  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
-  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
-  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object) → core::bool} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object) → core::bool} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object) → core::bool} 720);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart b/pkg/front_end/testcases/rasta/issue_000006.dart
index d06ecc4..8883ac2 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 var list = [1, 2, 3];
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline.expect
index 8959d6a..c9b955f 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 var list = [1, 2, 3];
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline_modelled.expect
index 2e0cfef..ef8eed0 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 var list = [1, 2, 3];
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
index d8e5d49..5653d16 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static field core::List<core::int> list = <core::int>[1, 2, 3];
 static method main() → dynamic {
-  self::list.{core::List::add}(1){(core::int*) →* void};
+  self::list.{core::List::add}(1){(core::int) → void};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect
index d8e5d49..5653d16 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static field core::List<core::int> list = <core::int>[1, 2, 3];
 static method main() → dynamic {
-  self::list.{core::List::add}(1){(core::int*) →* void};
+  self::list.{core::List::add}(1){(core::int) → void};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.outline.expect
index 6de5524..46e6941 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* list;
+static field core::List<core::int> list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
index f8135d2..bf3446d 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
+static field core::List<core::int> list = core::_GrowableList::_literal3<core::int>(1, 2, 3);
 static method main() → dynamic {
-  self::list.{core::List::add}(1){(core::int*) →* void};
+  self::list.{core::List::add}(1){(core::int) → void};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart b/pkg/front_end/testcases/rasta/issue_000007.dart
index 0bd8c05..9fb1dc0 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Base {}
 
 class Mixin {
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline.expect
index 4a5bec1..58c40fa 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Base {}
 
 class Mixin {
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline_modelled.expect
index 4a5bec1..58c40fa 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Base {}
 
 class Mixin {
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
index 6cd1688..12b10a3 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return core::print("foo");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Sub&Base&Mixin = self::Base with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Sub&Base&Mixin*
+  synthetic constructor •() → self::_Sub&Base&Mixin
     : super self::Base::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::Mixin::foo}();
 }
 class Sub extends self::_Sub&Base&Mixin {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::_Sub&Base&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect
index 6cd1688..12b10a3 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return core::print("foo");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Sub&Base&Mixin = self::Base with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Sub&Base&Mixin*
+  synthetic constructor •() → self::_Sub&Base&Mixin
     : super self::Base::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::Mixin::foo}();
 }
 class Sub extends self::_Sub&Base&Mixin {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::_Sub&Base&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.outline.expect
index f7c2600..f29bfaf 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.outline.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Sub&Base&Mixin = self::Base with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Sub&Base&Mixin*
+  synthetic constructor •() → self::_Sub&Base&Mixin
     : super self::Base::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::Mixin::foo}();
 }
 class Sub extends self::_Sub&Base&Mixin {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
index ed3512d..2e27be4 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return core::print("foo");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Sub&Base&Mixin extends self::Base implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Sub&Base&Mixin*
+  synthetic constructor •() → self::_Sub&Base&Mixin
     : super self::Base::•()
     ;
   method foo() → dynamic
     return core::print("foo");
 }
 class Sub extends self::_Sub&Base&Mixin {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::_Sub&Base&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart b/pkg/front_end/testcases/rasta/issue_000008.dart
index 0ca95b7..b9f1f6e 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   final x;
   C(this.x);
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline.expect
index c38e23a..7c1de3a 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   final x;
   C(this.x);
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline_modelled.expect
index daa996e..2a92244 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C(this.x);
   final x;
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.expect
index c1f058b..f585be1 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(dynamic x) → self::C*
+  constructor •(dynamic x) → self::C
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•(42);
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect
index c1f058b..f585be1 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(dynamic x) → self::C*
+  constructor •(dynamic x) → self::C
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•(42);
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.outline.expect
index f35d398..a050e5d 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(dynamic x) → self::C*
+  constructor •(dynamic x) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.transformed.expect
index c1f058b..f585be1 100644
--- a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(dynamic x) → self::C*
+  constructor •(dynamic x) → self::C
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•(42);
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart b/pkg/front_end/testcases/rasta/issue_000011.dart
index f50870b..26790da 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   try {
     print(42);
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.expect
index aa88a42..ad35f83 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect
index aa88a42..ad35f83 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.transformed.expect
index aa88a42..ad35f83 100644
--- a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart b/pkg/front_end/testcases/rasta/issue_000012.dart
index 67306bb..94fdd2f 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   var field;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline.expect
index 3787983..fe1927c 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var field;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline_modelled.expect
index 3787983..fe1927c 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var field;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
index e6e3429..3f9e7ae 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method m() → dynamic {
@@ -27,5 +17,5 @@
   }
 }
 static method main() → dynamic {
-  new self::B::•().{self::B::m}(){() →* dynamic};
+  new self::B::•().{self::B::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect
index e6e3429..3f9e7ae 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method m() → dynamic {
@@ -27,5 +17,5 @@
   }
 }
 static method main() → dynamic {
-  new self::B::•().{self::B::m}(){() →* dynamic};
+  new self::B::•().{self::B::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.outline.expect
index 18b7dde..22194a7 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method m() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
index e6e3429..3f9e7ae 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method m() → dynamic {
@@ -27,5 +17,5 @@
   }
 }
 static method main() → dynamic {
-  new self::B::•().{self::B::m}(){() →* dynamic};
+  new self::B::•().{self::B::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart b/pkg/front_end/testcases/rasta/issue_000025.dart
index 097e12d..8c02ddb 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 get x => 42;
 set x(val) {}
 
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline.expect
index 0b87ccc..b31966b 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 get x => 42;
 set x(val) {}
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline_modelled.expect
index 3267a7f..58187fc 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 get x => 42;
 main() {}
 set x(val) {}
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.expect
index 3be7ccc..b55303b 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect
index 3be7ccc..b55303b 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.outline.expect
index 8ee979d..be9171d1 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static get x() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.transformed.expect
index 3be7ccc..b55303b 100644
--- a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart b/pkg/front_end/testcases/rasta/issue_000026.dart
index 9d52a39..dcf3b43 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   var a;
   var b = 0;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline.expect
index ffc5b40..3c6152d 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   var a;
   var b = 0;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline_modelled.expect
index 4d3f76d..ae0f47e 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   var a;
   var b = 0;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
index 9e127fd..7577b11 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic a = null;
-  field core::int* b = 0;
-  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
-  synthetic constructor •() → self::C*
+  field core::int b = 0;
+  field core::int c = 1.{core::num::+}(2){(core::num) → core::int};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
   field dynamic a = null;
-  field core::int* b = 1;
-  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
-  constructor •() → self::D*
+  field core::int b = 1;
+  field core::int c = 2.{core::num::-}(3){(core::num) → core::int};
+  constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect
index 9e127fd..7577b11 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic a = null;
-  field core::int* b = 0;
-  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
-  synthetic constructor •() → self::C*
+  field core::int b = 0;
+  field core::int c = 1.{core::num::+}(2){(core::num) → core::int};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
   field dynamic a = null;
-  field core::int* b = 1;
-  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
-  constructor •() → self::D*
+  field core::int b = 1;
+  field core::int c = 2.{core::num::-}(3){(core::num) → core::int};
+  constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.outline.expect
index 4861c8a..7f86875 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic a;
-  field core::int* b;
-  field core::int* c;
-  synthetic constructor •() → self::C*
+  field core::int b;
+  field core::int c;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
   field dynamic a;
-  field core::int* b;
-  field core::int* c;
-  constructor •() → self::D*
+  field core::int b;
+  field core::int c;
+  constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
index d859b4b..5e86202 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic a = null;
-  field core::int* b = 0;
-  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
-  synthetic constructor •() → self::C*
+  field core::int b = 0;
+  field core::int c = 1.{core::num::+}(2){(core::num) → core::int};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
   field dynamic a = null;
-  field core::int* b = 1;
-  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
-  constructor •() → self::D*
+  field core::int b = 1;
+  field core::int c = 2.{core::num::-}(3){(core::num) → core::int};
+  constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart b/pkg/front_end/testcases/rasta/issue_000031.dart
index 4273c8c..9f6f91a 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'dart:math' as math;
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline.expect
index 95f0aa9..1123642 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:math' as math;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline_modelled.expect
index 95f0aa9..1123642 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:math' as math;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
index 5147d08..221e303 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,6 +15,6 @@
   let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
-    #t1.{core::Object::toString}(){() →* core::String*};
+    #t1.{core::Object::toString}(){() → core::String};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect
index 5147d08..221e303 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,6 +15,6 @@
   let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
-    #t1.{core::Object::toString}(){() →* core::String*};
+    #t1.{core::Object::toString}(){() → core::String};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.outline.expect
index d5e36cb..0458ad3 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:math" as math;
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
index 5147d08..221e303 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,6 +15,6 @@
   let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
-    #t1.{core::Object::toString}(){() →* core::String*};
+    #t1.{core::Object::toString}(){() → core::String};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart b/pkg/front_end/testcases/rasta/issue_000032.dart
index 5273c43..21222e2 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   C<
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
index 8be752c..8c48c6f 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C< >;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
index a34f230..0d93c8b3 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,19 +34,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect
index a34f230..0d93c8b3 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,19 +34,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
index dcaeb52..21a0e79 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,18 +19,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
index a34f230..0d93c8b3 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,19 +34,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart b/pkg/front_end/testcases/rasta/issue_000033.dart
index 233fde8..ddb9866 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart
@@ -1,6 +1,6 @@
 // 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.md file.
-// @dart=2.9
+
 @JS()
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline.expect
index c9a4e6c..c4716a7 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 @JS()
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline_modelled.expect
index c9a4e6c..c4716a7 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 @JS()
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
index e288dc4..52b177c 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect
index e288dc4..52b177c 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
index e0207cf..f57a3a2 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
index e288dc4..52b177c 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart b/pkg/front_end/testcases/rasta/issue_000034.dart
index f242534..88fad1f 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   const C() : this.x;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.textual_outline.expect
index 3408df8..12b9472 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   const C() : =this.x;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.expect
index 58227f9..818d255 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect
index 58227f9..818d255 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.outline.expect
index 6d1c18f..1121d5a 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.transformed.expect
index 58227f9..818d255 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C*
+  const constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart b/pkg/front_end/testcases/rasta/issue_000035.dart
index 3893075..e3c51c1 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {æøC();}
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.expect
index d27cbe4..6712b01 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   abstract method æøC() → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect
index d27cbe4..6712b01 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   abstract method æøC() → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.outline.expect
index 69b6538..8715907 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   abstract method æøC() → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.transformed.expect
index d27cbe4..6712b01 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   abstract method æøC() → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart b/pkg/front_end/testcases/rasta/issue_000035a.dart
index cc8eddb..1e6c8e4 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart
@@ -1,7 +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.md file.
-// @dart=2.9
+
 class C{  C();}
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.expect
index ffef0ea..796f231 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,18 +14,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect
index ffef0ea..796f231 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,18 +14,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.outline.expect
index 3550e41..d07a47b 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,18 +14,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.transformed.expect
index ffef0ea..796f231 100644
--- a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,18 +14,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart b/pkg/front_end/testcases/rasta/issue_000036.dart
index 5217d54..9f7e17f 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart
@@ -1,5 +1,5 @@
 // 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.md file.
-// @dart=2.9
+
 main() => a. - 5;
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.textual_outline.expect
index e61fbfe..603c715 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() => a. - 5;
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
index 255d67d..70b1c4c 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect
index 255d67d..70b1c4c 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.outline.expect
index 9e8c916..3caf03b 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
index 255d67d..70b1c4c 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart b/pkg/front_end/testcases/rasta/issue_000039.dart
index d3f4e5c..f9a8f85 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   var a;
 
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline.expect
index c91fa1a..823e1c7 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var a;
   A(x) {}
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline_modelled.expect
index 1b4ac50..ab5d564 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(x) {}
   var a;
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
index 289c890..6e1de49 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,26 +25,16 @@
 
 class A extends core::Object {
   field dynamic a = null;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•() {
     this.{self::A::a} = invalid-expression "pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   }
   ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect
index 289c890..6e1de49 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,26 +25,16 @@
 
 class A extends core::Object {
   field dynamic a = null;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•() {
     this.{self::A::a} = invalid-expression "pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   }
   ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.outline.expect
index b14371b..dfebb22 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic a;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
index 289c890..6e1de49 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,26 +25,16 @@
 
 class A extends core::Object {
   field dynamic a = null;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : super core::Object::•() {
     this.{self::A::a} = invalid-expression "pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   }
   ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart b/pkg/front_end/testcases/rasta/issue_000041.dart
index daa1552..4035fd7 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   test() {
     use(+super);
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline.expect
index 84a5be7..0690e46 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   test() {}
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline_modelled.expect
index cb89a89..57013ed 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   test() {}
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
index 2026340..5861f1a 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -27,19 +27,9 @@
     use(+super);
          ^^^^^"));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic _) → dynamic
   return null;
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect
index 2026340..5861f1a 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -27,19 +27,9 @@
     use(+super);
          ^^^^^"));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic _) → dynamic
   return null;
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.outline.expect
index a6f1d9e..3c8fc9d 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method test() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic _) → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
index 2026340..5861f1a 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -27,19 +27,9 @@
     use(+super);
          ^^^^^"));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic _) → dynamic
   return null;
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart b/pkg/front_end/testcases/rasta/issue_000042.dart
index 22dc017..66893b8 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   for (var x, y in []) {}
   L: { continue L; }
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.expect
index 2abfb5d..126f745 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -59,7 +59,7 @@
   }
   try {
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect
index 2abfb5d..126f745 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -59,7 +59,7 @@
   }
   try {
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.transformed.expect
index 590cdfe..a324650 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,7 +29,7 @@
   for (var x, y in []) {}
        ^^^";
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -65,7 +65,7 @@
   }
   try {
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart b/pkg/front_end/testcases/rasta/issue_000043.dart
index 1270b5f..4aed858 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   get x => '$C'.hashCode;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline.expect
index 7a44294..6bc9bc7 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   get x => '$C'.hashCode;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline_modelled.expect
index 7a44294..6bc9bc7 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   get x => '$C'.hashCode;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
index 0c2f2cb..5bde0a6 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
-    return "${#C1}".{core::String::hashCode}{core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return "${#C1}".{core::String::hashCode}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect
index 0c2f2cb..5bde0a6 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
-    return "${#C1}".{core::String::hashCode}{core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return "${#C1}".{core::String::hashCode}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.outline.expect
index ecd284d..2e2c331 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   get x() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
index 0c2f2cb..5bde0a6 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
-    return "${#C1}".{core::String::hashCode}{core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return "${#C1}".{core::String::hashCode}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart b/pkg/front_end/testcases/rasta/issue_000044.dart
index e89cfc0..cfc938a 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 // Parse error: but the parser should recover and create something that looks
 // like `a b(c) => d`.
 a b(c) = d;
@@ -22,7 +22,7 @@
 }
 
 main() {
-  C c = null;
+  C? c = null;
   print(const C.constant());
   print(const C.missingFactoryKeyword());
   print(const C.good());
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.textual_outline.expect
index 07b098c..b728ed6 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 a b(c) = d;
 class C {
   const C.constant();
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index 90f96dd..986d518 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,10 +34,6 @@
 //   C.missingFactoryKeyword() = C.constant;
 //                             ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
-//   C.missingFactoryKeyword() = C.constant;
-//                                 ^^^^^^^^
-//
 // pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   C.missingFactoryKeyword() = C.constant;
@@ -63,48 +59,38 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor constant() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor constant() → self::C
     : super core::Object::•()
     ;
-  constructor missingFactoryKeyword() → self::C*
+  constructor missingFactoryKeyword() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C*
+  static factory good() → self::C
     return new self::C::constant();
-  method notEvenAConstructor(dynamic a) → self::C*
+  method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic} self::C*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic,ForNonNullableByDefault} self::C;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  has-declared-initializer self::C* c = null;
+  has-declared-initializer self::C? c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
   core::print(#C2);
-  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) → self::C});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
index 90f96dd..986d518 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,10 +34,6 @@
 //   C.missingFactoryKeyword() = C.constant;
 //                             ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
-//   C.missingFactoryKeyword() = C.constant;
-//                                 ^^^^^^^^
-//
 // pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   C.missingFactoryKeyword() = C.constant;
@@ -63,48 +59,38 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor constant() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor constant() → self::C
     : super core::Object::•()
     ;
-  constructor missingFactoryKeyword() → self::C*
+  constructor missingFactoryKeyword() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C*
+  static factory good() → self::C
     return new self::C::constant();
-  method notEvenAConstructor(dynamic a) → self::C*
+  method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic} self::C*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic,ForNonNullableByDefault} self::C;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  has-declared-initializer self::C* c = null;
+  has-declared-initializer self::C? c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
   core::print(#C2);
-  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) → self::C});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
index 19384f6..4d09beb 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,26 +29,16 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::C::good];
-  const constructor constant() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[self::C::good]/*isLegacy*/;
+  const constructor constant() → self::C
     : super core::Object::•()
     ;
-  constructor missingFactoryKeyword() → self::C*
+  constructor missingFactoryKeyword() → self::C
     ;
-  static factory good() → self::C*
+  static factory good() → self::C
     return new self::C::constant();
-  method notEvenAConstructor(dynamic a) → self::C*
+  method notEvenAConstructor(dynamic a) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method b(dynamic c) → invalid-type
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index b9617cd..2578fd4 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,10 +34,6 @@
 //   C.missingFactoryKeyword() = C.constant;
 //                             ^
 //
-// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
-//   C.missingFactoryKeyword() = C.constant;
-//                                 ^^^^^^^^
-//
 // pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   C.missingFactoryKeyword() = C.constant;
@@ -63,48 +59,38 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor constant() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor constant() → self::C
     : super core::Object::•()
     ;
-  constructor missingFactoryKeyword() → self::C*
+  constructor missingFactoryKeyword() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C*
+  static factory good() → self::C
     return new self::C::constant();
-  method notEvenAConstructor(dynamic a) → self::C*
+  method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
                              ^" in this{<unresolved>}.h;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  has-declared-initializer self::C* c = null;
+  has-declared-initializer self::C? c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
   core::print(#C2);
-  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) → self::C});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart b/pkg/front_end/testcases/rasta/issue_000045.dart
index e726ad1..f8c7e61 100644
--- a/pkg/front_end/testcases/rasta/issue_000045.dart
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart
@@ -1,5 +1,5 @@
 // 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.md file.
-// @dart=2.9
+
 main() => """${1}
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.expect
index 2622c42..b429026 100644
--- a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect
index 2622c42..b429026 100644
--- a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.outline.expect
index 562267f..7f7be6c 100644
--- a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.transformed.expect
index c9a26da..0efdb30 100644
--- a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart b/pkg/front_end/testcases/rasta/issue_000046.dart
index b2b8b58..fe8fc70 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   C c = new Object)();
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.textual_outline.expect
index fe72a78..0b29b47 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C c = new Object();
   )
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
index 77f4768..e9f6d2e 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,10 +19,9 @@
 //   C c = new Object)();
 //                    ^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
 //  - 'Object' is from 'dart:core'.
 //  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //   C c = new Object)();
 //             ^
 //
@@ -30,23 +29,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+  field self::C c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
  - 'Object' is from 'dart:core'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-Change the type of the object being constructed or the context in which it is used.
   C c = new Object)();
-            ^" in new core::Object::•();
-  synthetic constructor •() → self::C*
+            ^" in new core::Object::•() as{TypeError,ForNonNullableByDefault} self::C;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
index 77f4768..e9f6d2e 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,10 +19,9 @@
 //   C c = new Object)();
 //                    ^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
 //  - 'Object' is from 'dart:core'.
 //  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //   C c = new Object)();
 //             ^
 //
@@ -30,23 +29,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+  field self::C c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
  - 'Object' is from 'dart:core'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-Change the type of the object being constructed or the context in which it is used.
   C c = new Object)();
-            ^" in new core::Object::•();
-  synthetic constructor •() → self::C*
+            ^" in new core::Object::•() as{TypeError,ForNonNullableByDefault} self::C;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
index ef6529e..78eaf36 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,17 +23,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c;
-  synthetic constructor •() → self::C*
+  field self::C c;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
index 77f4768..e9f6d2e 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,10 +19,9 @@
 //   C c = new Object)();
 //                    ^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
 //  - 'Object' is from 'dart:core'.
 //  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //   C c = new Object)();
 //             ^
 //
@@ -30,23 +29,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+  field self::C c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: A value of type 'Object' can't be assigned to a variable of type 'C'.
  - 'Object' is from 'dart:core'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
-Change the type of the object being constructed or the context in which it is used.
   C c = new Object)();
-            ^" in new core::Object::•();
-  synthetic constructor •() → self::C*
+            ^" in new core::Object::•() as{TypeError,ForNonNullableByDefault} self::C;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart b/pkg/front_end/testcases/rasta/issue_000047.dart
index b529572..2fbb897 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart
@@ -1,7 +1,9 @@
 // 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.md file.
-// @dart=2.9
+
 typedef void T(C<C>);
 
-T main() => null;
+T test() => throw '';
+
+main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.textual_outline.expect
index b16d611..e87eee9 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.textual_outline.expect
@@ -1,3 +1,3 @@
-// @dart = 2.9
 typedef void T(C<C>);
-T main() => null;
+T test() => throw '';
+main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.expect
index 2ae0040..9925c90 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -8,6 +8,7 @@
 //
 import self as self;
 
-typedef T = (dynamic) →* void;
-static method main() → (dynamic) →* void
-  return null;
+typedef T = (dynamic) → void;
+static method test() → (dynamic) → void
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect
index 2ae0040..9925c90 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -8,6 +8,7 @@
 //
 import self as self;
 
-typedef T = (dynamic) →* void;
-static method main() → (dynamic) →* void
-  return null;
+typedef T = (dynamic) → void;
+static method test() → (dynamic) → void
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.outline.expect
index de792f5..f749e09 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -8,6 +8,8 @@
 //
 import self as self;
 
-typedef T = (dynamic) →* void;
-static method main() → (dynamic) →* void
+typedef T = (dynamic) → void;
+static method test() → (dynamic) → void
+  ;
+static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.transformed.expect
index 2ae0040..9925c90 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -8,6 +8,7 @@
 //
 import self as self;
 
-typedef T = (dynamic) →* void;
-static method main() → (dynamic) →* void
-  return null;
+typedef T = (dynamic) → void;
+static method test() → (dynamic) → void
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart b/pkg/front_end/testcases/rasta/issue_000048.dart
index ac5506e..0211480 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   bool v1;
   num v2;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline.expect
index 1125913..75793bc 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   bool v1;
   num v2;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline_modelled.expect
index d236d24..333c72f 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(bool this.v1, num this.v2);
   bool v1;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.expect
index a297249..2b0abe4 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2 = 0;
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 0;
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
+  self::C c = new self::C::•(true, 2);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect
index a297249..2b0abe4 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2 = 0;
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 0;
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
+  self::C c = new self::C::•(true, 2);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.outline.expect
index 8c6dce3a7..96b4f9a 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.outline.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2;
-  synthetic constructor •() → self::M1*
+  field core::num v2;
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.transformed.expect
index 2daf3d3..0c73c5c 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2 = 0;
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 0;
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::M1 /*isEliminatedMixin*/  {
-  field core::num* v2 = 0;
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  field core::num v2 = 0;
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
+  self::C c = new self::C::•(true, 2);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart b/pkg/front_end/testcases/rasta/issue_000052.dart
index a6f12da..bf0b680 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   f() {
     print('hello');
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
index 4c2e652..9e23245 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,5 +6,5 @@
   function f() → Null {
     core::print("hello");
   }
-  f(){() →* Null};
+  f(){() → Null};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect
index 4c2e652..9e23245 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,5 +6,5 @@
   function f() → Null {
     core::print("hello");
   }
-  f(){() →* Null};
+  f(){() → Null};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
index 4c2e652..9e23245 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,5 +6,5 @@
   function f() → Null {
     core::print("hello");
   }
-  f(){() →* Null};
+  f(){() → Null};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart b/pkg/front_end/testcases/rasta/issue_000053.dart
index a493d89..6cae4f6 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   operator ==(other) => throw 'x';
   test() {
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline.expect
index c301e14..aa3a004 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   operator ==(other) => throw 'x';
   test() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline_modelled.expect
index c301e14..aa3a004 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   operator ==(other) => throw 'x';
   test() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
index f4841de..f16ea22 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
@@ -1,26 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return throw "x";
   method test() → dynamic {
     super.{core::Object::==}(null);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect
index f4841de..f16ea22 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect
@@ -1,26 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return throw "x";
   method test() → dynamic {
     super.{core::Object::==}(null);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.outline.expect
index 340d827..1bed99e 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.outline.expect
@@ -1,23 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     ;
   method test() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
index f4841de..f16ea22 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
@@ -1,26 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return throw "x";
   method test() → dynamic {
     super.{core::Object::==}(null);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart b/pkg/front_end/testcases/rasta/issue_000067.dart
index fc04bd1..ddb5ca6 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart
@@ -1,13 +1,15 @@
 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class A {
   A() {}
   factory A.foo() = C.bar;
-  int m() {}
+  int m() {
+    return 1;
+  }
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline.expect
index 0fcec84..a569cc4 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class A {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline_modelled.expect
index 0fcec84..a569cc4 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class A {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
index 66f50c0..2283430 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,44 +6,36 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•() {}
-  static factory foo() → self::A*
+  static factory foo() → self::A
     return self::C::bar();
-  method m() → core::int* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m() → core::int {
+    return 1;
+  }
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
     : super self::A::•() {}
-  static factory bar() → self::C*
+  static factory bar() → self::C
     return new self::D::•();
-  method m() → core::int* {
+  method m() → core::int {
     return 1;
   }
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m() → core::int* {
+  method m() → core::int {
     return 2;
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::D::•();
-  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
+  self::A a = new self::D::•();
+  exp::Expect::equals(2, a.{self::A::m}(){() → core::int});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect
index 66f50c0..2283430 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,44 +6,36 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•() {}
-  static factory foo() → self::A*
+  static factory foo() → self::A
     return self::C::bar();
-  method m() → core::int* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m() → core::int {
+    return 1;
+  }
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
     : super self::A::•() {}
-  static factory bar() → self::C*
+  static factory bar() → self::C
     return new self::D::•();
-  method m() → core::int* {
+  method m() → core::int {
     return 1;
   }
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m() → core::int* {
+  method m() → core::int {
     return 2;
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::D::•();
-  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
+  self::A a = new self::D::•();
+  exp::Expect::equals(2, a.{self::A::m}(){() → core::int});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
index 1f48749..49ab275 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
@@ -1,41 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::foo]/*isLegacy*/;
+  constructor •() → self::A
     ;
-  static factory foo() → self::A*
+  static factory foo() → self::A
     return self::C::bar();
-  method m() → core::int*
+  method m() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
-  constructor •() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  constructor •() → self::C
     ;
-  static factory bar() → self::C*
+  static factory bar() → self::C
     return new self::D::•();
-  method m() → core::int*
+  method m() → core::int
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method m() → core::int*
+  method m() → core::int
     ;
 }
 static method main() → dynamic
@@ -44,5 +34,5 @@
 
 Extra constant evaluation status:
 Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:7:7 -> ConstructorTearOffConstant(A.foo)
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:13:7 -> ConstructorTearOffConstant(C.bar)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:15:7 -> ConstructorTearOffConstant(C.bar)
 Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
index 66f50c0..2283430 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,44 +6,36 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•() {}
-  static factory foo() → self::A*
+  static factory foo() → self::A
     return self::C::bar();
-  method m() → core::int* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m() → core::int {
+    return 1;
+  }
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C*
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C
     : super self::A::•() {}
-  static factory bar() → self::C*
+  static factory bar() → self::C
     return new self::D::•();
-  method m() → core::int* {
+  method m() → core::int {
     return 1;
   }
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m() → core::int* {
+  method m() → core::int {
     return 2;
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::D::•();
-  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
+  self::A a = new self::D::•();
+  exp::Expect::equals(2, a.{self::A::m}(){() → core::int});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart b/pkg/front_end/testcases/rasta/issue_000068.dart
index b0a2ea2..e02deb7 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class G<T> {}
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline.expect
index 8b5b447..cde3517 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class G<T> {}
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline_modelled.expect
index 469f55f..dd18446 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class A {}
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.expect
index 9de7e9e..b557cb8 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.expect
@@ -1,56 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::isFalse(new self::G::•<self::B*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<core::Object*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::double*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::String*>*);
+  exp::Expect::isFalse(new self::G::•<self::B>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<core::Object>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::double>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::String>);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect
index 9de7e9e..b557cb8 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect
@@ -1,56 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::isFalse(new self::G::•<self::B*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<core::Object*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::double*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::String*>*);
+  exp::Expect::isFalse(new self::G::•<self::B>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<core::Object>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::double>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::String>);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.outline.expect
index a6aaeb1..db56ac5 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.transformed.expect
index 9de7e9e..b557cb8 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.transformed.expect
@@ -1,56 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::isFalse(new self::G::•<self::B*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::C*>*);
-  exp::Expect::isFalse(new self::G::•<core::Object*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<self::B*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::double*>*);
-  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::String*>*);
+  exp::Expect::isFalse(new self::G::•<self::B>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<self::A>() is{ForNonNullableByDefault} self::G<self::C>);
+  exp::Expect::isFalse(new self::G::•<core::Object>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<self::B>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::double>);
+  exp::Expect::isFalse(new self::G::•<core::int>() is{ForNonNullableByDefault} self::G<core::String>);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart b/pkg/front_end/testcases/rasta/issue_000069.dart
index a1070ad..0e87567 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   var x, i = 0;
   while (i++ < 5) var x = i;
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
index 07c2ec1..f77b2dc 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   dynamic x;
-  core::int* i = 0;
-  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
-    core::int* x = i;
+  core::int i = 0;
+  while ((let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1).{core::num::<}(5){(core::num) → core::bool}) {
+    core::int x = i;
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect
index 07c2ec1..f77b2dc 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   dynamic x;
-  core::int* i = 0;
-  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
-    core::int* x = i;
+  core::int i = 0;
+  while ((let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1).{core::num::<}(5){(core::num) → core::bool}) {
+    core::int x = i;
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
index 07c2ec1..f77b2dc 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
   dynamic x;
-  core::int* i = 0;
-  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
-    core::int* x = i;
+  core::int i = 0;
+  while ((let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1).{core::num::<}(5){(core::num) → core::bool}) {
+    core::int x = i;
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart b/pkg/front_end/testcases/rasta/issue_000070.dart
index 973ad73..193e5e0 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart
@@ -1,11 +1,11 @@
 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class A<N, S, U> {
-  final List<U> field;
+  final List<U?>? field;
 
   A(N n, S s) : field = <U>[] {
     Expect.isTrue(n is N);
@@ -19,9 +19,9 @@
     return new A.empty();
   }
 
-  const A.c(U u, S s) : field = const [null];
+  const A.c(U u, S s) : field = const <Null>[null];
 
-  List<U> get getter {
+  List<U?>? get getter {
     return field;
   }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline.expect
index 1861e2d..f65477a 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class A<N, S, U> {
-  final List<U> field;
+  final List<U?>? field;
   A(N n, S s) : field = <U>[] {}
   A.empty() : field = null {}
   factory A.f(S s) {}
-  const A.c(U u, S s) : field = const [null];
-  List<U> get getter {}
+  const A.c(U u, S s) : field = const <Null>[null];
+  List<U?>? get getter {}
   void set setter(S s) {}
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline_modelled.expect
index 7006b0c..bfed0e2 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 abstract class I<H, C, K> extends J<C, K> {}
@@ -8,10 +7,10 @@
 class A<N, S, U> {
   A(N n, S s) : field = <U>[] {}
   A.empty() : field = null {}
-  List<U> get getter {}
-  const A.c(U u, S s) : field = const [null];
+  List<U?>? get getter {}
+  const A.c(U u, S s) : field = const <Null>[null];
   factory A.f(S s) {}
-  final List<U> field;
+  final List<U?>? field;
   void set setter(S s) {}
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
index a5f9ac1..1c80364 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
@@ -1,66 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field core::List<self::A::U*>* field;
-  constructor •(self::A::N* n, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
-    : self::A::field = <self::A::U*>[], super core::Object::•() {
-    exp::Expect::isTrue(n is self::A::N*);
-    exp::Expect::isTrue(s is self::A::S*);
+class A<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::U?>? field;
+  constructor •(self::A::N% n, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
+    : self::A::field = <self::A::U%>[], super core::Object::•() {
+    exp::Expect::isTrue(n is{ForNonNullableByDefault} self::A::N%);
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::S%);
   }
-  constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  constructor empty() → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = null, super core::Object::•() {}
-  const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  const constructor c(self::A::U% u, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = #C2, super core::Object::•()
     ;
-  static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>* {
-    exp::Expect::isTrue(s is self::A::f::S*);
-    return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
+  static factory f<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic>(self::A::f::S% s) → self::A<self::A::f::N%, self::A::f::S%, self::A::f::U%> {
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::f::S%);
+    return new self::A::empty<self::A::f::N%, self::A::f::S%, self::A::f::U%>();
   }
-  get getter() → core::List<self::A::U*>* {
-    return this.{self::A::field}{core::List<self::A::U*>*};
+  get getter() → core::List<self::A::U?>? {
+    return this.{self::A::field}{core::List<self::A::U?>?};
   }
-  set setter(covariant-by-class self::A::S* s) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(covariant-by-class self::A::S% s) → void {}
 }
-abstract class J<Aa extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::Aa*, self::J::B*>*
+abstract class J<Aa extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::Aa%, self::J::B%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<H extends core::Object* = dynamic, C extends core::Object* = dynamic, K extends core::Object* = dynamic> extends self::J<self::I::C*, self::I::K*> {
-  synthetic constructor •() → self::I<self::I::H*, self::I::C*, self::I::K*>*
+abstract class I<H extends core::Object? = dynamic, C extends core::Object? = dynamic, K extends core::Object? = dynamic> extends self::J<self::I::C%, self::I::K%> {
+  synthetic constructor •() → self::I<self::I::H%, self::I::C%, self::I::K%>
     : super self::J::•()
     ;
 }
 static method main() → dynamic {
-  new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
-  self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
+  new self::A::•<core::num, core::double, core::List<dynamic>>(1, 2.0);
+  self::A<dynamic, dynamic, dynamic> a = self::A::f<core::int, core::int, core::int>(1);
   #C3;
-  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
+  core::List<dynamic>? z = a.{self::A::getter}{core::List<dynamic>?};
   a.{self::A::setter} = 1;
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect
index a5f9ac1..1c80364 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect
@@ -1,66 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field core::List<self::A::U*>* field;
-  constructor •(self::A::N* n, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
-    : self::A::field = <self::A::U*>[], super core::Object::•() {
-    exp::Expect::isTrue(n is self::A::N*);
-    exp::Expect::isTrue(s is self::A::S*);
+class A<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::U?>? field;
+  constructor •(self::A::N% n, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
+    : self::A::field = <self::A::U%>[], super core::Object::•() {
+    exp::Expect::isTrue(n is{ForNonNullableByDefault} self::A::N%);
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::S%);
   }
-  constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  constructor empty() → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = null, super core::Object::•() {}
-  const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  const constructor c(self::A::U% u, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = #C2, super core::Object::•()
     ;
-  static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>* {
-    exp::Expect::isTrue(s is self::A::f::S*);
-    return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
+  static factory f<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic>(self::A::f::S% s) → self::A<self::A::f::N%, self::A::f::S%, self::A::f::U%> {
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::f::S%);
+    return new self::A::empty<self::A::f::N%, self::A::f::S%, self::A::f::U%>();
   }
-  get getter() → core::List<self::A::U*>* {
-    return this.{self::A::field}{core::List<self::A::U*>*};
+  get getter() → core::List<self::A::U?>? {
+    return this.{self::A::field}{core::List<self::A::U?>?};
   }
-  set setter(covariant-by-class self::A::S* s) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(covariant-by-class self::A::S% s) → void {}
 }
-abstract class J<Aa extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::Aa*, self::J::B*>*
+abstract class J<Aa extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::Aa%, self::J::B%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<H extends core::Object* = dynamic, C extends core::Object* = dynamic, K extends core::Object* = dynamic> extends self::J<self::I::C*, self::I::K*> {
-  synthetic constructor •() → self::I<self::I::H*, self::I::C*, self::I::K*>*
+abstract class I<H extends core::Object? = dynamic, C extends core::Object? = dynamic, K extends core::Object? = dynamic> extends self::J<self::I::C%, self::I::K%> {
+  synthetic constructor •() → self::I<self::I::H%, self::I::C%, self::I::K%>
     : super self::J::•()
     ;
 }
 static method main() → dynamic {
-  new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
-  self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
+  new self::A::•<core::num, core::double, core::List<dynamic>>(1, 2.0);
+  self::A<dynamic, dynamic, dynamic> a = self::A::f<core::int, core::int, core::int>(1);
   #C3;
-  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
+  core::List<dynamic>? z = a.{self::A::getter}{core::List<dynamic>?};
   a.{self::A::setter} = 1;
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
index 5dae040..f904fc3 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-class A<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field core::List<self::A::U*>* field;
-  constructor •(self::A::N* n, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+class A<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::U?>? field;
+  constructor •(self::A::N% n, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
     ;
-  constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  constructor empty() → self::A<self::A::N%, self::A::S%, self::A::U%>
     ;
-  const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  const constructor c(self::A::U% u, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = const <Null>[null], super core::Object::•()
     ;
-  static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>*
+  static factory f<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic>(self::A::f::S% s) → self::A<self::A::f::N%, self::A::f::S%, self::A::f::U%>
     ;
-  get getter() → core::List<self::A::U*>*
+  get getter() → core::List<self::A::U?>?
     ;
-  set setter(covariant-by-class self::A::S* s) → void
+  set setter(covariant-by-class self::A::S% s) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class J<Aa extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::Aa*, self::J::B*>*
+abstract class J<Aa extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::Aa%, self::J::B%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<H extends core::Object* = dynamic, C extends core::Object* = dynamic, K extends core::Object* = dynamic> extends self::J<self::I::C*, self::I::K*> {
-  synthetic constructor •() → self::I<self::I::H*, self::I::C*, self::I::K*>*
+abstract class I<H extends core::Object? = dynamic, C extends core::Object? = dynamic, K extends core::Object? = dynamic> extends self::J<self::I::C%, self::I::K%> {
+  synthetic constructor •() → self::I<self::I::H%, self::I::C%, self::I::K%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
index 9cfd4c4..fc604245 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
@@ -1,66 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field core::List<self::A::U*>* field;
-  constructor •(self::A::N* n, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
-    : self::A::field = core::_GrowableList::•<self::A::U*>(0), super core::Object::•() {
-    exp::Expect::isTrue(n is self::A::N*);
-    exp::Expect::isTrue(s is self::A::S*);
+class A<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::U?>? field;
+  constructor •(self::A::N% n, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
+    : self::A::field = core::_GrowableList::•<self::A::U%>(0), super core::Object::•() {
+    exp::Expect::isTrue(n is{ForNonNullableByDefault} self::A::N%);
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::S%);
   }
-  constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  constructor empty() → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = null, super core::Object::•() {}
-  const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+  const constructor c(self::A::U% u, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
     : self::A::field = #C2, super core::Object::•()
     ;
-  static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>* {
-    exp::Expect::isTrue(s is self::A::f::S*);
-    return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
+  static factory f<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic>(self::A::f::S% s) → self::A<self::A::f::N%, self::A::f::S%, self::A::f::U%> {
+    exp::Expect::isTrue(s is{ForNonNullableByDefault} self::A::f::S%);
+    return new self::A::empty<self::A::f::N%, self::A::f::S%, self::A::f::U%>();
   }
-  get getter() → core::List<self::A::U*>* {
-    return this.{self::A::field}{core::List<self::A::U*>*};
+  get getter() → core::List<self::A::U?>? {
+    return this.{self::A::field}{core::List<self::A::U?>?};
   }
-  set setter(covariant-by-class self::A::S* s) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(covariant-by-class self::A::S% s) → void {}
 }
-abstract class J<Aa extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::Aa*, self::J::B*>*
+abstract class J<Aa extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::Aa%, self::J::B%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<H extends core::Object* = dynamic, C extends core::Object* = dynamic, K extends core::Object* = dynamic> extends self::J<self::I::C*, self::I::K*> {
-  synthetic constructor •() → self::I<self::I::H*, self::I::C*, self::I::K*>*
+abstract class I<H extends core::Object? = dynamic, C extends core::Object? = dynamic, K extends core::Object? = dynamic> extends self::J<self::I::C%, self::I::K%> {
+  synthetic constructor •() → self::I<self::I::H%, self::I::C%, self::I::K%>
     : super self::J::•()
     ;
 }
 static method main() → dynamic {
-  new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
-  self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
+  new self::A::•<core::num, core::double, core::List<dynamic>>(1, 2.0);
+  self::A<dynamic, dynamic, dynamic> a = self::A::f<core::int, core::int, core::int>(1);
   #C3;
-  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
+  core::List<dynamic>? z = a.{self::A::getter}{core::List<dynamic>?};
   a.{self::A::setter} = 1;
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart b/pkg/front_end/testcases/rasta/issue_000080.dart
index c6793bc..6a0292d 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Mixin {
   var field;
   foo() => 87;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline.expect
index 0f6e0ff..e1dd6e2 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Mixin {
   var field;
   foo() => 87;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline_modelled.expect
index 8366218..8ed966c 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo extends Object with Mixin {
   bar() => super.field;
   foo() => super.foo();
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
index e61a3ce..d91ab12 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 87;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Foo&Object&Mixin*
+  synthetic constructor •() → self::_Foo&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
@@ -30,19 +20,9 @@
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::_Foo&Object&Mixin {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::_Foo&Object&Mixin::•()
     ;
   method foo() → dynamic
@@ -51,7 +31,7 @@
     return super.{self::_Foo&Object&Mixin::field};
 }
 static method main() → dynamic {
-  self::Foo* f = new self::Foo::•();
+  self::Foo f = new self::Foo::•();
   f.{self::_Foo&Object&Mixin::field} = 42;
-  core::print(f.{self::Foo::bar}(){() →* dynamic});
+  core::print(f.{self::Foo::bar}(){() → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect
index e61a3ce..d91ab12 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 87;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Foo&Object&Mixin*
+  synthetic constructor •() → self::_Foo&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
@@ -30,19 +20,9 @@
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::_Foo&Object&Mixin {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::_Foo&Object&Mixin::•()
     ;
   method foo() → dynamic
@@ -51,7 +31,7 @@
     return super.{self::_Foo&Object&Mixin::field};
 }
 static method main() → dynamic {
-  self::Foo* f = new self::Foo::•();
+  self::Foo f = new self::Foo::•();
   f.{self::_Foo&Object&Mixin::field} = 42;
-  core::print(f.{self::Foo::bar}(){() →* dynamic});
+  core::print(f.{self::Foo::bar}(){() → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.outline.expect
index 4d151fc..4f952bc 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Foo&Object&Mixin*
+  synthetic constructor •() → self::_Foo&Object&Mixin
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
@@ -29,19 +19,9 @@
     return super.{self::Mixin::field};
   mixin-super-stub set field(dynamic value) → void
     return super.{self::Mixin::field} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::_Foo&Object&Mixin {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
index 8e37860..6ab5120 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 87;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&Object&Mixin extends core::Object implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
   field dynamic field = null;
-  synthetic constructor •() → self::_Foo&Object&Mixin*
+  synthetic constructor •() → self::_Foo&Object&Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 87;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::_Foo&Object&Mixin {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::_Foo&Object&Mixin::•()
     ;
   method foo() → dynamic
@@ -48,7 +28,7 @@
     return super.{self::_Foo&Object&Mixin::field};
 }
 static method main() → dynamic {
-  self::Foo* f = new self::Foo::•();
+  self::Foo f = new self::Foo::•();
   f.{self::_Foo&Object&Mixin::field} = 42;
-  core::print(f.{self::Foo::bar}(){() →* dynamic});
+  core::print(f.{self::Foo::bar}(){() → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart b/pkg/front_end/testcases/rasta/issue_000081.dart
index b277258..4dfb641 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 class Base {
   int hashCode = 42;
 }
 
 class Sub extends Base {
-  int _hashCode = null;
+  int? _hashCode = null;
 
   get hashCode => _hashCode ??= super.hashCode;
 
@@ -18,6 +18,6 @@
 
 main() {
   print(new Sub().hashCode);
-  var l = [null];
+  var l = <String?>[null];
   l[0] ??= "fisk";
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline.expect
index f4c75b5..3747fed 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class Base {
   int hashCode = 42;
 }
 
 class Sub extends Base {
-  int _hashCode = null;
+  int? _hashCode = null;
   get hashCode => _hashCode ??= super.hashCode;
   foo() {}
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline_modelled.expect
index 71cc6e6..4ef38a2 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Base {
   int hashCode = 42;
 }
@@ -6,7 +5,7 @@
 class Sub extends Base {
   foo() {}
   get hashCode => _hashCode ??= super.hashCode;
-  int _hashCode = null;
+  int? _hashCode = null;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
index 5549963..80196b9 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
@@ -1,35 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* hashCode = 42;
-  synthetic constructor •() → self::Base*
+  field core::int hashCode = 42;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  field core::int* _hashCode = null;
-  synthetic constructor •() → self::Sub*
+  field core::int? _hashCode = null;
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  get hashCode() → core::int*
-    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+  get hashCode() → core::int
+    return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
   method foo() → dynamic {
-    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+    this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
   }
 }
 static method main() → dynamic {
-  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
-  core::List<Null>* l = <Null>[null];
-  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int});
+  core::List<core::String?> l = <core::String?>[null];
+  let final core::List<core::String?> #t2 = l in let final core::int #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int) → core::String?} == null ?{core::String} #t2.{core::List::[]=}(#t3, "fisk"){(core::int, core::String?) → void} : null;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect
index 5549963..80196b9 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect
@@ -1,35 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* hashCode = 42;
-  synthetic constructor •() → self::Base*
+  field core::int hashCode = 42;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  field core::int* _hashCode = null;
-  synthetic constructor •() → self::Sub*
+  field core::int? _hashCode = null;
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  get hashCode() → core::int*
-    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+  get hashCode() → core::int
+    return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
   method foo() → dynamic {
-    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+    this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
   }
 }
 static method main() → dynamic {
-  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
-  core::List<Null>* l = <Null>[null];
-  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int});
+  core::List<core::String?> l = <core::String?>[null];
+  let final core::List<core::String?> #t2 = l in let final core::int #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int) → core::String?} == null ?{core::String} #t2.{core::List::[]=}(#t3, "fisk"){(core::int, core::String?) → void} : null;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.outline.expect
index e6229de..6dc020f 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.outline.expect
@@ -1,26 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* hashCode;
-  synthetic constructor •() → self::Base*
+  field core::int hashCode;
+  synthetic constructor •() → self::Base
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  field core::int* _hashCode;
-  synthetic constructor •() → self::Sub*
+  field core::int? _hashCode;
+  synthetic constructor •() → self::Sub
     ;
-  get hashCode() → core::int*
+  get hashCode() → core::int
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
index 5e4e553..6368e55 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
@@ -1,41 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* hashCode = 42;
-  synthetic constructor •() → self::Base*
+  field core::int hashCode = 42;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  field core::int* _hashCode = null;
-  synthetic constructor •() → self::Sub*
+  field core::int? _hashCode = null;
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  get hashCode() → core::int*
-    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+  get hashCode() → core::int
+    return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
   method foo() → dynamic {
-    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+    this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
   }
 }
 static method main() → dynamic {
-  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
-  core::List<Null>* l = core::_GrowableList::_literal1<Null>(null);
-  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int});
+  core::List<core::String?> l = core::_GrowableList::_literal1<core::String?>(null);
+  let final core::List<core::String?> #t2 = l in let final core::int #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int) → core::String?} == null ?{core::String} #t2.{core::List::[]=}(#t3, "fisk"){(core::int, core::String?) → void} : null;
 }
 
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///issue_000081.dart:22:5 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///issue_000081.dart:22:5 -> IntConstant(0)
-Extra constant evaluation: evaluated: 33, effectively constant: 2
+Extra constant evaluation: evaluated: 32, effectively constant: 2
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart
index 4644505..05cfa99 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   const A()
     : x = 'foo'
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.textual_outline.expect
index ed64514..42f4004 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A() : x = 'foo' {}
   :
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.expect
index 40bd823..a0572cf 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,19 +29,9 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::String* x = "foo";
-  constructor •() → self::A*
+  field core::String x = "foo";
+  constructor •() → self::A
     : self::A::x = "foo", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/malformed_const_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect
index 40bd823..a0572cf 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,19 +29,9 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::String* x = "foo";
-  constructor •() → self::A*
+  field core::String x = "foo";
+  constructor •() → self::A
     : self::A::x = "foo", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/malformed_const_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.outline.expect
index eaf9c61..6b2c7aa 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,19 +24,9 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::String* x;
-  constructor •() → self::A*
+  field core::String x;
+  constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.transformed.expect
index 40bd823..a0572cf 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,19 +29,9 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::String* x = "foo";
-  constructor •() → self::A*
+  field core::String x = "foo";
+  constructor •() → self::A
     : self::A::x = "foo", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/malformed_const_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart b/pkg/front_end/testcases/rasta/malformed_function.dart
index 6441714..8d0c3c8 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart
@@ -1,7 +1,6 @@
 // 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.md file.
-// @dart=2.9
 
 main() {
   (null) = null;
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.expect
index 35bc1cd..0481716 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+// pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
 //   (null) = null;
 //        ^
 //
 import self as self;
 
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
   (null) = null;
        ^";
 }
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect
index 35bc1cd..0481716 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+// pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
 //   (null) = null;
 //        ^
 //
 import self as self;
 
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
   (null) = null;
        ^";
 }
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.transformed.expect
index 35bc1cd..0481716 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+// pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
 //   (null) = null;
 //        ^
 //
 import self as self;
 
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:8: Error: Can't assign to a parenthesized expression.
   (null) = null;
        ^";
 }
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart b/pkg/front_end/testcases/rasta/malformed_function_type.dart
index 421a840..3b2ad71 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 typedef Handle Handle(String command);
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline.expect
index 74b053b..6587e81 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef Handle Handle(String command);
 main() {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline_modelled.expect
index f6b9e28..2afa7c6 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 typedef Handle Handle(String command);
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
index 3444c42..b3a4eb0 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
index 3444c42..b3a4eb0 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
index dc3f69b..1c330ee 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
index 3444c42..b3a4eb0 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart
index 17e7ec8..60805fe 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart
@@ -1,6 +1,6 @@
 // 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.md file.
-// @dart=2.9
+
 main(arguments = [x]) {
 }
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.textual_outline.expect
index 7fe4a13..7184e04 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main(arguments = [x]) {}
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
index ac6a230..5cb17fa 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect
index ac6a230..5cb17fa 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
index 347001a..377ace0 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
index ac6a230..5cb17fa 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart b/pkg/front_end/testcases/rasta/mixin_library.dart
index 184cc8c..e441d85 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 library test.mixin_library;
 
 f() => 2;
@@ -12,9 +12,9 @@
 
 class Mixin<T> {
   var x = f(), y, z;
-  T t;
+  T? t;
   foo() => super.foo() + f();
-  T g(T a) => null;
+  T? g(T a) => null;
   h() => V();
   l() => _private();
   _privateMethod() => 49;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline.expect
index 474bd37a..1c6c28f 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test.mixin_library;
 
 f() => 2;
@@ -7,9 +6,9 @@
 
 class Mixin<T> {
   var x = f(), y, z;
-  T t;
+  T? t;
   foo() => super.foo() + f();
-  T g(T a) => null;
+  T? g(T a) => null;
   h() => V();
   l() => _private();
   _privateMethod() => 49;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline_modelled.expect
index 37e28e4..c541020 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test.mixin_library;
 
 V() => 87;
 _private() => 117;
 
 class Mixin<T> {
-  T g(T a) => null;
-  T t;
+  T? g(T a) => null;
+  T? t;
   _privateMethod() => 49;
   foo() => super.foo() + f();
   h() => V();
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
index e6d1af6..b2c83f5 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
@@ -1,4 +1,4 @@
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,17 +9,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x = self::f();
   field dynamic y = null;
   field dynamic z = null;
-  covariant-by-class field self::Mixin::T* t = null;
-  synthetic constructor •() → self::Mixin<self::Mixin::T*>*
+  covariant-by-class field self::Mixin::T? t = null;
+  synthetic constructor •() → self::Mixin<self::Mixin::T%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(self::f());
-  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
+  method g(covariant-by-class self::Mixin::T% a) → self::Mixin::T?
     return null;
   method h() → dynamic
     return self::V();
@@ -28,17 +28,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{self::Mixin::_privateMethod}(){() →* dynamic};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::Mixin::_privateMethod}(){() → dynamic};
 }
 static method f() → dynamic
   return 2;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect
index e6d1af6..b2c83f5 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,17 +9,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x = self::f();
   field dynamic y = null;
   field dynamic z = null;
-  covariant-by-class field self::Mixin::T* t = null;
-  synthetic constructor •() → self::Mixin<self::Mixin::T*>*
+  covariant-by-class field self::Mixin::T? t = null;
+  synthetic constructor •() → self::Mixin<self::Mixin::T%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(self::f());
-  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
+  method g(covariant-by-class self::Mixin::T% a) → self::Mixin::T?
     return null;
   method h() → dynamic
     return self::V();
@@ -28,17 +28,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{self::Mixin::_privateMethod}(){() →* dynamic};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::Mixin::_privateMethod}(){() → dynamic};
 }
 static method f() → dynamic
   return 2;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
index 4eb68b3..97d8008 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x;
   field dynamic y;
   field dynamic z;
-  covariant-by-class field self::Mixin::T* t;
-  synthetic constructor •() → self::Mixin<self::Mixin::T*>*
+  covariant-by-class field self::Mixin::T? t;
+  synthetic constructor •() → self::Mixin<self::Mixin::T%>
     ;
   method foo() → dynamic
     ;
-  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
+  method g(covariant-by-class self::Mixin::T% a) → self::Mixin::T?
     ;
   method h() → dynamic
     ;
@@ -21,16 +21,6 @@
     ;
   method publicMethod() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart b/pkg/front_end/testcases/rasta/native_is_illegal.dart
index 9004717..84b8275 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 foo() native "foo";
 
 class Bar {
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline.expect
index cfac286..f28a475 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo() native "foo";
 
 class Bar {
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline_modelled.expect
index 70d6f72..61833c6 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar {
   Bar get x native "Bar_get_x";
   f() native "Bar_f";
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
index b24cb95..09d6406 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 class Bar extends core::Object {
   @#C2
-  external get x() → self::Bar*;
+  external get x() → self::Bar;
   @#C4
-  external set x(self::Bar* value) → void;
+  external set x(self::Bar value) → void;
   @#C6
   external method f() → dynamic;
   @#C8
-  external static factory •() → self::Bar*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  external static factory •() → self::Bar;
 }
 @#C10
 external static method foo() → dynamic;
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
index b24cb95..09d6406 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 class Bar extends core::Object {
   @#C2
-  external get x() → self::Bar*;
+  external get x() → self::Bar;
   @#C4
-  external set x(self::Bar* value) → void;
+  external set x(self::Bar value) → void;
   @#C6
   external method f() → dynamic;
   @#C8
-  external static factory •() → self::Bar*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  external static factory •() → self::Bar;
 }
 @#C10
 external static method foo() → dynamic;
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.outline.expect
index 24d4e95..c33cad6 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  external get x() → self::Bar*;
-  external set x(self::Bar* value) → void;
+  external get x() → self::Bar;
+  external set x(self::Bar value) → void;
   external method f() → dynamic;
-  external static factory •() → self::Bar*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  external static factory •() → self::Bar;
 }
 external static method foo() → dynamic;
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
index b24cb95..09d6406 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 class Bar extends core::Object {
   @#C2
-  external get x() → self::Bar*;
+  external get x() → self::Bar;
   @#C4
-  external set x(self::Bar* value) → void;
+  external set x(self::Bar value) → void;
   @#C6
   external method f() → dynamic;
   @#C8
-  external static factory •() → self::Bar*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  external static factory •() → self::Bar;
 }
 @#C10
 external static method foo() → dynamic;
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart b/pkg/front_end/testcases/rasta/parser_error.dart
index 4c72c20..130d0ea 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart
+++ b/pkg/front_end/testcases/rasta/parser_error.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 // Copy of third_party/dart-sdk/tests/language/argument_definition_test.dart.
 
 import "package:expect/expect.dart";
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline.expect
index 23b1d7b..bbfef96 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 int test(a, {b, c}) {}
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline_modelled.expect
index 23b1d7b..bbfef96 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 int test(a, {b, c}) {}
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
index b83c501..c5d5819 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,14 +22,14 @@
 
 import "package:expect/expect.dart";
 
-static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
+static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int {
   if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
       ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
         ^")
-    return b as{TypeError,ForDynamic} core::int*;
-  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
+    return b as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect
index b83c501..c5d5819 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,14 +22,14 @@
 
 import "package:expect/expect.dart";
 
-static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
+static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int {
   if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
       ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
         ^")
-    return b as{TypeError,ForDynamic} core::int*;
-  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
+    return b as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.outline.expect
index 0beef0a..9473147 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-static method test(dynamic a, {dynamic b, dynamic c}) → core::int*
+static method test(dynamic a, {dynamic b, dynamic c}) → core::int
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
index b83c501..c5d5819 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,14 +22,14 @@
 
 import "package:expect/expect.dart";
 
-static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
+static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int {
   if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
       ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
         ^")
-    return b as{TypeError,ForDynamic} core::int*;
-  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
+    return b as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart b/pkg/front_end/testcases/rasta/previsit_deferred.dart
index 7dc438f..ac2c00c 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.expect
index 0a16b0d..df83b80 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,7 +9,7 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::foo();
 }
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as def;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect
index 0a16b0d..df83b80 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,7 +9,7 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::foo();
 }
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as def;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.outline.expect
index c800260..61bfbcb 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,7 +8,7 @@
 static method test() → dynamic
   ;
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.transformed.expect
index 15f8439..d2d2a4a 100644
--- a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,7 +10,7 @@
   let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::foo();
 }
 
-library deferred_lib;
+library deferred_lib /*isNonNullableByDefault*/;
 import self as def;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/static.dart b/pkg/front_end/testcases/rasta/static.dart
index 5375c40..a95c6e6 100644
--- a/pkg/front_end/testcases/rasta/static.dart
+++ b/pkg/front_end/testcases/rasta/static.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Foo {
   static const staticConstant = 42;
   static var staticField = 42;
diff --git a/pkg/front_end/testcases/rasta/static.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/static.dart.textual_outline.expect
index 6565604..e24cfe0 100644
--- a/pkg/front_end/testcases/rasta/static.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   static const staticConstant = 42;
   static var staticField = 42;
diff --git a/pkg/front_end/testcases/rasta/static.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/static.dart.textual_outline_modelled.expect
index 6c7a474..079b3cc 100644
--- a/pkg/front_end/testcases/rasta/static.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   static const staticConstant = 42;
   static get staticGetter => null;
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.expect b/pkg/front_end/testcases/rasta/static.dart.weak.expect
index 3be7b62..3272801 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -158,32 +158,46 @@
 //     use(Foo.staticField());
 //                        ^
 //
+// pkg/front_end/testcases/rasta/static.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticConstant ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:76:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticConstant ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticField ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:78:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticField ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     Foo.staticFunction ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:80:13: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     use(Foo.staticFunction ??= 87);
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static const field core::int* staticConstant = #C1;
-  static field core::int* staticField = 42;
-  synthetic constructor •() → self::Foo*
+  static const field core::int staticConstant = #C1;
+  static field core::int staticField = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   static method staticFunction() → dynamic {}
   static get staticGetter() → dynamic
     return null;
   static set staticSetter(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
@@ -205,15 +219,15 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant++;
         ^^^^^^^^^^^^^^";
-    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(let final core::int #t3 = self::Foo::staticField in let final core::int #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
-    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction++);
             ^^^^^^^^^^^^^^" in #t5);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
@@ -234,8 +248,8 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
     use(++Foo.staticConstant);
               ^^^^^^^^^^^^^^");
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int});
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
     ++Foo.staticFunction;
           ^^^^^^^^^^^^^^";
@@ -305,15 +319,15 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
-    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
-    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
+    self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
     self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
@@ -329,7 +343,7 @@
     use(Foo.staticSetter ??= 87);
             ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect
index 3be7b62..3272801 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -158,32 +158,46 @@
 //     use(Foo.staticField());
 //                        ^
 //
+// pkg/front_end/testcases/rasta/static.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticConstant ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:76:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticConstant ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticField ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:78:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticField ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     Foo.staticFunction ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:80:13: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     use(Foo.staticFunction ??= 87);
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static const field core::int* staticConstant = #C1;
-  static field core::int* staticField = 42;
-  synthetic constructor •() → self::Foo*
+  static const field core::int staticConstant = #C1;
+  static field core::int staticField = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   static method staticFunction() → dynamic {}
   static get staticGetter() → dynamic
     return null;
   static set staticSetter(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
@@ -205,15 +219,15 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant++;
         ^^^^^^^^^^^^^^";
-    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(let final core::int #t3 = self::Foo::staticField in let final core::int #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
-    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction++);
             ^^^^^^^^^^^^^^" in #t5);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
@@ -234,8 +248,8 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
     use(++Foo.staticConstant);
               ^^^^^^^^^^^^^^");
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int});
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
     ++Foo.staticFunction;
           ^^^^^^^^^^^^^^";
@@ -305,15 +319,15 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
-    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
-    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
+    self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
     self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
@@ -329,7 +343,7 @@
     use(Foo.staticSetter ??= 87);
             ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/static.dart.weak.outline.expect
index 2c8f8c3..8372222 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static const field core::int* staticConstant = 42;
-  static field core::int* staticField;
-  synthetic constructor •() → self::Foo*
+  static const field core::int staticConstant = 42;
+  static field core::int staticField;
+  synthetic constructor •() → self::Foo
     ;
   static method staticFunction() → dynamic
     ;
@@ -13,16 +13,6 @@
     ;
   static set staticSetter(dynamic _) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
index 4938d46..2e1d10f 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -158,32 +158,46 @@
 //     use(Foo.staticField());
 //                        ^
 //
+// pkg/front_end/testcases/rasta/static.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticConstant ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:76:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticConstant ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     Foo.staticField ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:78:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     use(Foo.staticField ??= 87);
+//             ^
+//
+// pkg/front_end/testcases/rasta/static.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     Foo.staticFunction ??= 87;
+//         ^
+//
+// pkg/front_end/testcases/rasta/static.dart:80:13: Warning: Operand of null-aware operation '??=' has type 'dynamic Function()' which excludes null.
+//     use(Foo.staticFunction ??= 87);
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static const field core::int* staticConstant = #C1;
-  static field core::int* staticField = 42;
-  synthetic constructor •() → self::Foo*
+  static const field core::int staticConstant = #C1;
+  static field core::int staticField = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   static method staticFunction() → dynamic {}
   static get staticGetter() → dynamic
     return null;
   static set staticSetter(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
@@ -205,15 +219,15 @@
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant++;
         ^^^^^^^^^^^^^^";
-    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(let final core::int #t3 = self::Foo::staticField in let final core::int #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
-    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction++);
             ^^^^^^^^^^^^^^" in #t5);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
@@ -234,8 +248,8 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
     use(++Foo.staticConstant);
               ^^^^^^^^^^^^^^");
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
-    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num) → core::int});
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
     ++Foo.staticFunction;
           ^^^^^^^^^^^^^^";
@@ -305,15 +319,15 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
-    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
-    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
+    self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () → dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
     self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
@@ -329,7 +343,7 @@
     use(Foo.staticSetter ??= 87);
             ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
   }
-  on core::NoSuchMethodError* catch(no-exception-var) {
+  on core::NoSuchMethodError catch(no-exception-var) {
   }
 }
 
diff --git a/pkg/front_end/testcases/rasta/super.dart b/pkg/front_end/testcases/rasta/super.dart
index 99b7d5a..3ad3f2a 100644
--- a/pkg/front_end/testcases/rasta/super.dart
+++ b/pkg/front_end/testcases/rasta/super.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   var a;
   var b;
diff --git a/pkg/front_end/testcases/rasta/super.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/super.dart.textual_outline.expect
index 76c1398..df2c783 100644
--- a/pkg/front_end/testcases/rasta/super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var a;
   var b;
diff --git a/pkg/front_end/testcases/rasta/super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/super.dart.textual_outline_modelled.expect
index e01c37b..9ce4369 100644
--- a/pkg/front_end/testcases/rasta/super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   final f;
   get e => null;
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.expect b/pkg/front_end/testcases/rasta/super.dart.weak.expect
index e24c07d..7c84eab 100644
--- a/pkg/front_end/testcases/rasta/super.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -293,6 +293,22 @@
 //     use(super.n(87));
 //                ^
 //
+// pkg/front_end/testcases/rasta/super.dart:197:11: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     super.m ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:198:15: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     use(super.m ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:199:11: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     super.n ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:200:15: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     use(super.n ??= 42);
+//               ^
+//
 // pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 // Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.m += 42;
@@ -352,7 +368,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -370,24 +386,15 @@
     return 117;
   operator unary-() → dynamic
     return 117;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return true;
   method m() → void {}
   method n() → void {}
   set n(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   final field dynamic d = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   get b() → dynamic
@@ -396,7 +403,7 @@
   set i(dynamic x) → void {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
   method test() → dynamic {
@@ -462,13 +469,13 @@
     self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15{dynamic}.+(1) in #t15);
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
     self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17{dynamic}.+(1) in #t17);
-    let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
-    self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
+    let final core::int #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
+    self::use(let final core::int #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m++;
            ^" in super.{self::A::m}{<unresolved>}.+(1);
-    self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+    self::use(let final () → void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m++);
                ^" in #t23{<unresolved>}.+(1) in #t23);
@@ -476,7 +483,7 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n++;
            ^" in super.{self::A::n}{<unresolved>}.+(1);
-    self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+    self::use(let final () → void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n++);
                ^" in #t25{<unresolved>}.+(1) in #t25);
@@ -498,8 +505,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(1));
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(1));
-    let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
-    self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
+    let final core::int #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
+    self::use(let final core::int #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.m;
@@ -575,7 +582,7 @@
     super.{self::B::i} = 42;
     self::use(super.{self::B::i} = 42);
     super.{self::A::[]=}(87, 42);
-    self::use(let final core::int* #t33 = 87 in let final core::int* #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
+    self::use(let final core::int #t33 = 87 in let final core::int #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
     super.m = 42;
     self::use(super.m = 42);
     super.{self::A::n} = 42;
@@ -598,12 +605,12 @@
     self::use(let final dynamic #t43 = super.{self::A::h} in #t43 == null ?{dynamic} super.{self::A::h} = 42 : #t43);
     super.{self::A::i} == null ?{dynamic} super.{self::B::i} = 42 : null;
     self::use(let final dynamic #t44 = super.{self::A::i} in #t44 == null ?{dynamic} super.{self::B::i} = 42 : #t44);
-    let final core::int* #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
-    self::use(let final core::int* #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int* #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
-    super.{self::A::m} == null ?{core::Object*} super.m = 42 : null;
-    self::use(let final () →* void #t50 = super.{self::A::m} in #t50 == null ?{core::Object*} super.m = 42 : #t50);
-    super.{self::A::n} == null ?{core::Object*} super.{self::A::n} = 42 : null;
-    self::use(let final () →* void #t51 = super.{self::A::n} in #t51 == null ?{core::Object*} super.{self::A::n} = 42 : #t51);
+    let final core::int #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
+    self::use(let final core::int #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
+    super.{self::A::m} == null ?{core::Object} super.m = 42 : null;
+    self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{core::Object} super.m = 42 : #t50);
+    super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
+    self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
     super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
     self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));
     super.{self::A::b} = super.{self::B::b}{dynamic}.+(42);
@@ -622,8 +629,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(42));
-    let final core::int* #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
-    self::use(let final core::int* #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
+    let final core::int #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
+    self::use(let final core::int #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m += 42;
@@ -658,8 +665,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.-(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.-(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.-(42));
-    let final core::int* #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
-    self::use(let final core::int* #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
+    let final core::int #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
+    self::use(let final core::int #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     super.m -= 42;
@@ -679,9 +686,9 @@
   }
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect
index e24c07d..7c84eab 100644
--- a/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -293,6 +293,22 @@
 //     use(super.n(87));
 //                ^
 //
+// pkg/front_end/testcases/rasta/super.dart:197:11: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     super.m ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:198:15: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     use(super.m ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:199:11: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     super.n ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:200:15: Warning: Operand of null-aware operation '??=' has type 'void Function()' which excludes null.
+//     use(super.n ??= 42);
+//               ^
+//
 // pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 // Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.m += 42;
@@ -352,7 +368,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -370,24 +386,15 @@
     return 117;
   operator unary-() → dynamic
     return 117;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return true;
   method m() → void {}
   method n() → void {}
   set n(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   final field dynamic d = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   get b() → dynamic
@@ -396,7 +403,7 @@
   set i(dynamic x) → void {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
   method test() → dynamic {
@@ -462,13 +469,13 @@
     self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15{dynamic}.+(1) in #t15);
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
     self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17{dynamic}.+(1) in #t17);
-    let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
-    self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
+    let final core::int #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
+    self::use(let final core::int #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m++;
            ^" in super.{self::A::m}{<unresolved>}.+(1);
-    self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+    self::use(let final () → void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m++);
                ^" in #t23{<unresolved>}.+(1) in #t23);
@@ -476,7 +483,7 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n++;
            ^" in super.{self::A::n}{<unresolved>}.+(1);
-    self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+    self::use(let final () → void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n++);
                ^" in #t25{<unresolved>}.+(1) in #t25);
@@ -498,8 +505,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(1));
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(1));
-    let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
-    self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
+    let final core::int #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
+    self::use(let final core::int #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.m;
@@ -575,7 +582,7 @@
     super.{self::B::i} = 42;
     self::use(super.{self::B::i} = 42);
     super.{self::A::[]=}(87, 42);
-    self::use(let final core::int* #t33 = 87 in let final core::int* #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
+    self::use(let final core::int #t33 = 87 in let final core::int #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
     super.m = 42;
     self::use(super.m = 42);
     super.{self::A::n} = 42;
@@ -598,12 +605,12 @@
     self::use(let final dynamic #t43 = super.{self::A::h} in #t43 == null ?{dynamic} super.{self::A::h} = 42 : #t43);
     super.{self::A::i} == null ?{dynamic} super.{self::B::i} = 42 : null;
     self::use(let final dynamic #t44 = super.{self::A::i} in #t44 == null ?{dynamic} super.{self::B::i} = 42 : #t44);
-    let final core::int* #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
-    self::use(let final core::int* #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int* #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
-    super.{self::A::m} == null ?{core::Object*} super.m = 42 : null;
-    self::use(let final () →* void #t50 = super.{self::A::m} in #t50 == null ?{core::Object*} super.m = 42 : #t50);
-    super.{self::A::n} == null ?{core::Object*} super.{self::A::n} = 42 : null;
-    self::use(let final () →* void #t51 = super.{self::A::n} in #t51 == null ?{core::Object*} super.{self::A::n} = 42 : #t51);
+    let final core::int #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
+    self::use(let final core::int #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
+    super.{self::A::m} == null ?{core::Object} super.m = 42 : null;
+    self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{core::Object} super.m = 42 : #t50);
+    super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
+    self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
     super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
     self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));
     super.{self::A::b} = super.{self::B::b}{dynamic}.+(42);
@@ -622,8 +629,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.+(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(42));
-    let final core::int* #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
-    self::use(let final core::int* #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
+    let final core::int #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
+    self::use(let final core::int #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m += 42;
@@ -658,8 +665,8 @@
     self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.-(42));
     super.{self::B::i} = super.{self::A::i}{dynamic}.-(42);
     self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.-(42));
-    let final core::int* #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
-    self::use(let final core::int* #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
+    let final core::int #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
+    self::use(let final core::int #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     super.m -= 42;
@@ -679,9 +686,9 @@
   }
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}(){() →* dynamic};
+  new self::C::•().{self::C::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/super.dart.weak.outline.expect
index 33b6451..e68282a 100644
--- a/pkg/front_end/testcases/rasta/super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,7 +18,7 @@
   field dynamic c;
   field dynamic d;
   final field dynamic f;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   get e() → dynamic
     ;
@@ -38,7 +38,7 @@
     ;
   operator unary-() → dynamic
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     ;
   method m() → void
     ;
@@ -46,19 +46,10 @@
     ;
   set n(dynamic _) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   final field dynamic d;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   get b() → dynamic
     ;
@@ -68,7 +59,7 @@
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart b/pkg/front_end/testcases/rasta/super_initializer.dart
index ce255d2..8793150 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Super {
   Super.arg0();
   Super.arg1(a);
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline.expect
index 99130ff..c058c68 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Super {
   Super.arg0();
   Super.arg1(a);
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline_modelled.expect
index 6c33e35..65f2d20 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Sub extends Super {
   Sub.arg0()
       : super.arg0(),
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.expect
index 03f043f..cf141db 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,39 +18,29 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor arg0() → self::Super*
+  constructor arg0() → self::Super
     : super core::Object::•()
     ;
-  constructor arg1(dynamic a) → self::Super*
+  constructor arg1(dynamic a) → self::Super
     : super core::Object::•()
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Super*
+  constructor arg2(dynamic a, dynamic b) → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
   field dynamic field;
-  constructor arg0() → self::Sub*
+  constructor arg0() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:15:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg0()
     ;
-  constructor arg1(dynamic a) → self::Sub*
+  constructor arg1(dynamic a) → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:18:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg1(a)
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Sub*
+  constructor arg2(dynamic a, dynamic b) → self::Sub
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:21:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg2(a, b)
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect
index 03f043f..cf141db 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,39 +18,29 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor arg0() → self::Super*
+  constructor arg0() → self::Super
     : super core::Object::•()
     ;
-  constructor arg1(dynamic a) → self::Super*
+  constructor arg1(dynamic a) → self::Super
     : super core::Object::•()
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Super*
+  constructor arg2(dynamic a, dynamic b) → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
   field dynamic field;
-  constructor arg0() → self::Sub*
+  constructor arg0() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:15:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg0()
     ;
-  constructor arg1(dynamic a) → self::Sub*
+  constructor arg1(dynamic a) → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:18:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg1(a)
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Sub*
+  constructor arg2(dynamic a, dynamic b) → self::Sub
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:21:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg2(a, b)
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.outline.expect
index e366002..7a30c6d 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor arg0() → self::Super*
+  constructor arg0() → self::Super
     ;
-  constructor arg1(dynamic a) → self::Super*
+  constructor arg1(dynamic a) → self::Super
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Super*
+  constructor arg2(dynamic a, dynamic b) → self::Super
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
   field dynamic field;
-  constructor arg0() → self::Sub*
+  constructor arg0() → self::Sub
     ;
-  constructor arg1(dynamic a) → self::Sub*
+  constructor arg1(dynamic a) → self::Sub
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Sub*
+  constructor arg2(dynamic a, dynamic b) → self::Sub
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.transformed.expect
index 03f043f..cf141db 100644
--- a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,39 +18,29 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor arg0() → self::Super*
+  constructor arg0() → self::Super
     : super core::Object::•()
     ;
-  constructor arg1(dynamic a) → self::Super*
+  constructor arg1(dynamic a) → self::Super
     : super core::Object::•()
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Super*
+  constructor arg2(dynamic a, dynamic b) → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
   field dynamic field;
-  constructor arg0() → self::Sub*
+  constructor arg0() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:15:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg0()
     ;
-  constructor arg1(dynamic a) → self::Sub*
+  constructor arg1(dynamic a) → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:18:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg1(a)
     ;
-  constructor arg2(dynamic a, dynamic b) → self::Sub*
+  constructor arg2(dynamic a, dynamic b) → self::Sub
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:21:15: Error: Can't have initializers after 'super'.
         field = 42;
               ^", super self::Super::arg2(a, b)
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart b/pkg/front_end/testcases/rasta/super_mixin.dart
index c6d7ab0..913db8e 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import "mixin_library.dart" show Mixin;
 
 class Super<S> {
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline.expect
index 92fbf88..73b67ed 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_library.dart" show Mixin;
 
 class Super<S> {
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline_modelled.expect
index 330ee1f..526090a 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_library.dart" show Mixin;
 
 class C<V> extends Super<V> with Mixin<V> {}
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
index 0327051..52d7c85 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "mixin_library.dart" as mix;
 
 import "org-dartlang-testcase:///mixin_library.dart" show Mixin;
 
-class Super<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Super<self::Super::S*>*
+class Super<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::S%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 40;
   method f() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&Super&Mixin<V extends core::Object* = dynamic> = self::Super<self::_C&Super&Mixin::V*> with mix::Mixin<self::_C&Super&Mixin::V*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
+abstract class _C&Super&Mixin<V extends core::Object? = dynamic> = self::Super<self::_C&Super&Mixin::V%> with mix::Mixin<self::_C&Super&Mixin::V%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -40,13 +30,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::_C&Super&Mixin::V*
+  mixin-super-stub get t() → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V% a) → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -57,13 +47,13 @@
   mixin-super-stub method publicMethod() → dynamic
     return super.{mix::Mixin::publicMethod}();
 }
-class C<V extends core::Object* = dynamic> extends self::_C&Super&Mixin<self::C::V*> {
-  synthetic constructor •() → self::C<self::C::V*>*
+class C<V extends core::Object? = dynamic> extends self::_C&Super&Mixin<self::C::V%> {
+  synthetic constructor •() → self::C<self::C::V%>
     : super self::_C&Super&Mixin::•()
     ;
 }
 abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&Super&Mixin*
+  synthetic constructor •() → self::_D&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -96,12 +86,12 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D extends self::_D&Super&Mixin {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::_D&Super&Mixin::•()
     ;
 }
-class C2<V extends core::Object* = dynamic> = self::Super<self::C2::V*> with mix::Mixin<self::C2::V*> {
-  synthetic constructor •() → self::C2<self::C2::V*>*
+class C2<V extends core::Object? = dynamic> = self::Super<self::C2::V%> with mix::Mixin<self::C2::V%> {
+  synthetic constructor •() → self::C2<self::C2::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -116,13 +106,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::C2::V*
+  mixin-super-stub get t() → self::C2::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::C2::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
+  mixin-super-stub method g(covariant-by-class self::C2::V% a) → self::C2::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -134,7 +124,7 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -167,11 +157,11 @@
     return super.{mix::Mixin::publicMethod}();
 }
 static method main() → dynamic {
-  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() →* dynamic});
-  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() →* dynamic});
+  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() → dynamic});
+  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() → dynamic});
 }
 
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -182,17 +172,17 @@
 import self as mix;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x = mix::f();
   field dynamic y = null;
   field dynamic z = null;
-  covariant-by-class field mix::Mixin::T* t = null;
-  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
+  covariant-by-class field mix::Mixin::T? t = null;
+  synthetic constructor •() → mix::Mixin<mix::Mixin::T%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(mix::f());
-  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
+  method g(covariant-by-class mix::Mixin::T% a) → mix::Mixin::T?
     return null;
   method h() → dynamic
     return mix::V();
@@ -201,17 +191,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{mix::Mixin::_privateMethod}(){() →* dynamic};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{mix::Mixin::_privateMethod}(){() → dynamic};
 }
 static method f() → dynamic
   return 2;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect
index 0327051..52d7c85 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "mixin_library.dart" as mix;
 
 import "org-dartlang-testcase:///mixin_library.dart" show Mixin;
 
-class Super<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Super<self::Super::S*>*
+class Super<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::S%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return 40;
   method f() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&Super&Mixin<V extends core::Object* = dynamic> = self::Super<self::_C&Super&Mixin::V*> with mix::Mixin<self::_C&Super&Mixin::V*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
+abstract class _C&Super&Mixin<V extends core::Object? = dynamic> = self::Super<self::_C&Super&Mixin::V%> with mix::Mixin<self::_C&Super&Mixin::V%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -40,13 +30,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::_C&Super&Mixin::V*
+  mixin-super-stub get t() → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V% a) → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -57,13 +47,13 @@
   mixin-super-stub method publicMethod() → dynamic
     return super.{mix::Mixin::publicMethod}();
 }
-class C<V extends core::Object* = dynamic> extends self::_C&Super&Mixin<self::C::V*> {
-  synthetic constructor •() → self::C<self::C::V*>*
+class C<V extends core::Object? = dynamic> extends self::_C&Super&Mixin<self::C::V%> {
+  synthetic constructor •() → self::C<self::C::V%>
     : super self::_C&Super&Mixin::•()
     ;
 }
 abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&Super&Mixin*
+  synthetic constructor •() → self::_D&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -96,12 +86,12 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D extends self::_D&Super&Mixin {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::_D&Super&Mixin::•()
     ;
 }
-class C2<V extends core::Object* = dynamic> = self::Super<self::C2::V*> with mix::Mixin<self::C2::V*> {
-  synthetic constructor •() → self::C2<self::C2::V*>*
+class C2<V extends core::Object? = dynamic> = self::Super<self::C2::V%> with mix::Mixin<self::C2::V%> {
+  synthetic constructor •() → self::C2<self::C2::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -116,13 +106,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::C2::V*
+  mixin-super-stub get t() → self::C2::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::C2::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
+  mixin-super-stub method g(covariant-by-class self::C2::V% a) → self::C2::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -134,7 +124,7 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -167,11 +157,11 @@
     return super.{mix::Mixin::publicMethod}();
 }
 static method main() → dynamic {
-  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() →* dynamic});
-  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() →* dynamic});
+  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() → dynamic});
+  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() → dynamic});
 }
 
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -182,17 +172,17 @@
 import self as mix;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x = mix::f();
   field dynamic y = null;
   field dynamic z = null;
-  covariant-by-class field mix::Mixin::T* t = null;
-  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
+  covariant-by-class field mix::Mixin::T? t = null;
+  synthetic constructor •() → mix::Mixin<mix::Mixin::T%>
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(mix::f());
-  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
+  method g(covariant-by-class mix::Mixin::T% a) → mix::Mixin::T?
     return null;
   method h() → dynamic
     return mix::V();
@@ -201,17 +191,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{mix::Mixin::_privateMethod}(){() →* dynamic};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{mix::Mixin::_privateMethod}(){() → dynamic};
 }
 static method f() → dynamic
   return 2;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
index c1b58e7..cc211fc 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "mixin_library.dart" as mix;
 
 import "org-dartlang-testcase:///mixin_library.dart" show Mixin;
 
-class Super<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Super<self::Super::S*>*
+class Super<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::S%>
     ;
   method foo() → dynamic
     ;
   method f() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&Super&Mixin<V extends core::Object* = dynamic> = self::Super<self::_C&Super&Mixin::V*> with mix::Mixin<self::_C&Super&Mixin::V*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
+abstract class _C&Super&Mixin<V extends core::Object? = dynamic> = self::Super<self::_C&Super&Mixin::V%> with mix::Mixin<self::_C&Super&Mixin::V%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -39,13 +29,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::_C&Super&Mixin::V*
+  mixin-super-stub get t() → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V% a) → self::_C&Super&Mixin::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -56,12 +46,12 @@
   mixin-super-stub method publicMethod() → dynamic
     return super.{mix::Mixin::publicMethod}();
 }
-class C<V extends core::Object* = dynamic> extends self::_C&Super&Mixin<self::C::V*> {
-  synthetic constructor •() → self::C<self::C::V*>*
+class C<V extends core::Object? = dynamic> extends self::_C&Super&Mixin<self::C::V%> {
+  synthetic constructor •() → self::C<self::C::V%>
     ;
 }
 abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&Super&Mixin*
+  synthetic constructor •() → self::_D&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -94,11 +84,11 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D extends self::_D&Super&Mixin {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
-class C2<V extends core::Object* = dynamic> = self::Super<self::C2::V*> with mix::Mixin<self::C2::V*> {
-  synthetic constructor •() → self::C2<self::C2::V*>*
+class C2<V extends core::Object? = dynamic> = self::Super<self::C2::V%> with mix::Mixin<self::C2::V%> {
+  synthetic constructor •() → self::C2<self::C2::V%>
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -113,13 +103,13 @@
     return super.{mix::Mixin::z};
   mixin-super-stub set z(dynamic value) → void
     return super.{mix::Mixin::z} = value;
-  mixin-super-stub get t() → self::C2::V*
+  mixin-super-stub get t() → self::C2::V?
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::C2::V? value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
+  mixin-super-stub method g(covariant-by-class self::C2::V% a) → self::C2::V?
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -131,7 +121,7 @@
     return super.{mix::Mixin::publicMethod}();
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super self::Super::•()
     ;
   mixin-super-stub get x() → dynamic
@@ -166,20 +156,20 @@
 static method main() → dynamic
   ;
 
-library test.mixin_library;
+library test.mixin_library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
-class Mixin<T extends core::Object* = dynamic> extends core::Object {
+class Mixin<T extends core::Object? = dynamic> extends core::Object {
   field dynamic x;
   field dynamic y;
   field dynamic z;
-  covariant-by-class field mix::Mixin::T* t;
-  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
+  covariant-by-class field mix::Mixin::T? t;
+  synthetic constructor •() → mix::Mixin<mix::Mixin::T%>
     ;
   method foo() → dynamic
     ;
-  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
+  method g(covariant-by-class mix::Mixin::T% a) → mix::Mixin::T?
     ;
   method h() → dynamic
     ;
@@ -189,16 +179,6 @@
     ;
   method publicMethod() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart b/pkg/front_end/testcases/rasta/super_operator.dart
index 661f0df..a50e586 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart
+++ b/pkg/front_end/testcases/rasta/super_operator.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class A {
   operator +(String s) => null;
 
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline.expect
index 7183595..0a07631 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   operator +(String s) => null;
   operator [](i) => null;
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline_modelled.expect
index 6716ede..4ecde10 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   operator +(String s) => null;
   operator [](i) => null;
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect b/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
index 8b04b02..9f78e48 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,30 +10,20 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     return null;
   operator [](dynamic i) → dynamic
     return null;
   operator []=(dynamic i, dynamic val) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     return super.{self::A::+}("${s}${s}");
   operator [](dynamic i) → dynamic
     return super.{self::A::[]}(i);
@@ -41,19 +31,9 @@
     return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2{dynamic}.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1){dynamic}.+(val) in let final void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
 }
 class Autobianchi extends core::Object {
-  synthetic constructor •() → self::Autobianchi*
+  synthetic constructor •() → self::Autobianchi
     : super core::Object::•()
     ;
   method g() → dynamic
     return super.[](0);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect
index 8b04b02..9f78e48 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,30 +10,20 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     return null;
   operator [](dynamic i) → dynamic
     return null;
   operator []=(dynamic i, dynamic val) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     return super.{self::A::+}("${s}${s}");
   operator [](dynamic i) → dynamic
     return super.{self::A::[]}(i);
@@ -41,19 +31,9 @@
     return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2{dynamic}.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1){dynamic}.+(val) in let final void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
 }
 class Autobianchi extends core::Object {
-  synthetic constructor •() → self::Autobianchi*
+  synthetic constructor •() → self::Autobianchi
     : super core::Object::•()
     ;
   method g() → dynamic
     return super.[](0);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/super_operator.dart.weak.outline.expect
index 49f43e5..3f737d9 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     ;
   operator [](dynamic i) → dynamic
     ;
   operator []=(dynamic i, dynamic val) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(core::String* s) → dynamic
+  operator +(core::String s) → dynamic
     ;
   operator [](dynamic i) → dynamic
     ;
@@ -33,18 +23,8 @@
     ;
 }
 class Autobianchi extends core::Object {
-  synthetic constructor •() → self::Autobianchi*
+  synthetic constructor •() → self::Autobianchi
     ;
   method g() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart b/pkg/front_end/testcases/rasta/supports_reflection.dart
index 3aaf5ea..d14efa0 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
-// @dart=2.9
-
 main() {
   print(const bool.fromEnvironment("dart.library.mirrors"));
 }
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.expect
index 362665c..8fde628 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect
index 362665c..8fde628 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.transformed.expect
index 362665c..8fde628 100644
--- a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart
new file mode 100644
index 0000000..250d198
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+ * for 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.9
+
+// Slightly modified copy of
+// `co19/src/Language/Statements/Switch/execution_case_t02.dart`.
+
+/**
+ * @assertion Execution of a case clause case ek: sk of a switch statement
+ * switch (e) {label11 ..label1j1 case e1: s1 … labeln1 ..labelnjn case en: sn default: sn+1}
+ * proceeds as follows:
+ * The expression ek == id  is evaluated  to an object o which is then
+ * subjected to boolean conversion yielding a value v.
+ * If v is not true, the following case,  case ek+1: sk+1 is executed if it exists.
+ * If case ek+1: sk+1 does not exist, then the default clause is executed by executing sn+1.
+ * If v is true, let h be the smallest integer such that h >= k and sh is non-empty.
+ * If no such h exists, let h = n + 1. The sequence of statements sh is then executed.
+ * If execution reaches the point after sh  then a runtime error occurs, unless h = n + 1.
+ * @description Checks that falling through produces a runtime error, unless
+ * the current clause is an empty case clause or the default clause.
+ * @static-warning
+ * @author msyabro
+ * @reviewer rodionov
+ * @issue 7537
+ */
+
+test(value) {
+  var result;
+
+  switch(value) {
+    case 1:  result = 1;
+    break;
+    case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+    case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+    default: result = 4;
+  }
+  return result;
+}
+
+testEmptyCases(value) {
+  var result;
+
+  switch(value) {
+    case 1:
+    case 2: result = 1; /// static warning - case fall-through, see "Switch"
+    case 3:
+    case 4: result = 2;
+    break;
+    case 5:
+    case 6:
+    default:
+  }
+
+  return result;
+}
+
+main() {
+}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline.expect
new file mode 100644
index 0000000..ec313f9
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.9
+test(value) {}
+testEmptyCases(value) {}
+main() {}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..13243fe
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+// @dart = 2.9
+main() {}
+test(value) {}
+testEmptyCases(value) {}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.expect
new file mode 100644
index 0000000..0c06998
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:37:5: Error: Switch case may fall through to the next case.
+//     case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:38:5: Error: Switch case may fall through to the next case.
+//     case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:48:5: Error: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic value) → dynamic {
+  dynamic result;
+  #L1:
+  switch(value) {
+    #L2:
+    case #C1:
+      {
+        result = 1;
+        break #L1;
+      }
+    #L3:
+    case #C2:
+      {
+        result = 2;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 37);
+      }
+    #L4:
+    case #C3:
+      {
+        result = 3;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 38);
+      }
+    #L5:
+    default:
+      {
+        result = 4;
+      }
+  }
+  return result;
+}
+static method testEmptyCases(dynamic value) → dynamic {
+  dynamic result;
+  #L6:
+  switch(value) {
+    #L7:
+    case #C1:
+    case #C2:
+      {
+        result = 1;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 48);
+      }
+    #L8:
+    case #C3:
+    case #C4:
+      {
+        result = 2;
+        break #L6;
+      }
+    #L9:
+    case #C5:
+    case #C6:
+    default:
+      {}
+  }
+  return result;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.modular.expect
new file mode 100644
index 0000000..0c06998
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:37:5: Error: Switch case may fall through to the next case.
+//     case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:38:5: Error: Switch case may fall through to the next case.
+//     case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:48:5: Error: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic value) → dynamic {
+  dynamic result;
+  #L1:
+  switch(value) {
+    #L2:
+    case #C1:
+      {
+        result = 1;
+        break #L1;
+      }
+    #L3:
+    case #C2:
+      {
+        result = 2;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 37);
+      }
+    #L4:
+    case #C3:
+      {
+        result = 3;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 38);
+      }
+    #L5:
+    default:
+      {
+        result = 4;
+      }
+  }
+  return result;
+}
+static method testEmptyCases(dynamic value) → dynamic {
+  dynamic result;
+  #L6:
+  switch(value) {
+    #L7:
+    case #C1:
+    case #C2:
+      {
+        result = 1;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 48);
+      }
+    #L8:
+    case #C3:
+    case #C4:
+      {
+        result = 2;
+        break #L6;
+      }
+    #L9:
+    case #C5:
+    case #C6:
+    default:
+      {}
+  }
+  return result;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.outline.expect
new file mode 100644
index 0000000..ab9a3c9
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+
+static method test(dynamic value) → dynamic
+  ;
+static method testEmptyCases(dynamic value) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.transformed.expect
new file mode 100644
index 0000000..0c06998
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t01.dart.weak.transformed.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:37:5: Error: Switch case may fall through to the next case.
+//     case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:38:5: Error: Switch case may fall through to the next case.
+//     case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t01.dart:48:5: Error: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic value) → dynamic {
+  dynamic result;
+  #L1:
+  switch(value) {
+    #L2:
+    case #C1:
+      {
+        result = 1;
+        break #L1;
+      }
+    #L3:
+    case #C2:
+      {
+        result = 2;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 37);
+      }
+    #L4:
+    case #C3:
+      {
+        result = 3;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 38);
+      }
+    #L5:
+    default:
+      {
+        result = 4;
+      }
+  }
+  return result;
+}
+static method testEmptyCases(dynamic value) → dynamic {
+  dynamic result;
+  #L6:
+  switch(value) {
+    #L7:
+    case #C1:
+    case #C2:
+      {
+        result = 1;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t01.dart", 48);
+      }
+    #L8:
+    case #C3:
+    case #C4:
+      {
+        result = 2;
+        break #L6;
+      }
+    #L9:
+    case #C5:
+    case #C6:
+    default:
+      {}
+  }
+  return result;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart
index 98e78d8..e0a06c1 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart
@@ -3,7 +3,7 @@
  * for details. All rights reserved. Use of this source code is governed by a
  * BSD-style license that can be found in the LICENSE file.
  */
-// @dart=2.9
+
 // Slightly modified copy of
 // `co19/src/Language/Statements/Switch/execution_case_t02.dart`.
 
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline.expect
index ec313f9..9157edc 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 test(value) {}
 testEmptyCases(value) {}
 main() {}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline_modelled.expect
index 13243fe..d7ab5d3 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 test(value) {}
 testEmptyCases(value) {}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.expect
index 4a25d3e..663fcbe 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,13 +31,11 @@
     case #C2:
       {
         result = 2;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
       }
     #L4:
     case #C3:
       {
         result = 3;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
       }
     #L5:
     default:
@@ -56,7 +54,6 @@
     case #C2:
       {
         result = 1;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
       }
     #L8:
     case #C3:
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect
index 4a25d3e..663fcbe 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,13 +31,11 @@
     case #C2:
       {
         result = 2;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
       }
     #L4:
     case #C3:
       {
         result = 3;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
       }
     #L5:
     default:
@@ -56,7 +54,6 @@
     case #C2:
       {
         result = 1;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
       }
     #L8:
     case #C3:
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.outline.expect
index ab9a3c9..1789280 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test(dynamic value) → dynamic
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.transformed.expect
index 4a25d3e..663fcbe 100644
--- a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,13 +31,11 @@
     case #C2:
       {
         result = 2;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
       }
     #L4:
     case #C3:
       {
         result = 3;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
       }
     #L5:
     default:
@@ -56,7 +54,6 @@
     case #C2:
       {
         result = 1;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
       }
     #L8:
     case #C3:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart b/pkg/front_end/testcases/rasta/switch_fall_through.dart
index 78a52e9..47eea58 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart
@@ -1,7 +1,9 @@
 // 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.md file.
+
 // @dart=2.9
+
 main() {
   switch (1) {
     case 1:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.expect
index c69920c..e542866 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:7:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:9:5: Error: Switch case may fall through to the next case.
 //     case 1:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:13:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:15:5: Error: Switch case may fall through to the next case.
 //     case 2:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:20:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:22:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:26:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:28:5: Error: Switch case may fall through to the next case.
 //     case 4:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:31:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:33:5: Error: Switch case may fall through to the next case.
 //     case 5:
 //     ^
 //
@@ -36,7 +36,7 @@
           break #L1;
           ;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 7);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 9);
       }
     #L3:
     case #C2:
@@ -47,7 +47,7 @@
             break #L1;
           }
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 13);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 15);
       }
     #L4:
     case #C3:
@@ -58,7 +58,7 @@
         finally {
           break #L1;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 20);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 22);
       }
     #L5:
     case #C4:
@@ -69,7 +69,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 26);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 28);
       }
     #L6:
     case #C5:
@@ -79,7 +79,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 31);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 33);
       }
     #L7:
     case #C6:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect
index c69920c..e542866 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:7:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:9:5: Error: Switch case may fall through to the next case.
 //     case 1:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:13:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:15:5: Error: Switch case may fall through to the next case.
 //     case 2:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:20:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:22:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:26:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:28:5: Error: Switch case may fall through to the next case.
 //     case 4:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:31:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:33:5: Error: Switch case may fall through to the next case.
 //     case 5:
 //     ^
 //
@@ -36,7 +36,7 @@
           break #L1;
           ;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 7);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 9);
       }
     #L3:
     case #C2:
@@ -47,7 +47,7 @@
             break #L1;
           }
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 13);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 15);
       }
     #L4:
     case #C3:
@@ -58,7 +58,7 @@
         finally {
           break #L1;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 20);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 22);
       }
     #L5:
     case #C4:
@@ -69,7 +69,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 26);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 28);
       }
     #L6:
     case #C5:
@@ -79,7 +79,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 31);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 33);
       }
     #L7:
     case #C6:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.transformed.expect
index c69920c..e542866 100644
--- a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.transformed.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:7:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:9:5: Error: Switch case may fall through to the next case.
 //     case 1:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:13:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:15:5: Error: Switch case may fall through to the next case.
 //     case 2:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:20:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:22:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:26:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:28:5: Error: Switch case may fall through to the next case.
 //     case 4:
 //     ^
 //
-// pkg/front_end/testcases/rasta/switch_fall_through.dart:31:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:33:5: Error: Switch case may fall through to the next case.
 //     case 5:
 //     ^
 //
@@ -36,7 +36,7 @@
           break #L1;
           ;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 7);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 9);
       }
     #L3:
     case #C2:
@@ -47,7 +47,7 @@
             break #L1;
           }
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 13);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 15);
       }
     #L4:
     case #C3:
@@ -58,7 +58,7 @@
         finally {
           break #L1;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 20);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 22);
       }
     #L5:
     case #C4:
@@ -69,7 +69,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 26);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 28);
       }
     #L6:
     case #C5:
@@ -79,7 +79,7 @@
         }
         finally {
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 31);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 33);
       }
     #L7:
     case #C6:
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart b/pkg/front_end/testcases/rasta/switch_fall_through2.dart
new file mode 100644
index 0000000..422100c
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart
@@ -0,0 +1,38 @@
+// 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.md file.
+
+main() {
+  switch (1) {
+    case 1:
+      {
+        "No fall-through error needed.";
+        break;
+        ; // Empty statement.
+      }
+    case 2:
+      {
+        "Fall-through error needed.";
+        if (true) {
+          break;
+        }
+      }
+    case 3:
+      try {
+        "No fall-through error needed.";
+      } finally {
+        break;
+      }
+    case 4:
+      try {
+        "No fall-through error needed.";
+        break;
+      } finally {}
+    case 5:
+      try {
+        "Fall-through error needed.";
+      } finally {}
+    case 10000:
+      "Should be last. No fall-through error, falling through allowed here.";
+  }
+}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline.expect
new file mode 100644
index 0000000..bae895a
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline.expect
@@ -0,0 +1 @@
+main() {}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bae895a
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.textual_outline_modelled.expect
@@ -0,0 +1 @@
+main() {}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.expect
new file mode 100644
index 0000000..46d5877
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_fall_through2.dart:31:5: Error: Switch case may fall through to the next case.
+//     case 5:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  #L1:
+  switch(1) {
+    #L2:
+    case #C1:
+      {
+        {
+          "No fall-through error needed.";
+          break #L1;
+          ;
+        }
+      }
+    #L3:
+    case #C2:
+      {
+        {
+          "Fall-through error needed.";
+          if(true) {
+            break #L1;
+          }
+        }
+      }
+    #L4:
+    case #C3:
+      {
+        try {
+          "No fall-through error needed.";
+        }
+        finally {
+          break #L1;
+        }
+      }
+    #L5:
+    case #C4:
+      {
+        try {
+          "No fall-through error needed.";
+          break #L1;
+        }
+        finally {
+        }
+      }
+    #L6:
+    case #C5:
+      {
+        try {
+          "Fall-through error needed.";
+        }
+        finally {
+        }
+      }
+    #L7:
+    case #C6:
+      {
+        "Should be last. No fall-through error, falling through allowed here.";
+      }
+  }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 10000
+}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.modular.expect
new file mode 100644
index 0000000..46d5877
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_fall_through2.dart:31:5: Error: Switch case may fall through to the next case.
+//     case 5:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  #L1:
+  switch(1) {
+    #L2:
+    case #C1:
+      {
+        {
+          "No fall-through error needed.";
+          break #L1;
+          ;
+        }
+      }
+    #L3:
+    case #C2:
+      {
+        {
+          "Fall-through error needed.";
+          if(true) {
+            break #L1;
+          }
+        }
+      }
+    #L4:
+    case #C3:
+      {
+        try {
+          "No fall-through error needed.";
+        }
+        finally {
+          break #L1;
+        }
+      }
+    #L5:
+    case #C4:
+      {
+        try {
+          "No fall-through error needed.";
+          break #L1;
+        }
+        finally {
+        }
+      }
+    #L6:
+    case #C5:
+      {
+        try {
+          "Fall-through error needed.";
+        }
+        finally {
+        }
+      }
+    #L7:
+    case #C6:
+      {
+        "Should be last. No fall-through error, falling through allowed here.";
+      }
+  }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 10000
+}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.outline.expect
new file mode 100644
index 0000000..e2cba6b
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.transformed.expect
new file mode 100644
index 0000000..46d5877
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through2.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_fall_through2.dart:31:5: Error: Switch case may fall through to the next case.
+//     case 5:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  #L1:
+  switch(1) {
+    #L2:
+    case #C1:
+      {
+        {
+          "No fall-through error needed.";
+          break #L1;
+          ;
+        }
+      }
+    #L3:
+    case #C2:
+      {
+        {
+          "Fall-through error needed.";
+          if(true) {
+            break #L1;
+          }
+        }
+      }
+    #L4:
+    case #C3:
+      {
+        try {
+          "No fall-through error needed.";
+        }
+        finally {
+          break #L1;
+        }
+      }
+    #L5:
+    case #C4:
+      {
+        try {
+          "No fall-through error needed.";
+          break #L1;
+        }
+        finally {
+        }
+      }
+    #L6:
+    case #C5:
+      {
+        try {
+          "Fall-through error needed.";
+        }
+        finally {
+        }
+      }
+    #L7:
+    case #C6:
+      {
+        "Should be last. No fall-through error, falling through allowed here.";
+      }
+  }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 10000
+}
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart b/pkg/front_end/testcases/rasta/this_invoke.dart
index f96ea7c..42b95f7 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class C {
   m(x) => this(x);
   call(x) => 42;
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline.expect
index cdf68c2..ab53b16 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   m(x) => this(x);
   call(x) => 42;
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline_modelled.expect
index 5be66ca..cabde6d 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   call(x) => 42;
   m(x) => this(x);
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
index 37dfbd7..6346817 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
-    return this.{self::C::call}(x){(dynamic) →* dynamic};
+    return this.{self::C::call}(x){(dynamic) → dynamic};
   method call(dynamic x) → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect
index 37dfbd7..6346817 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
-    return this.{self::C::call}(x){(dynamic) →* dynamic};
+    return this.{self::C::call}(x){(dynamic) → dynamic};
   method call(dynamic x) → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.outline.expect
index 9df04e7..39f5866 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method m(dynamic x) → dynamic
     ;
   method call(dynamic x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
index 37dfbd7..6346817 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
-    return this.{self::C::call}(x){(dynamic) →* dynamic};
+    return this.{self::C::call}(x){(dynamic) → dynamic};
   method call(dynamic x) → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) → dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/try_label.dart b/pkg/front_end/testcases/rasta/try_label.dart
index f5ed518..30406ac 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart
+++ b/pkg/front_end/testcases/rasta/try_label.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   L: try {
     break L;
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/try_label.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/try_label.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.weak.expect b/pkg/front_end/testcases/rasta/try_label.dart.weak.expect
index 14f6249..ead1335 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect
index 14f6249..ead1335 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/try_label.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/try_label.dart.weak.transformed.expect
index 14f6249..ead1335 100644
--- a/pkg/front_end/testcases/rasta/try_label.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/try_label.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart b/pkg/front_end/testcases/rasta/type_literals.dart
index fb2c206..2d8fc23 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart
+++ b/pkg/front_end/testcases/rasta/type_literals.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 typedef void Func();
 
 class C<T> {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline.expect
index 7e37f70..3e0fb14 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef void Func();
 
 class C<T> {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline_modelled.expect
index e5b0266..e51e370 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   test() {}
 }
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
index de13441..c8eb93c 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -282,12 +282,52 @@
 //     use(Func -= 42);
 //         ^^^^
 //
+// pkg/front_end/testcases/rasta/type_literals.dart:74:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     C ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(C ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:76:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     dynamic ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(dynamic ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:78:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     T ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(T ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:80:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     Func ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:81:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(Func ??= 42);
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Func = () →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef Func = () → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -295,8 +335,8 @@
     self::use(#C1);
     #C2;
     self::use(#C2);
-    self::C::T*;
-    self::use(self::C::T*);
+    self::C::T%;
+    self::use(self::C::T%);
     #C3;
     self::use(#C3);
     new self::C::•<dynamic>();
@@ -442,25 +482,25 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T% == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t3 = self::C::T% in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
     #C3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
@@ -512,23 +552,13 @@
     use(Func -= 42);
         ^^^^");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
+  new self::C::•<dynamic>().{self::C::test}(){() → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect
index de13441..c8eb93c 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -282,12 +282,52 @@
 //     use(Func -= 42);
 //         ^^^^
 //
+// pkg/front_end/testcases/rasta/type_literals.dart:74:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     C ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(C ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:76:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     dynamic ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(dynamic ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:78:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     T ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(T ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:80:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     Func ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:81:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(Func ??= 42);
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Func = () →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef Func = () → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -295,8 +335,8 @@
     self::use(#C1);
     #C2;
     self::use(#C2);
-    self::C::T*;
-    self::use(self::C::T*);
+    self::C::T%;
+    self::use(self::C::T%);
     #C3;
     self::use(#C3);
     new self::C::•<dynamic>();
@@ -442,25 +482,25 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T% == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t3 = self::C::T% in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
     #C3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
@@ -512,23 +552,13 @@
     use(Func -= 42);
         ^^^^");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
+  new self::C::•<dynamic>().{self::C::test}(){() → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.outline.expect
index cb3829a..eb7f1e9 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Func = () →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef Func = () → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
   method test() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
index 6d33972..0d73a96 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -282,12 +282,52 @@
 //     use(Func -= 42);
 //         ^^^^
 //
+// pkg/front_end/testcases/rasta/type_literals.dart:74:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     C ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:75:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(C ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:76:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     dynamic ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:77:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(dynamic ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:78:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     T ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:79:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(T ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:80:5: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     Func ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:81:9: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//     use(Func ??= 42);
+//         ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Func = () →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef Func = () → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method test() → dynamic {
@@ -295,8 +335,8 @@
     self::use(#C1);
     #C2;
     self::use(#C2);
-    self::C::T*;
-    self::use(self::C::T*);
+    self::C::T%;
+    self::use(self::C::T%);
     #C3;
     self::use(#C3);
     new self::C::•<dynamic>();
@@ -442,25 +482,25 @@
     #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
     #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T% == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t3 = self::C::T% in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
     #C3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
@@ -512,23 +552,13 @@
     use(Func -= 42);
         ^^^^");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+  if(x =={core::Object::==}{(core::Object) → core::bool} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
+  new self::C::•<dynamic>().{self::C::test}(){() → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart b/pkg/front_end/testcases/rasta/type_with_parse_error.dart
index 9a78135..ac9bb02 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   // When analyzing this, the class element for B hasn't tried to parse its
   // members and isn't yet malformed.
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline.expect
index e8283f8..10499e7 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 
 class A {
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline_modelled.expect
index 56354fb..a2249be 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.expect
index 3d3d7f0..99501ae 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,43 +6,27 @@
 //   int i
 //       ^
 //
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Field 'i' should be initialized because its type 'int' doesn't allow null.
+//   int i
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    new self::B::•<self::A*>();
+    new self::B::•<self::A>();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  field core::int* i = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  field core::int i = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::B::•<self::A*>();
+  new self::B::•<self::A>();
 }
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect
index 3d3d7f0..99501ae 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,43 +6,27 @@
 //   int i
 //       ^
 //
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Field 'i' should be initialized because its type 'int' doesn't allow null.
+//   int i
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    new self::B::•<self::A*>();
+    new self::B::•<self::A>();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  field core::int* i = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  field core::int i = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::B::•<self::A*>();
+  new self::B::•<self::A>();
 }
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.outline.expect
index 3b79ff3..67fc476 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,35 +10,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  field core::int* i;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  field core::int i;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.transformed.expect
index 3d3d7f0..99501ae 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,43 +6,27 @@
 //   int i
 //       ^
 //
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Field 'i' should be initialized because its type 'int' doesn't allow null.
+//   int i
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    new self::B::•<self::A*>();
+    new self::B::•<self::A>();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  field core::int* i = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  field core::int i = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::B::•<self::A*>();
+  new self::B::•<self::A>();
 }
diff --git a/pkg/front_end/testcases/rasta/typedef.dart b/pkg/front_end/testcases/rasta/typedef.dart
index 3478fe6..37e26a6 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart
+++ b/pkg/front_end/testcases/rasta/typedef.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 typedef void Foo();
 
 main() {
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/typedef.dart.textual_outline.expect
index b660849..3c109123 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef void Foo();
 main() {}
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/typedef.dart.textual_outline_modelled.expect
index 0584615..7f7ac99 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 typedef void Foo();
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
index 72932b9..2145069 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,10 +14,15 @@
 //   Foo();
 //   ^^^
 //
+// pkg/front_end/testcases/rasta/typedef.dart:10:3: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//   Foo ??= null;
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Foo = () →* void;
+typedef Foo = () → void;
 static method main() → dynamic {
   core::print(#C1);
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect
index 72932b9..2145069 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,10 +14,15 @@
 //   Foo();
 //   ^^^
 //
+// pkg/front_end/testcases/rasta/typedef.dart:10:3: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//   Foo ??= null;
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Foo = () →* void;
+typedef Foo = () → void;
 static method main() → dynamic {
   core::print(#C1);
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.outline.expect
index e00807a..df89837 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.outline.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
-typedef Foo = () →* void;
+typedef Foo = () → void;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
index aaaf1fc..fe58e59 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,10 +14,15 @@
 //   Foo();
 //   ^^^
 //
+// pkg/front_end/testcases/rasta/typedef.dart:10:3: Warning: Operand of null-aware operation '??=' has type 'Type' which excludes null.
+//  - 'Type' is from 'dart:core'.
+//   Foo ??= null;
+//   ^
+//
 import self as self;
 import "dart:core" as core;
 
-typedef Foo = () →* void;
+typedef Foo = () → void;
 static method main() → dynamic {
   core::print(#C1);
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart b/pkg/front_end/testcases/rasta/unresolved.dart
index 551af83..39c690c 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart
+++ b/pkg/front_end/testcases/rasta/unresolved.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 main() {
   new Missing();
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
index 39e56f4..7e0acd7 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect
index 39e56f4..7e0acd7 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
index 39e56f4..7e0acd7 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart b/pkg/front_end/testcases/rasta/unresolved_constructor.dart
index 3d78bec..3106df6 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class Foo {
   Foo(x, y);
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline.expect
index cd083e3..36e85d2 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo(x, y);
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline_modelled.expect
index cd083e3..36e85d2 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo(x, y);
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
index fc47b33..a334f52 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,19 +17,9 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •(dynamic x, dynamic y) → self::Foo*
+  constructor •(dynamic x, dynamic y) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect
index fc47b33..a334f52 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,19 +17,9 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •(dynamic x, dynamic y) → self::Foo*
+  constructor •(dynamic x, dynamic y) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.outline.expect
index 1e02225..a3a491c 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •(dynamic x, dynamic y) → self::Foo*
+  constructor •(dynamic x, dynamic y) → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
index fc47b33..a334f52 100644
--- a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,19 +17,9 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •(dynamic x, dynamic y) → self::Foo*
+  constructor •(dynamic x, dynamic y) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart b/pkg/front_end/testcases/rasta/unresolved_for_in.dart
index f4954fa..b9e9c1b 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'dart:collection' as collection;
 
 typedef void VoidFunction();
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline.expect
index fb34d84..2b61e89 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection' as collection;
 
 typedef void VoidFunction();
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline_modelled.expect
index 8de2ab7..4d7cff8 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection' as collection;
 
 class Fisk {
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
index 1600ec3..0f321ea 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -87,13 +87,13 @@
 
 import "dart:collection" as collection;
 
-typedef VoidFunction = () →* void;
+typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  synthetic constructor •() → self::Fisk*
+  synthetic constructor •() → self::Fisk
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
-    for (final dynamic #t1 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t1 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
@@ -109,13 +109,13 @@
       print(key);
             ^^^" in this{<unresolved>}.key);
     }
-    for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t2 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Can't assign to a type literal.
     for (Fisk in x) {
          ^^^^";
       core::print(#C1);
     }
-    for (final dynamic #t3 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t3 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
     for (collection in x) {
          ^^^^^^^^^^";
@@ -123,7 +123,7 @@
       print(collection);
             ^^^^^^^^^^");
     }
-    for (final dynamic #t4 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t4 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Can't assign to a type literal.
     for (VoidFunction in x) {
          ^^^^^^^^^^^^";
@@ -133,7 +133,7 @@
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
-      for (final dynamic #t5 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final dynamic #t5 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
@@ -146,20 +146,10 @@
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
-  for (final dynamic #t6 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t6 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
@@ -167,13 +157,13 @@
     print(key);
           ^^^");
   }
-  for (final dynamic #t7 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t7 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Can't assign to a type literal.
   for (Fisk in arguments) {
        ^^^^";
     core::print(#C1);
   }
-  for (final dynamic #t8 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t8 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
   for (collection in arguments) {
        ^^^^^^^^^^";
@@ -181,7 +171,7 @@
     print(collection);
           ^^^^^^^^^^");
   }
-  for (final dynamic #t9 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t9 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Can't assign to a type literal.
   for (VoidFunction in arguments) {
        ^^^^^^^^^^^^";
@@ -191,7 +181,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
-    for (final dynamic #t10 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t10 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect
index 1600ec3..0f321ea 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -87,13 +87,13 @@
 
 import "dart:collection" as collection;
 
-typedef VoidFunction = () →* void;
+typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  synthetic constructor •() → self::Fisk*
+  synthetic constructor •() → self::Fisk
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
-    for (final dynamic #t1 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t1 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
@@ -109,13 +109,13 @@
       print(key);
             ^^^" in this{<unresolved>}.key);
     }
-    for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t2 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Can't assign to a type literal.
     for (Fisk in x) {
          ^^^^";
       core::print(#C1);
     }
-    for (final dynamic #t3 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t3 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
     for (collection in x) {
          ^^^^^^^^^^";
@@ -123,7 +123,7 @@
       print(collection);
             ^^^^^^^^^^");
     }
-    for (final dynamic #t4 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t4 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Can't assign to a type literal.
     for (VoidFunction in x) {
          ^^^^^^^^^^^^";
@@ -133,7 +133,7 @@
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
-      for (final dynamic #t5 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final dynamic #t5 in x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
@@ -146,20 +146,10 @@
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
-  for (final dynamic #t6 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t6 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
@@ -167,13 +157,13 @@
     print(key);
           ^^^");
   }
-  for (final dynamic #t7 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t7 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Can't assign to a type literal.
   for (Fisk in arguments) {
        ^^^^";
     core::print(#C1);
   }
-  for (final dynamic #t8 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t8 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
   for (collection in arguments) {
        ^^^^^^^^^^";
@@ -181,7 +171,7 @@
     print(collection);
           ^^^^^^^^^^");
   }
-  for (final dynamic #t9 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (final dynamic #t9 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Can't assign to a type literal.
   for (VoidFunction in arguments) {
        ^^^^^^^^^^^^";
@@ -191,7 +181,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
-    for (final dynamic #t10 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t10 in arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.outline.expect
index 0d5f4f3..797922d 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:collection" as collection;
 
-typedef VoidFunction = () →* void;
+typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  synthetic constructor •() → self::Fisk*
+  synthetic constructor •() → self::Fisk
     ;
   method it1(dynamic x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
index f07fe0b..1246663 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -87,14 +87,14 @@
 
 import "dart:collection" as collection;
 
-typedef VoidFunction = () →* void;
+typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  synthetic constructor •() → self::Fisk*
+  synthetic constructor •() → self::Fisk
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -116,7 +116,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -128,7 +128,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -142,7 +142,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -158,7 +158,7 @@
     for (1 in x) {
          ^";
       {
-        core::Iterator<dynamic>* :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+        core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
           final dynamic #t5 = :sync-for-iterator.{core::Iterator::current}{dynamic};
           {
@@ -176,21 +176,11 @@
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = (arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t6 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -204,7 +194,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = (arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -216,7 +206,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = (arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -230,7 +220,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = (arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t9 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -246,7 +236,7 @@
   for (1 in arguments) {
        ^";
     {
-      core::Iterator<dynamic>* :sync-for-iterator = (arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = (arguments as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart b/pkg/front_end/testcases/rasta/unresolved_recovery.dart
index 58b69e3..1cc6bf2 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 class E {
   foo() {
     super[4] = 42;
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline.expect
index ee554bb..b529ebe 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class E {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline_modelled.expect
index 03749c1..97cd820 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 beforeTestMissingTry() {}
 
 class E {
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
index 8bd61ac..ea9041e 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -47,26 +47,16 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
   method foo() → dynamic {
     super.[]=(4, 42);
-    let final core::int* #t1 = 4 in invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
+    let final core::int #t1 = 4 in invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
     super[4] += 5;
          ^";
     return super.[](2);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method beforeTestMissingTry() → dynamic {
   self::testMissingTry();
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect
index 8bd61ac..ea9041e 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -47,26 +47,16 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
   method foo() → dynamic {
     super.[]=(4, 42);
-    let final core::int* #t1 = 4 in invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
+    let final core::int #t1 = 4 in invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
     super[4] += 5;
          ^";
     return super.[](2);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method beforeTestMissingTry() → dynamic {
   self::testMissingTry();
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.outline.expect
index 6ed351c..238e8d0 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method beforeTestMissingTry() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart
index 0e70c0f..fa8123d 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 import 'dart:html';
 import 'dart:io';
 
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline.expect
index c1068f2..afaa1af 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:html';
 import 'dart:io';
 
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline_modelled.expect
index c1068f2..afaa1af 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:html';
 import 'dart:io';
 
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.expect
index 7651a58..b04fa96 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.expect
@@ -5,7 +5,7 @@
 // import 'dart:html';
 //        ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:html";
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect
index 7651a58..b04fa96 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 // import 'dart:html';
 //        ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:html";
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.outline.expect
index b80948b..a02b3f2 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 // import 'dart:html';
 //        ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:html";
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.transformed.expect
index 22b2878..81935cb 100644
--- a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:html";
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart
index 7f31b89..d3a38362 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart
@@ -1,7 +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.md file.
-// @dart=2.9
+
 x.y = 42;
 x.z = true;
 void foo() {
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.textual_outline.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.textual_outline.expect
index 25343fd..e649b85 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 x(){}
 .
 y = 42;
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
index d9c6c13..d6c6d8e 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -56,8 +56,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* y = 42;
-static field core::bool* z = true;
+static field core::int y = 42;
+static field core::bool z = true;
 static method x() → dynamic {}
 static method foo() → void {
   if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect
index d9c6c13..d6c6d8e 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -56,8 +56,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* y = 42;
-static field core::bool* z = true;
+static field core::int y = 42;
+static field core::bool z = true;
 static method x() → dynamic {}
 static method foo() → void {
   if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.outline.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.outline.expect
index e8152c0..54f1ca6 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,8 +48,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* y;
-static field core::bool* z;
+static field core::int y;
+static field core::bool z;
 static method x() → dynamic
   ;
 static method foo() → void
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
index d9c6c13..d6c6d8e 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -56,8 +56,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* y = 42;
-static field core::bool* z = true;
+static field core::int y = 42;
+static field core::bool z = true;
 static method x() → dynamic {}
 static method foo() → void {
   if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart b/pkg/front_end/testcases/regress/issue_29937.dart
index 503c5b8..fcbb92c 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart
+++ b/pkg/front_end/testcases/regress/issue_29937.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   [f() {}];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
index 07a6b9a7..2df04ab 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  <() →* Null>[let final () →* Null f = () → Null {} in f];
+  <() → Null>[let final () → Null f = () → Null {} in f];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
index 07a6b9a7..2df04ab 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  <() →* Null>[let final () →* Null f = () → Null {} in f];
+  <() → Null>[let final () → Null f = () → Null {} in f];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
index 462aa91..860524d 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,5 +10,5 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::_GrowableList::_literal1<() →* Null>(let final () →* Null f = () → Null {} in f);
+  core::_GrowableList::_literal1<() → Null>(let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart b/pkg/front_end/testcases/regress/issue_29940.dart
index dcebf16..70bba6a 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart
+++ b/pkg/front_end/testcases/regress/issue_29940.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   var a = "";
   a.b c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
index 9a448c5..274cea7 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,6 +10,6 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
index 9a448c5..274cea7 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,6 +10,6 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
index 9a448c5..274cea7 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,6 +10,6 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart b/pkg/front_end/testcases/regress/issue_29941.dart
index 6653493..6cf1d7e 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart
+++ b/pkg/front_end/testcases/regress/issue_29941.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   var a = "";
   a."";
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29941.dart.weak.expect
index 82b995b..61e6ca4 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
 Try inserting an identifier before '\"\"'.
   a.\"\";
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect
index 82b995b..61e6ca4 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
 Try inserting an identifier before '\"\"'.
   a.\"\";
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29941.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29941.dart.weak.transformed.expect
index 82b995b..61e6ca4 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  core::String* a = "";
+  core::String a = "";
   invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
 Try inserting an identifier before '\"\"'.
   a.\"\";
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart b/pkg/front_end/testcases/regress/issue_29942.dart
index a59e71b..6117e09 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart
+++ b/pkg/front_end/testcases/regress/issue_29942.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29942.dart.textual_outline.expect
index 7b59ab6..7dbc73c 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 f() = h() => null;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
index f545925..1bb672f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,4 +15,4 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () →* Null h = () → Null => null in h;
+  return let final () → Null h = () → Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
index f545925..1bb672f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,4 +15,4 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () →* Null h = () → Null => null in h;
+  return let final () → Null h = () → Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.outline.expect
index 1f16ad6..d64c144 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
index f545925..1bb672f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,4 +15,4 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () →* Null h = () → Null => null in h;
+  return let final () → Null h = () → Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart b/pkg/front_end/testcases/regress/issue_29943.dart
index a16b699..b375a92 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart
+++ b/pkg/front_end/testcases/regress/issue_29943.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   x.(null);
 }
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29943.dart.weak.expect
index cc07a5e..039f11eb 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect
index cc07a5e..039f11eb 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29943.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29943.dart.weak.transformed.expect
index cc07a5e..039f11eb 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart b/pkg/front_end/testcases/regress/issue_29944.dart
index 535993f..a938fee 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart
+++ b/pkg/front_end/testcases/regress/issue_29944.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class C {
   C();
   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29944.dart.textual_outline.expect
index 9c83e12..84b02fb 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C();
   var C;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29944.dart.weak.expect
index 4ad1117..589168e 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,19 +12,9 @@
 
 class C extends core::Object {
   field dynamic C = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect
index 4ad1117..589168e 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,19 +12,9 @@
 
 class C extends core::Object {
   field dynamic C = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29944.dart.weak.outline.expect
index 8d3ae5d..847c365 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,18 +12,8 @@
 
 class C extends core::Object {
   field dynamic C;
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29944.dart.weak.transformed.expect
index 4ad1117..589168e 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,19 +12,9 @@
 
 class C extends core::Object {
   field dynamic C = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart b/pkg/front_end/testcases/regress/issue_29945.dart
index 0bf5840..dd63202 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart
+++ b/pkg/front_end/testcases/regress/issue_29945.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   s.bool x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
index d77ee07..7fba4f8 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
index d77ee07..7fba4f8 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
index d77ee07..7fba4f8 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart b/pkg/front_end/testcases/regress/issue_29975.dart
index 2b754c1..69f2e31 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart
+++ b/pkg/front_end/testcases/regress/issue_29975.dart
@@ -1,7 +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.
-// @dart=2.9
+
 typedef void F();
 typedef void F();
 
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline.expect
index a25da4a..e3e4824 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef void F();
 typedef void F();
 void main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline_modelled.expect
index a25da4a..e3e4824 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef void F();
 typedef void F();
 void main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29975.dart.weak.expect
index cb75715..f2c1554 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 //
 import self as self;
 
-typedef F = () →* void;
+typedef F = () → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect
index cb75715..f2c1554 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 //
 import self as self;
 
-typedef F = () →* void;
+typedef F = () → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29975.dart.weak.outline.expect
index caabaf6..4194754 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,6 +11,6 @@
 //
 import self as self;
 
-typedef F = () →* void;
+typedef F = () → void;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29975.dart.weak.transformed.expect
index cb75715..f2c1554 100644
--- a/pkg/front_end/testcases/regress/issue_29975.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 //
 import self as self;
 
-typedef F = () →* void;
+typedef F = () → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart b/pkg/front_end/testcases/regress/issue_29976.dart
index c5e859d..3d2a10c 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart
+++ b/pkg/front_end/testcases/regress/issue_29976.dart
@@ -1,7 +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.
-// @dart=2.9
+
 get x => null;
 
 void main() {
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29976.dart.weak.expect
index b65bb80..0f72310 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect
index b65bb80..0f72310 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29976.dart.weak.outline.expect
index e1cb793..fcf3f2a 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29976.dart.weak.transformed.expect
index b65bb80..0f72310 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart b/pkg/front_end/testcases/regress/issue_29977.dart
index d8594ce..958074a 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart
+++ b/pkg/front_end/testcases/regress/issue_29977.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'data:async';
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline.expect
index d4b5e9c..86b4d9e 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'data:async';
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline_modelled.expect
index d4b5e9c..86b4d9e 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'data:async';
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29977.dart.weak.expect
index b0dc750..4ce4154 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect
index b0dc750..4ce4154 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29977.dart.weak.outline.expect
index 06b2df4..9cbb03e 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29977.dart.weak.transformed.expect
index b0dc750..4ce4154 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart b/pkg/front_end/testcases/regress/issue_29978.dart
index 5169226..997d9aa 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart
+++ b/pkg/front_end/testcases/regress/issue_29978.dart
@@ -1,7 +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.
-// @dart=2.9
+
 foo(a, b) => null;
 
 main() {
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
index 7df13fc..2a44271 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo(a, b) => null;
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
index 7df13fc..2a44271 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo(a, b) => null;
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
index a166dcf..34a58b5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
 static method main() → dynamic {
-  self::foo(null, let final () →* Null f = () → Null {} in f);
+  self::foo(null, let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
index a166dcf..34a58b5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
 static method main() → dynamic {
-  self::foo(null, let final () →* Null f = () → Null {} in f);
+  self::foo(null, let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
index 21955b2..8884d25 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method foo(dynamic a, dynamic b) → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
index a166dcf..34a58b5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
 static method main() → dynamic {
-  self::foo(null, let final () →* Null f = () → Null {} in f);
+  self::foo(null, let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart b/pkg/front_end/testcases/regress/issue_29979.dart
index 4034b94..c6bfd12 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart
+++ b/pkg/front_end/testcases/regress/issue_29979.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   (f() {})();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
index 66cb15d..453aa64 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  (let final () →* Null f = () → Null {} in f)(){() →* Null};
+  (let final () → Null f = () → Null {} in f)(){() → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
index 66cb15d..453aa64 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  (let final () →* Null f = () → Null {} in f)(){() →* Null};
+  (let final () → Null f = () → Null {} in f)(){() → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
index 66cb15d..453aa64 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  (let final () →* Null f = () → Null {} in f)(){() →* Null};
+  (let final () → Null f = () → Null {} in f)(){() → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart b/pkg/front_end/testcases/regress/issue_29980.dart
index be250c4..184c87a 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart
+++ b/pkg/front_end/testcases/regress/issue_29980.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   x.y z;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29980.dart.weak.expect
index 1e683cf..4aded02 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect
index 1e683cf..4aded02 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29980.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29980.dart.weak.transformed.expect
index 1e683cf..4aded02 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart b/pkg/front_end/testcases/regress/issue_29981.dart
index fe5cb48..354f8ce 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart
+++ b/pkg/front_end/testcases/regress/issue_29981.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class C<T> {
   C<String, String> field;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline.expect
index 6cf0086..2dd5595 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   C<String, String> field;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline_modelled.expect
index 6cf0086..2dd5595 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   C<String, String> field;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29981.dart.weak.expect
index d56e571..99e313c 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,21 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
+class C<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type field = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>());
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect
index d56e571..99e313c 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,21 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
+class C<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type field = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>());
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29981.dart.weak.outline.expect
index 18fd38b..ccbe055 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,20 +9,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
+class C<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type field;
-  synthetic constructor •() → self::C<self::C::T*>*
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29981.dart.weak.transformed.expect
index d56e571..99e313c 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,21 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
+class C<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type field = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>());
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart b/pkg/front_end/testcases/regress/issue_29982.dart
index 2047a2a..4108de0 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart
+++ b/pkg/front_end/testcases/regress/issue_29982.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
   var eh = {"éh": "éh"};
   print('${eh[éh']}');
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
index 382c715..b69f989 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -41,8 +41,8 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
+  core::Map<core::String, core::String> eh = <core::String, core::String>{"\u0233h": "\u0233h"};
   core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
   print('\${eh[\u0233h']}');
-              ^^"){(core::Object*) →* core::String*}}");
+              ^^"){(core::Object?) → core::String?}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect
index 382c715..b69f989 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -41,8 +41,8 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
+  core::Map<core::String, core::String> eh = <core::String, core::String>{"\u0233h": "\u0233h"};
   core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
   print('\${eh[\u0233h']}');
-              ^^"){(core::Object*) →* core::String*}}");
+              ^^"){(core::Object?) → core::String?}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.outline.expect
index 2b7388c..c6e9342 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
index 382c715..b69f989 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -41,8 +41,8 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
+  core::Map<core::String, core::String> eh = <core::String, core::String>{"\u0233h": "\u0233h"};
   core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
   print('\${eh[\u0233h']}');
-              ^^"){(core::Object*) →* core::String*}}");
+              ^^"){(core::Object?) → core::String?}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart b/pkg/front_end/testcases/regress/issue_29983.dart
index 736b29b..a2ffd95 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart
+++ b/pkg/front_end/testcases/regress/issue_29983.dart
@@ -1,7 +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.
-// @dart=2.9
+
 f() sync* {
   // Returning value from generator: forbidden.
   return missing;
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29983.dart.textual_outline.expect
index 16f1982..352a7fd 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 f() sync* {}
 g() sync* => dummy;
 h() sync* {}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
index 990d69c..a23c69e 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,6 +31,6 @@
 g() sync* => dummy;
              ^";
 static method h() → dynamic sync* {
-  (() → core::String* => "return")(){() →* core::String*};
+  (() → core::String => "return")(){() → core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect
index 990d69c..a23c69e 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,6 +31,6 @@
 g() sync* => dummy;
              ^";
 static method h() → dynamic sync* {
-  (() → core::String* => "return")(){() →* core::String*};
+  (() → core::String => "return")(){() → core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.outline.expect
index 6f674f3..973fdf6 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → dynamic sync* 
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
index 38371ce..692911f 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,10 +22,10 @@
 import "dart:core" as core;
 
 static method f() → dynamic /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+  function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
         invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
   return missing;
@@ -38,10 +38,10 @@
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
 static method g() → dynamic /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+  function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
 g() sync* => dummy;
              ^";
@@ -52,12 +52,12 @@
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
 static method h() → dynamic /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+  function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
-        (() → core::String* => "return")(){() →* core::String*};
+        (() → core::String => "return")(){() → core::String};
       }
       return false;
     }
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart b/pkg/front_end/testcases/regress/issue_29984.dart
index f0804ae..e55ab01 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart
+++ b/pkg/front_end/testcases/regress/issue_29984.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   for (int i = i;; false) {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
index 0c71c56..df667bd 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
   for (int i = i;; false) {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect
index 0c71c56..df667bd 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
   for (int i = i;; false) {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
index 0c71c56..df667bd 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
   for (int i = i;; false) {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart b/pkg/front_end/testcases/regress/issue_29985.dart
index e777de7..d0999ee 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart
+++ b/pkg/front_end/testcases/regress/issue_29985.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   🔛
 }
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
index ca444a5..5ea90cf 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect
index ca444a5..5ea90cf 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.outline.expect
index 69da87f..c1ca3fa 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
index ca444a5..5ea90cf 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart b/pkg/front_end/testcases/regress/issue_29986.dart
index d7f123d..42fb594 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart
+++ b/pkg/front_end/testcases/regress/issue_29986.dart
@@ -1,7 +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.
-// @dart=2.9
+
 main() {
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29986.dart.textual_outline.expect
index 0533144..9278487 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 C(this.name);
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29986.dart.weak.expect
index f0b03d5..a4fd935 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect
index f0b03d5..a4fd935 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29986.dart.weak.outline.expect
index 6556bc9..b8962fd 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29986.dart.weak.transformed.expect
index f0b03d5..a4fd935 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart b/pkg/front_end/testcases/regress/issue_29987.dart
index 46adde9..78c7779 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart
+++ b/pkg/front_end/testcases/regress/issue_29987.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import "dart_:core";
 
 main() {
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline.expect
index 3f9947c..b891f0b 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart_:core";
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline_modelled.expect
index 3f9947c..b891f0b 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart_:core";
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29987.dart.weak.expect
index bd49b16..ca4cbbb 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect
index bd49b16..ca4cbbb 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29987.dart.weak.outline.expect
index f9a5de8..9d59b0d 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29987.dart.weak.transformed.expect
index bd49b16..ca4cbbb 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart b/pkg/front_end/testcases/regress/issue_30834.dart
index 3b38f5e..12a2a33 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart
+++ b/pkg/front_end/testcases/regress/issue_30834.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   set A(v) {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_30834.dart.textual_outline.expect
index e4eaeba..0f21945 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   set A(v) {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30834.dart.weak.expect
index 6f89ffe..e4def34 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set A(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::A} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect
index 6f89ffe..e4def34 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set A(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::A} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_30834.dart.weak.outline.expect
index 38def95..c4c554c 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,20 +11,10 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   set A(dynamic v) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.weak.transformed.expect
index 6f89ffe..e4def34 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set A(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::A} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart b/pkg/front_end/testcases/regress/issue_30836.dart
index 4c408d4..a674a5c 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart
+++ b/pkg/front_end/testcases/regress/issue_30836.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class A {
   final int x;
   A() {}
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline.expect
index 98cfbdf..5a96f26 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   final int x;
   A() {}
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline_modelled.expect
index 60ea563..32f0ddd 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A() {}
   final int x;
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30836.dart.weak.expect
index 422b26c..34766f3 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = null;
-  constructor •() → self::A*
+  final field core::int x = null;
+  constructor •() → self::A
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect
index 422b26c..34766f3 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = null;
-  constructor •() → self::A*
+  final field core::int x = null;
+  constructor •() → self::A
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_30836.dart.weak.outline.expect
index c05ba76..ed2a8d7 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.weak.outline.expect
@@ -1,19 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  constructor •() → self::A*
+  final field core::int x;
+  constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30836.dart.weak.transformed.expect
index 422b26c..34766f3 100644
--- a/pkg/front_end/testcases/regress/issue_30836.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = null;
-  constructor •() → self::A*
+  final field core::int x = null;
+  constructor •() → self::A
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart b/pkg/front_end/testcases/regress/issue_30838.dart
index aeb388f..1c52adb 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart
+++ b/pkg/front_end/testcases/regress/issue_30838.dart
@@ -1,7 +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.
-// @dart=2.9
+
 typedef Foo<S> = S Function<T>(T x);
 int foo<T>(T x) => 3;
 Foo<int> bar() => foo;
@@ -10,7 +10,7 @@
 }
 
 class A {
-  Foo<int> f;
+  Foo<int> f = throw '';
   void test() {
     f<String>("hello");
   }
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline.expect
index 011ce8e..980ab88 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 typedef Foo<S> = S Function<T>(T x);
 int foo<T>(T x) => 3;
 Foo<int> bar() => foo;
 void test1() {}
 
 class A {
-  Foo<int> f;
+  Foo<int> f = throw '';
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline_modelled.expect
index 6ee1927..496953b 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 Foo<int> bar() => foo;
 
 class A {
-  Foo<int> f;
+  Foo<int> f = throw '';
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
index f1431a1..9b17684 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* S*;
+typedef Foo<S extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → S%;
 class A extends core::Object {
-  field <T extends core::Object* = dynamic>(T*) →* core::int* f = null;
-  synthetic constructor •() → self::A*
+  field <T extends core::Object? = dynamic>(T%) → core::int f = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test() → void {
-    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
+    let final core::String #t1 = "hello" in this.{self::A::f}{<T extends core::Object? = dynamic>(T%) → core::int}<core::String>(#t1){(core::String) → core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → core::int*
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → core::int
   return 3;
-static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
+static method bar() → <T extends core::Object? = dynamic>(T%) → core::int
   return #C1;
 static method test1() → void {
-  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
+  self::bar()<core::String>("hello"){(core::String) → core::int};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect
index f1431a1..9b17684 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* S*;
+typedef Foo<S extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → S%;
 class A extends core::Object {
-  field <T extends core::Object* = dynamic>(T*) →* core::int* f = null;
-  synthetic constructor •() → self::A*
+  field <T extends core::Object? = dynamic>(T%) → core::int f = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test() → void {
-    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
+    let final core::String #t1 = "hello" in this.{self::A::f}{<T extends core::Object? = dynamic>(T%) → core::int}<core::String>(#t1){(core::String) → core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → core::int*
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → core::int
   return 3;
-static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
+static method bar() → <T extends core::Object? = dynamic>(T%) → core::int
   return #C1;
 static method test1() → void {
-  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
+  self::bar()<core::String>("hello"){(core::String) → core::int};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.outline.expect
index 8c35b53..e29e598 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* S*;
+typedef Foo<S extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → S%;
 class A extends core::Object {
-  field <T extends core::Object* = dynamic>(T*) →* core::int* f;
-  synthetic constructor •() → self::A*
+  field <T extends core::Object? = dynamic>(T%) → core::int f;
+  synthetic constructor •() → self::A
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → core::int*
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → core::int
   ;
-static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
+static method bar() → <T extends core::Object? = dynamic>(T%) → core::int
   ;
 static method test1() → void
   ;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
index d1bd2c9..06e5a1d 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<S extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* S*;
+typedef Foo<S extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → S%;
 class A extends core::Object {
-  field <T extends core::Object* = dynamic>(T*) →* core::int* f = null;
-  synthetic constructor •() → self::A*
+  field <T extends core::Object? = dynamic>(T%) → core::int f = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test() → void {
-    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
+    let final core::String #t1 = "hello" in this.{self::A::f}{<T extends core::Object? = dynamic>(T%) → core::int}<core::String>(#t1){(core::String) → core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → core::int*
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → core::int
   return 3;
-static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
+static method bar() → <T extends core::Object? = dynamic>(T%) → core::int
   return #C1;
 static method test1() → void {
-  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
+  self::bar()<core::String>("hello"){(core::String) → core::int};
 }
 static method main() → dynamic {}
 
@@ -37,4 +27,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///issue_30838.dart:15:15 -> StringConstant("hello")
-Extra constant evaluation: evaluated: 7, effectively constant: 1
+Extra constant evaluation: evaluated: 8, effectively constant: 1
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart b/pkg/front_end/testcases/regress/issue_30981.dart
index eacdc1e..09e7fd8 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart
+++ b/pkg/front_end/testcases/regress/issue_30981.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   get A {
     print("Actually, I'm a getter, not a constructor.");
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_30981.dart.textual_outline.expect
index 3a6d1c8..4e0b986 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   get A {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30981.dart.weak.expect
index c413ee9..867cea6 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get A() → dynamic {
     core::print("Actually, I'm a getter, not a constructor.");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect
index c413ee9..867cea6 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get A() → dynamic {
     core::print("Actually, I'm a getter, not a constructor.");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_30981.dart.weak.outline.expect
index d2c3725..d57a3eb 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,20 +11,10 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   get A() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30981.dart.weak.transformed.expect
index c413ee9..867cea6 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,22 +11,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get A() → dynamic {
     core::print("Actually, I'm a getter, not a constructor.");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart b/pkg/front_end/testcases/regress/issue_30994.dart
index 6cfe28e..4f355c7 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart
+++ b/pkg/front_end/testcases/regress/issue_30994.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library lib;
 part '$foo';
 part '$foo/bar';
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_30994.dart.textual_outline.expect
index 7b888eb..d76d046 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library lib;
 part '$foo';
 part '$foo/bar';
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30994.dart.weak.expect
index 23676b0..5e9f6e6 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.weak.expect
@@ -1,4 +1,4 @@
-library lib;
+library lib /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,13 +32,13 @@
 //
 import self as self;
 
-part org-dartlang-malformed-uri:bad247;
-part org-dartlang-malformed-uri:bad260;
-part org-dartlang-malformed-uri:bad277;
-part org-dartlang-malformed-uri:bad294;
-part org-dartlang-malformed-uri:bad310;
-part org-dartlang-malformed-uri:bad331;
-part org-dartlang-malformed-uri:bad360;
+part org-dartlang-malformed-uri:bad235;
+part org-dartlang-malformed-uri:bad248;
+part org-dartlang-malformed-uri:bad265;
+part org-dartlang-malformed-uri:bad282;
+part org-dartlang-malformed-uri:bad298;
+part org-dartlang-malformed-uri:bad319;
+part org-dartlang-malformed-uri:bad348;
 static method main() → dynamic {}
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect
index 23676b0..5e9f6e6 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library lib;
+library lib /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,13 +32,13 @@
 //
 import self as self;
 
-part org-dartlang-malformed-uri:bad247;
-part org-dartlang-malformed-uri:bad260;
-part org-dartlang-malformed-uri:bad277;
-part org-dartlang-malformed-uri:bad294;
-part org-dartlang-malformed-uri:bad310;
-part org-dartlang-malformed-uri:bad331;
-part org-dartlang-malformed-uri:bad360;
+part org-dartlang-malformed-uri:bad235;
+part org-dartlang-malformed-uri:bad248;
+part org-dartlang-malformed-uri:bad265;
+part org-dartlang-malformed-uri:bad282;
+part org-dartlang-malformed-uri:bad298;
+part org-dartlang-malformed-uri:bad319;
+part org-dartlang-malformed-uri:bad348;
 static method main() → dynamic {}
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_30994.dart.weak.outline.expect
index cd7a4c9..f9f9c54 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library lib;
+library lib /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,13 +32,13 @@
 //
 import self as self;
 
-part org-dartlang-malformed-uri:bad247;
-part org-dartlang-malformed-uri:bad260;
-part org-dartlang-malformed-uri:bad277;
-part org-dartlang-malformed-uri:bad294;
-part org-dartlang-malformed-uri:bad310;
-part org-dartlang-malformed-uri:bad331;
-part org-dartlang-malformed-uri:bad360;
+part org-dartlang-malformed-uri:bad235;
+part org-dartlang-malformed-uri:bad248;
+part org-dartlang-malformed-uri:bad265;
+part org-dartlang-malformed-uri:bad282;
+part org-dartlang-malformed-uri:bad298;
+part org-dartlang-malformed-uri:bad319;
+part org-dartlang-malformed-uri:bad348;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30994.dart.weak.transformed.expect
index 23676b0..5e9f6e6 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library lib;
+library lib /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,13 +32,13 @@
 //
 import self as self;
 
-part org-dartlang-malformed-uri:bad247;
-part org-dartlang-malformed-uri:bad260;
-part org-dartlang-malformed-uri:bad277;
-part org-dartlang-malformed-uri:bad294;
-part org-dartlang-malformed-uri:bad310;
-part org-dartlang-malformed-uri:bad331;
-part org-dartlang-malformed-uri:bad360;
+part org-dartlang-malformed-uri:bad235;
+part org-dartlang-malformed-uri:bad248;
+part org-dartlang-malformed-uri:bad265;
+part org-dartlang-malformed-uri:bad282;
+part org-dartlang-malformed-uri:bad298;
+part org-dartlang-malformed-uri:bad319;
+part org-dartlang-malformed-uri:bad348;
 static method main() → dynamic {}
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart b/pkg/front_end/testcases/regress/issue_31155.dart
index fd6b43a..5e9082b 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart
+++ b/pkg/front_end/testcases/regress/issue_31155.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class A {}
 
 class B {
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31155.dart.textual_outline.expect
index 89f0128..a4da467 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 class B {}
 class C {
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31155.dart.weak.expect
index 2f83d69..2a97a23 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,49 +11,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::Map<self::A*, self::B*>* f = <self::A*, self::B*>{};
-  synthetic constructor •() → self::C*
+  field core::Map<self::A, self::B> f = <self::A, self::B>{};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect
index 2f83d69..2a97a23 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,49 +11,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::Map<self::A*, self::B*>* f = <self::A*, self::B*>{};
-  synthetic constructor •() → self::C*
+  field core::Map<self::A, self::B> f = <self::A, self::B>{};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31155.dart.weak.outline.expect
index 2a3e5ef..c529779 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,47 +11,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::Map<self::A*, self::B*>* f;
-  synthetic constructor •() → self::C*
+  field core::Map<self::A, self::B> f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31155.dart.weak.transformed.expect
index 2f83d69..2a97a23 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,49 +11,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::Map<self::A*, self::B*>* f = <self::A*, self::B*>{};
-  synthetic constructor •() → self::C*
+  field core::Map<self::A, self::B> f = <self::A, self::B>{};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart b/pkg/front_end/testcases/regress/issue_31157.dart
index 3ba832e..f45fa8e 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart
+++ b/pkg/front_end/testcases/regress/issue_31157.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   return null?.(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31157.dart.weak.expect
index f999813..0d85ca7 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect
index f999813..0d85ca7 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31157.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31157.dart.weak.transformed.expect
index f999813..0d85ca7 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart b/pkg/front_end/testcases/regress/issue_31171.dart
index e57f24d..c7ffc48 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart
+++ b/pkg/front_end/testcases/regress/issue_31171.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 main() {}
 
 typedef T = 
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31171.dart.textual_outline.expect
index fd4484b..fb9c573 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef T = ;
 typedef F = Map<String, dynamic> Function();
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
index 7b520a3..6fe03c2 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,5 +18,5 @@
 import "dart:core" as core;
 
 typedef T = invalid-type;
-typedef F = () →* core::Map<core::String*, dynamic>*;
+typedef F = () → core::Map<core::String, dynamic>;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect
index 7b520a3..6fe03c2 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,5 +18,5 @@
 import "dart:core" as core;
 
 typedef T = invalid-type;
-typedef F = () →* core::Map<core::String*, dynamic>*;
+typedef F = () → core::Map<core::String, dynamic>;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
index 1b5d642..91ef7c2 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,6 +18,6 @@
 import "dart:core" as core;
 
 typedef T = invalid-type;
-typedef F = () →* core::Map<core::String*, dynamic>*;
+typedef F = () → core::Map<core::String, dynamic>;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
index 7b520a3..6fe03c2 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,5 +18,5 @@
 import "dart:core" as core;
 
 typedef T = invalid-type;
-typedef F = () →* core::Map<core::String*, dynamic>*;
+typedef F = () → core::Map<core::String, dynamic>;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart b/pkg/front_end/testcases/regress/issue_31180.dart
index 0d88261..a19affa 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart
+++ b/pkg/front_end/testcases/regress/issue_31180.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 bad() {
   return null?[1];
 }
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
index 821c285..c9dfe0e 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31180.dart:6:15: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/regress/issue_31180.dart:8:15: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 //   return null?[1];
 //               ^
-// pkg/front_end/testcases/regress/issue_31180.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/regress/issue_31180.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
index 821c285..c9dfe0e 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31180.dart:6:15: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/regress/issue_31180.dart:8:15: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 //   return null?[1];
 //               ^
-// pkg/front_end/testcases/regress/issue_31180.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/regress/issue_31180.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart b/pkg/front_end/testcases/regress/issue_31180_2.dart
new file mode 100644
index 0000000..7109223
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart
@@ -0,0 +1,9 @@
+// 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.
+
+bad() {
+  return null?[1];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline.expect
new file mode 100644
index 0000000..59cd59e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+bad() {}
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..59cd59e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+bad() {}
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.expect
new file mode 100644
index 0000000..85b466a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method bad() → dynamic {
+  return let final has-declared-initializer dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.modular.expect
new file mode 100644
index 0000000..85b466a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method bad() → dynamic {
+  return let final has-declared-initializer dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.outline.expect
new file mode 100644
index 0000000..9f56f49
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180_2.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method bad() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart b/pkg/front_end/testcases/regress/issue_31181.dart
index 611e587..0cb1658 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart
+++ b/pkg/front_end/testcases/regress/issue_31181.dart
@@ -1,9 +1,9 @@
 // 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.
-// @dart=2.9
+
 typedef Foo<T> = T Function<T>(T a);
 
-Foo x;
+Foo x = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline.expect
index 4d5a8eb..27cdd6e 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef Foo<T> = T Function<T>(T a);
-Foo x;
+Foo x = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline_modelled.expect
index eaba308..9c2db1c 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
-Foo x;
+Foo x = throw '';
 main() {}
 typedef Foo<T> = T Function<T>(T a);
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31181.dart.weak.expect
index 20bc5b5..80017df 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.weak.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* T*;
-static field <T extends core::Object* = dynamic>(T*) →* T* x;
+typedef Foo<unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → T%;
+static field <T extends core::Object? = dynamic>(T%) → T% x = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect
index 20bc5b5..80017df 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* T*;
-static field <T extends core::Object* = dynamic>(T*) →* T* x;
+typedef Foo<unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → T%;
+static field <T extends core::Object? = dynamic>(T%) → T% x = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31181.dart.weak.outline.expect
index 2181f89..f17c649 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* T*;
-static field <T extends core::Object* = dynamic>(T*) →* T* x;
+typedef Foo<unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → T%;
+static field <T extends core::Object? = dynamic>(T%) → T% x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31181.dart.weak.transformed.expect
index 20bc5b5..80017df 100644
--- a/pkg/front_end/testcases/regress/issue_31181.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* T*;
-static field <T extends core::Object* = dynamic>(T*) →* T* x;
+typedef Foo<unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(T%) → T%;
+static field <T extends core::Object? = dynamic>(T%) → T% x = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart b/pkg/front_end/testcases/regress/issue_31183.dart
index 177c12e..4416b71 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart
+++ b/pkg/front_end/testcases/regress/issue_31183.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class C {
   operator unary- => 0;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31183.dart.textual_outline.expect
index ab453b5..36ac0b8 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   operator unary- ()=> 0;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31183.dart.weak.expect
index 3c62f2d..8fa5525 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator unary-() → dynamic
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect
index 3c62f2d..8fa5525 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator unary-() → dynamic
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31183.dart.weak.outline.expect
index ab4dc0e..1b72925 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,20 +15,10 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   operator unary-() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31183.dart.weak.transformed.expect
index 3c62f2d..8fa5525 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,21 +15,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator unary-() → dynamic
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart b/pkg/front_end/testcases/regress/issue_31184.dart
index 73fd726..83f1665 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart
+++ b/pkg/front_end/testcases/regress/issue_31184.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   for (int i = 0, i > 10; i++) {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
index 60fc8d2..c799515 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,11 +22,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+  for (core::int i = 0, core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
                   ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect
index 60fc8d2..c799515 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,11 +22,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+  for (core::int i = 0, core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
                   ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
index 60fc8d2..c799515 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,11 +22,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+  for (core::int i = 0, core::int i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
                   ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart b/pkg/front_end/testcases/regress/issue_31185.dart
index e68d121..568d2af 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart
+++ b/pkg/front_end/testcases/regress/issue_31185.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 int i = 5;
 
 int test1() {
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline.expect
index 8127b46..4a2b0ae 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 int i = 5;
 int test1() {}
 int test2() {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline_modelled.expect
index 8127b46..4a2b0ae 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 int i = 5;
 int test1() {}
 int test2() {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
index ec82b98..3de61ff 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,12 +17,12 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 5;
-static method test1() → core::int* {
-  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
+static field core::int i = 5;
+static method test1() → core::int {
+  return let final core::int #t1 = self::i in let final core::int #t2 = self::i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1;
   self::i;
 }
-static method test2() → core::int* {
+static method test2() → core::int {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
            ^";
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect
index ec82b98..3de61ff 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,12 +17,12 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 5;
-static method test1() → core::int* {
-  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
+static field core::int i = 5;
+static method test1() → core::int {
+  return let final core::int #t1 = self::i in let final core::int #t2 = self::i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1;
   self::i;
 }
-static method test2() → core::int* {
+static method test2() → core::int {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
            ^";
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.outline.expect
index 2dca69f..4bbfba6 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
-static method test1() → core::int*
+static field core::int i;
+static method test1() → core::int
   ;
-static method test2() → core::int*
+static method test2() → core::int
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
index ec82b98..3de61ff 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,12 +17,12 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 5;
-static method test1() → core::int* {
-  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
+static field core::int i = 5;
+static method test1() → core::int {
+  return let final core::int #t1 = self::i in let final core::int #t2 = self::i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1;
   self::i;
 }
-static method test2() → core::int* {
+static method test2() → core::int {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
            ^";
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart b/pkg/front_end/testcases/regress/issue_31186.dart
index 370ac3d..1bf5d57 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart
+++ b/pkg/front_end/testcases/regress/issue_31186.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   return null?.true;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31186.dart.weak.expect
index ce4b4c6..937ac82 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect
index ce4b4c6..937ac82 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31186.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31186.dart.weak.transformed.expect
index ce4b4c6..937ac82 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart b/pkg/front_end/testcases/regress/issue_31187.dart
index da76294..2cf6bf8 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart
+++ b/pkg/front_end/testcases/regress/issue_31187.dart
@@ -1,7 +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.
-// @dart=2.9
+
 bad() {
   return null?.1;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline_modelled.expect
index 2397af0..59cd59e 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bad() {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31187.dart.weak.expect
index 77462b2..786b8ec 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect
index 77462b2..786b8ec 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31187.dart.weak.outline.expect
index 81debf2..9f56f49 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31187.dart.weak.transformed.expect
index 77462b2..786b8ec 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart b/pkg/front_end/testcases/regress/issue_31188.dart
index 8782935..766d20b 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart
+++ b/pkg/front_end/testcases/regress/issue_31188.dart
@@ -1,7 +1,9 @@
 // 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.
-// @dart=2.9
+
+// @dart=2.14
+
 main() {}
 
 type T = Map<A, B>
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline.expect
index 2c07051..f583e96 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline.expect
@@ -1,3 +1,3 @@
-// @dart = 2.9
+// @dart = 2.14
 main() {}
 type T = Map<A, B> ;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d41cad3
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+type T = Map<A, B>;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
index 6917875..6e3d725 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:18: Error: Expected ';' after this.
 // type T = Map<A, B>
 //                  ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: Type 'type' not found.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: 'type' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: 'type' isn't a type.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Error: 'A' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:14: Error: 'A' isn't a type.
 // type T = Map<A, B>
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: 'B' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:17: Error: 'B' isn't a type.
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
-// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_31188.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
index 6917875..6e3d725 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:18: Error: Expected ';' after this.
 // type T = Map<A, B>
 //                  ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: Type 'type' not found.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: 'type' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: 'type' isn't a type.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Error: 'A' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:14: Error: 'A' isn't a type.
 // type T = Map<A, B>
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: 'B' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:17: Error: 'B' isn't a type.
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
-// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_31188.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.outline.expect
index 71e9e57..42f7058 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:18: Error: Expected ';' after this.
 // type T = Map<A, B>
 //                  ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: Type 'type' not found.
 // type T = Map<A, B>
 // ^^^^
 //
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
index 6917875..6e3d725 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:18: Error: Expected ';' after this.
 // type T = Map<A, B>
 //                  ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: Type 'type' not found.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: 'type' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:1: Error: 'type' isn't a type.
 // type T = Map<A, B>
 // ^^^^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Error: 'A' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:14: Error: 'A' isn't a type.
 // type T = Map<A, B>
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: 'B' isn't a type.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:17: Error: 'B' isn't a type.
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_31188.dart:9:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
-// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_31188.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart b/pkg/front_end/testcases/regress/issue_31188_2.dart
new file mode 100644
index 0000000..197dfae
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {}
+
+type T = Map<A, B>
+
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline.expect
new file mode 100644
index 0000000..d41cad3
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+type T = Map<A, B>;
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d41cad3
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+type T = Map<A, B>;
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.expect
new file mode 100644
index 0000000..cd6a285
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:18: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:14: Error: 'A' isn't a type.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:17: Error: 'B' isn't a type.
+// type T = Map<A, B>
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field invalid-type T = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Map<invalid-type, invalid-type>*)
+}
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.modular.expect
new file mode 100644
index 0000000..cd6a285
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:18: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:14: Error: 'A' isn't a type.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:17: Error: 'B' isn't a type.
+// type T = Map<A, B>
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field invalid-type T = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Map<invalid-type, invalid-type>*)
+}
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.outline.expect
new file mode 100644
index 0000000..4beac13
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:18: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^^^^
+//
+import self as self;
+
+static field invalid-type T;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..cd6a285
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188_2.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:18: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:1: Error: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:14: Error: 'A' isn't a type.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188_2.dart:7:17: Error: 'B' isn't a type.
+// type T = Map<A, B>
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field invalid-type T = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Map<invalid-type, invalid-type>*)
+}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart b/pkg/front_end/testcases/regress/issue_31190.dart
index 22e5680..3375687 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart
+++ b/pkg/front_end/testcases/regress/issue_31190.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Typed<T> {
   T<U> v;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline.expect
index 2e1c860..52c03bd 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Typed<T> {
   T<U> v;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline_modelled.expect
index 2e1c860..52c03bd 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Typed<T> {
   T<U> v;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
index 728db79..b23ef13 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,10 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object* = dynamic> extends core::Object {
+class Typed<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type v = null;
-  synthetic constructor •() → self::Typed<self::Typed::T*>*
+  synthetic constructor •() → self::Typed<self::Typed::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
index 728db79..b23ef13 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,10 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object* = dynamic> extends core::Object {
+class Typed<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type v = null;
-  synthetic constructor •() → self::Typed<self::Typed::T*>*
+  synthetic constructor •() → self::Typed<self::Typed::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.outline.expect
index 29b1b41..06496ac 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,20 +14,10 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object* = dynamic> extends core::Object {
+class Typed<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type v;
-  synthetic constructor •() → self::Typed<self::Typed::T*>*
+  synthetic constructor •() → self::Typed<self::Typed::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
index 728db79..b23ef13 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,10 @@
 import self as self;
 import "dart:core" as core;
 
-class Typed<T extends core::Object* = dynamic> extends core::Object {
+class Typed<T extends core::Object? = dynamic> extends core::Object {
   field invalid-type v = null;
-  synthetic constructor •() → self::Typed<self::Typed::T*>*
+  synthetic constructor •() → self::Typed<self::Typed::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart b/pkg/front_end/testcases/regress/issue_31192.dart
index 37c8bf0..c450e25 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart
+++ b/pkg/front_end/testcases/regress/issue_31192.dart
@@ -1,9 +1,9 @@
 // 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.
-// @dart=2.9
+
 class Increment {
-  int x;
+  late int x;
   Increment() : x++ {}
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31192.dart.textual_outline.expect
index eb0e814..1bbd124 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.textual_outline.expect
@@ -1,5 +1,5 @@
-// @dart = 2.9
 class Increment {
+  late
   int x;
   Increment() : =x++ {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31192.dart.weak.expect
index 0640c28..94958a4 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,20 +15,10 @@
 import "dart:core" as core;
 
 class Increment extends core::Object {
-  field core::int* x = null;
-  constructor •() → self::Increment*
+  late field core::int x;
+  constructor •() → self::Increment
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect
index 0640c28..94958a4 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,20 +15,10 @@
 import "dart:core" as core;
 
 class Increment extends core::Object {
-  field core::int* x = null;
-  constructor •() → self::Increment*
+  late field core::int x;
+  constructor •() → self::Increment
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31192.dart.weak.outline.expect
index 442a920..653cbd5 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,19 +11,9 @@
 import "dart:core" as core;
 
 class Increment extends core::Object {
-  field core::int* x;
-  constructor •() → self::Increment*
+  late field core::int x;
+  constructor •() → self::Increment
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31192.dart.weak.transformed.expect
index 0640c28..94958a4 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,20 +15,10 @@
 import "dart:core" as core;
 
 class Increment extends core::Object {
-  field core::int* x = null;
-  constructor •() → self::Increment*
+  late field core::int x;
+  constructor •() → self::Increment
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart b/pkg/front_end/testcases/regress/issue_31198.dart
index 06128f9..15dca60 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart
+++ b/pkg/front_end/testcases/regress/issue_31198.dart
@@ -1,7 +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.
-// @dart=2.9
+
 abstract class A {}
 
 class B extends A {
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
index aa17508..1fcf675 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {}
 class B extends A {
   B(): super().foo() {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
index ecfe034..63411d2 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,31 +33,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super().foo() {}
        ^"{dynamic}.foo() {}
-  constructor named1() → self::B*
+  constructor named1() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
-  constructor named2() → self::B*
+  constructor named2() → self::B
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect
index ecfe034..63411d2 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,31 +33,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super().foo() {}
        ^"{dynamic}.foo() {}
-  constructor named1() → self::B*
+  constructor named1() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
-  constructor named2() → self::B*
+  constructor named2() → self::B
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
index e898940..b6f2598b 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,25 +11,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     ;
-  constructor named1() → self::B*
+  constructor named1() → self::B
     ;
-  constructor named2() → self::B*
+  constructor named2() → self::B
     ;
 }
 static method bad() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
index ecfe034..63411d2 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,31 +33,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
   B(): super().foo() {}
        ^"{dynamic}.foo() {}
-  constructor named1() → self::B*
+  constructor named1() → self::B
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
-  constructor named2() → self::B*
+  constructor named2() → self::B
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart b/pkg/front_end/testcases/regress/issue_31213.dart
index 7926161..f4b522a 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart
+++ b/pkg/front_end/testcases/regress/issue_31213.dart
@@ -1,7 +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.
-// @dart=2.9
+
 typedef C<A, K> = int Function<B>(A x, K y, B v);
 typedef D<K> = C<A, K> Function<A>(int z);
 
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline.expect
index a41c084..87e854f 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef C<A, K> = int Function<B>(A x, K y, B v);
 typedef D<K> = C<A, K> Function<A>(int z);
 dynamic producer<K>() {}
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline_modelled.expect
index 18f2130..480f6f2 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 dynamic producer<K>() {}
 main() {}
 typedef C<A, K> = int Function<B>(A x, K y, B v);
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31213.dart.weak.expect
index 59e271c..c9f689a 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef C<contravariant A extends core::Object* = dynamic, contravariant K extends core::Object* = dynamic> = <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-typedef D<contravariant K extends core::Object* = dynamic> = <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-static method producer<K extends core::Object* = dynamic>() → dynamic {
-  return <A extends core::Object* = dynamic>(core::int* v1) → <B extends core::Object* = dynamic>(A*, self::producer::K*, B*) →* core::int* {
-    return <B extends core::Object* = dynamic>(A* v2, self::producer::K* v3, B* v4) → core::int* => 0;
+typedef C<contravariant A extends core::Object? = dynamic, contravariant K extends core::Object? = dynamic> = <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+typedef D<contravariant K extends core::Object? = dynamic> = <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+static method producer<K extends core::Object? = dynamic>() → dynamic {
+  return <A extends core::Object? = dynamic>(core::int v1) → <B extends core::Object? = dynamic>(A%, self::producer::K%, B%) → core::int {
+    return <B extends core::Object? = dynamic>(A% v2, self::producer::K% v3, B% v4) → core::int => 0;
   };
 }
 static method main() → dynamic {
-  assert(self::producer<core::String*>() is <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, core::String*, B*) →* core::int*);
+  assert(self::producer<core::String>() is{ForNonNullableByDefault} <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, core::String, B%) → core::int);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect
index 59e271c..c9f689a 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef C<contravariant A extends core::Object* = dynamic, contravariant K extends core::Object* = dynamic> = <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-typedef D<contravariant K extends core::Object* = dynamic> = <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-static method producer<K extends core::Object* = dynamic>() → dynamic {
-  return <A extends core::Object* = dynamic>(core::int* v1) → <B extends core::Object* = dynamic>(A*, self::producer::K*, B*) →* core::int* {
-    return <B extends core::Object* = dynamic>(A* v2, self::producer::K* v3, B* v4) → core::int* => 0;
+typedef C<contravariant A extends core::Object? = dynamic, contravariant K extends core::Object? = dynamic> = <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+typedef D<contravariant K extends core::Object? = dynamic> = <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+static method producer<K extends core::Object? = dynamic>() → dynamic {
+  return <A extends core::Object? = dynamic>(core::int v1) → <B extends core::Object? = dynamic>(A%, self::producer::K%, B%) → core::int {
+    return <B extends core::Object? = dynamic>(A% v2, self::producer::K% v3, B% v4) → core::int => 0;
   };
 }
 static method main() → dynamic {
-  assert(self::producer<core::String*>() is <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, core::String*, B*) →* core::int*);
+  assert(self::producer<core::String>() is{ForNonNullableByDefault} <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, core::String, B%) → core::int);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31213.dart.weak.outline.expect
index b80b64a..5b20d23 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef C<contravariant A extends core::Object* = dynamic, contravariant K extends core::Object* = dynamic> = <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-typedef D<contravariant K extends core::Object* = dynamic> = <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-static method producer<K extends core::Object* = dynamic>() → dynamic
+typedef C<contravariant A extends core::Object? = dynamic, contravariant K extends core::Object? = dynamic> = <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+typedef D<contravariant K extends core::Object? = dynamic> = <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+static method producer<K extends core::Object? = dynamic>() → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31213.dart.weak.transformed.expect
index 59e271c..c9f689a 100644
--- a/pkg/front_end/testcases/regress/issue_31213.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef C<contravariant A extends core::Object* = dynamic, contravariant K extends core::Object* = dynamic> = <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-typedef D<contravariant K extends core::Object* = dynamic> = <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
-static method producer<K extends core::Object* = dynamic>() → dynamic {
-  return <A extends core::Object* = dynamic>(core::int* v1) → <B extends core::Object* = dynamic>(A*, self::producer::K*, B*) →* core::int* {
-    return <B extends core::Object* = dynamic>(A* v2, self::producer::K* v3, B* v4) → core::int* => 0;
+typedef C<contravariant A extends core::Object? = dynamic, contravariant K extends core::Object? = dynamic> = <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+typedef D<contravariant K extends core::Object? = dynamic> = <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, K%, B%) → core::int;
+static method producer<K extends core::Object? = dynamic>() → dynamic {
+  return <A extends core::Object? = dynamic>(core::int v1) → <B extends core::Object? = dynamic>(A%, self::producer::K%, B%) → core::int {
+    return <B extends core::Object? = dynamic>(A% v2, self::producer::K% v3, B% v4) → core::int => 0;
   };
 }
 static method main() → dynamic {
-  assert(self::producer<core::String*>() is <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, core::String*, B*) →* core::int*);
+  assert(self::producer<core::String>() is{ForNonNullableByDefault} <A extends core::Object? = dynamic>(core::int) → <B extends core::Object? = dynamic>(A%, core::String, B%) → core::int);
 }
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart b/pkg/front_end/testcases/regress/issue_31299.dart
index ddb4089..27c47ab 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart
+++ b/pkg/front_end/testcases/regress/issue_31299.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   int m;
   A() : m = 1;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline.expect
index cb3f73f..0298c3a 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int m;
   A() : m = 1;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline_modelled.expect
index fd9c762..d2c8de1 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A() : m = 1;
   A.foo() : m = 2;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
index c1f0dcb..d942c26 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,31 +18,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* m;
-  constructor •() → self::A*
+  field core::int m;
+  constructor •() → self::A
     : self::A::m = 1, super core::Object::•()
     ;
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : self::A::m = 2, super core::Object::•()
     ;
-  method foo(core::int* a, core::int* b) → core::int*
-    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::int a, core::int b) → core::int
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int}){(core::num) → core::int}){(core::num) → core::int};
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
   new A().foo();
-             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
-  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() → invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int, core::int) → core::int};
   new self::A::foo();
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect
index c1f0dcb..d942c26 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,31 +18,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* m;
-  constructor •() → self::A*
+  field core::int m;
+  constructor •() → self::A
     : self::A::m = 1, super core::Object::•()
     ;
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : self::A::m = 2, super core::Object::•()
     ;
-  method foo(core::int* a, core::int* b) → core::int*
-    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::int a, core::int b) → core::int
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int}){(core::num) → core::int}){(core::num) → core::int};
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
   new A().foo();
-             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
-  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() → invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int, core::int) → core::int};
   new self::A::foo();
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.outline.expect
index 9869b3b..514d2ca 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* m;
-  constructor •() → self::A*
+  field core::int m;
+  constructor •() → self::A
     ;
-  constructor foo() → self::A*
+  constructor foo() → self::A
     ;
-  method foo(core::int* a, core::int* b) → core::int*
+  method foo(core::int a, core::int b) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect
index c1f0dcb..d942c26 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,31 +18,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* m;
-  constructor •() → self::A*
+  field core::int m;
+  constructor •() → self::A
     : self::A::m = 1, super core::Object::•()
     ;
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : self::A::m = 2, super core::Object::•()
     ;
-  method foo(core::int* a, core::int* b) → core::int*
-    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::int a, core::int b) → core::int
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int}){(core::num) → core::int}){(core::num) → core::int};
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
   new A().foo();
-             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
-  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() → invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int, core::int) → core::int};
   new self::A::foo();
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart b/pkg/front_end/testcases/regress/issue_31766.dart
index 538400c..491cb00 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart
+++ b/pkg/front_end/testcases/regress/issue_31766.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   foo() => null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline.expect
index 2aac28f..27434f1 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   foo() => null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline_modelled.expect
index 2aac28f..27434f1 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   foo() => null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
index ec4557f..8acce0b 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  function bar<T extends self::A*>(T* t) → void {
-    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
+  function bar<T extends self::A>(T t) → void {
+    core::print("t.foo()=${t.{self::A::foo}(){() → dynamic}}");
   }
-  bar<self::A*>(new self::A::•()){(self::A*) →* void};
-  (<S extends self::A*>(S* s) → Null {
-    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
-  })<self::A*>(new self::A::•()){(self::A*) →* Null};
+  bar<self::A>(new self::A::•()){(self::A) → void};
+  (<S extends self::A>(S s) → Null {
+    core::print("s.foo()=${s.{self::A::foo}(){() → dynamic}}");
+  })<self::A>(new self::A::•()){(self::A) → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect
index ec4557f..8acce0b 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  function bar<T extends self::A*>(T* t) → void {
-    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
+  function bar<T extends self::A>(T t) → void {
+    core::print("t.foo()=${t.{self::A::foo}(){() → dynamic}}");
   }
-  bar<self::A*>(new self::A::•()){(self::A*) →* void};
-  (<S extends self::A*>(S* s) → Null {
-    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
-  })<self::A*>(new self::A::•()){(self::A*) →* Null};
+  bar<self::A>(new self::A::•()){(self::A) → void};
+  (<S extends self::A>(S s) → Null {
+    core::print("s.foo()=${s.{self::A::foo}(){() → dynamic}}");
+  })<self::A>(new self::A::•()){(self::A) → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.outline.expect
index c973003..9c602fb 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
index ec4557f..8acce0b 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  function bar<T extends self::A*>(T* t) → void {
-    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
+  function bar<T extends self::A>(T t) → void {
+    core::print("t.foo()=${t.{self::A::foo}(){() → dynamic}}");
   }
-  bar<self::A*>(new self::A::•()){(self::A*) →* void};
-  (<S extends self::A*>(S* s) → Null {
-    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
-  })<self::A*>(new self::A::•()){(self::A*) →* Null};
+  bar<self::A>(new self::A::•()){(self::A) → void};
+  (<S extends self::A>(S s) → Null {
+    core::print("s.foo()=${s.{self::A::foo}(){() → dynamic}}");
+  })<self::A>(new self::A::•()){(self::A) → Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart b/pkg/front_end/testcases/regress/issue_31846.dart
index 4619403..593212f 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart
+++ b/pkg/front_end/testcases/regress/issue_31846.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 main() {
   print(main is Function());
   print((<T>(T x) => x).runtimeType);
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
index a893a8d..f8c19ed 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print((<T extends core::Object? = dynamic>(T% x) → T% => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::num>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<T> = core::Comparable<dynamic>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<S%> = core::Comparable<dynamic>, S extends core::Object? = dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends (T) → dynamic = (Null) → dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::List<core::List<T>> = core::List<core::List<dynamic>>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect
index a893a8d..f8c19ed 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print((<T extends core::Object? = dynamic>(T% x) → T% => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::num>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<T> = core::Comparable<dynamic>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<S%> = core::Comparable<dynamic>, S extends core::Object? = dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends (T) → dynamic = (Null) → dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::List<core::List<T>> = core::List<core::List<dynamic>>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
index e1b75c5..7f0dc5e 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
-  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print((<T extends core::Object? = dynamic>(T% x) → T% => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::num>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<T> = core::Comparable<dynamic>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::Comparable<S%> = core::Comparable<dynamic>, S extends core::Object? = dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends (T) → dynamic = (Null) → dynamic>(T x) → T => x).{core::Object::runtimeType}{core::Type});
+  core::print((<T extends core::List<core::List<T>> = core::List<core::List<dynamic>>>(T x) → T => x).{core::Object::runtimeType}{core::Type});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart b/pkg/front_end/testcases/regress/issue_31996.dart
index ee35029..90260dc 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart
+++ b/pkg/front_end/testcases/regress/issue_31996.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 abstract class B<T> {}
 
 abstract class C<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline.expect
index d130780..7ebf1bc 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B<T> {}
 
 abstract class C<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline_modelled.expect
index d130780..7ebf1bc 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B<T> {}
 
 abstract class C<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31996.dart.weak.expect
index 6cf6fb4..4d307ab 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.weak.expect
@@ -1,59 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object implements self::B<dynamic> {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Child1 extends self::Base implements self::C<core::int*> {
-  synthetic constructor •() → self::Child1*
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → self::Child1
     : super self::Base::•()
     ;
 }
-class Child2 extends self::Base implements self::C<core::double*> {
-  synthetic constructor •() → self::Child2*
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → self::Child2
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect
index 6cf6fb4..4d307ab 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect
@@ -1,59 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object implements self::B<dynamic> {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Child1 extends self::Base implements self::C<core::int*> {
-  synthetic constructor •() → self::Child1*
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → self::Child1
     : super self::Base::•()
     ;
 }
-class Child2 extends self::Base implements self::C<core::double*> {
-  synthetic constructor •() → self::Child2*
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → self::Child2
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31996.dart.weak.outline.expect
index 52e736c..a5980c3 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.weak.outline.expect
@@ -1,55 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object implements self::B<dynamic> {
-  synthetic constructor •() → self::Base*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class Child1 extends self::Base implements self::C<core::int*> {
-  synthetic constructor •() → self::Child1*
+  synthetic constructor •() → self::Base
     ;
 }
-class Child2 extends self::Base implements self::C<core::double*> {
-  synthetic constructor •() → self::Child2*
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → self::Child1
+    ;
+}
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → self::Child2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31996.dart.weak.transformed.expect
index 6cf6fb4..4d307ab 100644
--- a/pkg/front_end/testcases/regress/issue_31996.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.weak.transformed.expect
@@ -1,59 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object implements self::B<dynamic> {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Child1 extends self::Base implements self::C<core::int*> {
-  synthetic constructor •() → self::Child1*
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → self::Child1
     : super self::Base::•()
     ;
 }
-class Child2 extends self::Base implements self::C<core::double*> {
-  synthetic constructor •() → self::Child2*
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → self::Child2
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart b/pkg/front_end/testcases/regress/issue_32182.dart
index c3c6a72..7e42146 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart
+++ b/pkg/front_end/testcases/regress/issue_32182.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import "issue_32182.dart" as self;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline.expect
index 25ad7e6..22f0c87 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_32182.dart" as self;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline_modelled.expect
index 0a9400b..f0f5e79 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_32182.dart" as self;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
index 3b90e8d..ff49484 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
@@ -1,53 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///issue_32182.dart" as self;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method m() → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&A&M = self::A<self::A<dynamic>*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&A&M*
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&M
     : super self::A::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M::m}();
 }
 class C extends self::_C&A&M {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&A&M::•()
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
+  new self::C::•().{self::_C&A&M::m}(){() → dynamic}{dynamic}.+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect
index 3b90e8d..ff49484 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect
@@ -1,53 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///issue_32182.dart" as self;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method m() → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&A&M = self::A<self::A<dynamic>*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&A&M*
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&M
     : super self::A::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M::m}();
 }
 class C extends self::_C&A&M {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&A&M::•()
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
+  new self::C::•().{self::_C&A&M::m}(){() → dynamic}{dynamic}.+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.outline.expect
index 2836f3f..b80c90b 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.outline.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///issue_32182.dart" as self;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
   method m() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&A&M = self::A<self::A<dynamic>*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_C&A&M*
+abstract class _C&A&M = self::A<self::A<dynamic>> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&M
     : super self::A::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M::m}();
 }
 class C extends self::_C&A&M {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
index afa52c8..6fcf27a 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
@@ -1,53 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///issue_32182.dart" as self;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method m() → dynamic
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _C&A&M extends self::A<self::A<dynamic>*> implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_C&A&M*
+abstract class _C&A&M extends self::A<self::A<dynamic>> implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C&A&M
     : super self::A::•()
     ;
   method m() → dynamic
     return 42;
 }
 class C extends self::_C&A&M {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&A&M::•()
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
+  new self::C::•().{self::_C&A&M::m}(){() → dynamic}{dynamic}.+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart b/pkg/front_end/testcases/regress/issue_32196.dart
index 9eb700b..254d45c 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart
+++ b/pkg/front_end/testcases/regress/issue_32196.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   final String name;
   A.get(this.name);
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline.expect
index 4fb58cb..7fecce8 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   final String name;
   A.get(this.name);
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline_modelled.expect
index 8c1fac1..13664b5 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A.get(this.name);
   A.set(this.name);
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32196.dart.weak.expect
index d1c71d6..c26c0a6 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::String* name;
-  constructor get(core::String* name) → self::A*
+  final field core::String name;
+  constructor get(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  constructor set(core::String* name) → self::A*
+  constructor set(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::get("get");
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect
index d1c71d6..c26c0a6 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::String* name;
-  constructor get(core::String* name) → self::A*
+  final field core::String name;
+  constructor get(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  constructor set(core::String* name) → self::A*
+  constructor set(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::get("get");
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32196.dart.weak.outline.expect
index 69ba040..a211da4 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::String* name;
-  constructor get(core::String* name) → self::A*
+  final field core::String name;
+  constructor get(core::String name) → self::A
     ;
-  constructor set(core::String* name) → self::A*
+  constructor set(core::String name) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32196.dart.weak.transformed.expect
index d1c71d6..c26c0a6 100644
--- a/pkg/front_end/testcases/regress/issue_32196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::String* name;
-  constructor get(core::String* name) → self::A*
+  final field core::String name;
+  constructor get(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  constructor set(core::String* name) → self::A*
+  constructor set(core::String name) → self::A
     : self::A::name = name, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::get("get");
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart b/pkg/front_end/testcases/regress/issue_32200.dart
index 4a8fb85..efdc4a0 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart
+++ b/pkg/front_end/testcases/regress/issue_32200.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import "issue_32200.dart" as self;
 
 class Foo {
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline.expect
index 7a5a831..7912167 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_32200.dart" as self;
 
 class Foo {
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline_modelled.expect
index 7a5a831..7912167 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_32200.dart" as self;
 
 class Foo {
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32200.dart.weak.expect
index d70c7d0..ee4488d 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,21 +13,11 @@
 
 class Foo extends core::Object {
   field invalid-type self = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* instance = new self::Foo::•();
+  self::Foo instance = new self::Foo::•();
   instance.{self::Foo::self} = instance;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect
index d70c7d0..ee4488d 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,21 +13,11 @@
 
 class Foo extends core::Object {
   field invalid-type self = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* instance = new self::Foo::•();
+  self::Foo instance = new self::Foo::•();
   instance.{self::Foo::self} = instance;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32200.dart.weak.outline.expect
index b4f4759..174d091 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,18 +13,8 @@
 
 class Foo extends core::Object {
   field invalid-type self;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32200.dart.weak.transformed.expect
index d70c7d0..ee4488d 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,21 +13,11 @@
 
 class Foo extends core::Object {
   field invalid-type self = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* instance = new self::Foo::•();
+  self::Foo instance = new self::Foo::•();
   instance.{self::Foo::self} = instance;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart b/pkg/front_end/testcases/regress/issue_32660.dart
index 429407f..8c9d660 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart
+++ b/pkg/front_end/testcases/regress/issue_32660.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {
   foo(int x) => x;
 }
 
 class B {
-  foo(int x, {int y}) => y;
+  foo(int x, {int? y}) => y;
 }
 
 class C extends A implements B {
@@ -22,7 +22,7 @@
 }
 
 class E extends D {
-  foo(int x, {int y});
+  foo(int x, {int? y});
 
   noSuchMethod(i) {
     print(i.namedArguments);
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline.expect
index e03e095..35ce7d1 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A {
   foo(int x) => x;
 }
 
 class B {
-  foo(int x, {int y}) => y;
+  foo(int x, {int? y}) => y;
 }
 
 class C extends A implements B {
@@ -16,7 +15,7 @@
 }
 
 class E extends D {
-  foo(int x, {int y});
+  foo(int x, {int? y});
   noSuchMethod(i) {}
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline_modelled.expect
index e03e095..35ce7d1 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A {
   foo(int x) => x;
 }
 
 class B {
-  foo(int x, {int y}) => y;
+  foo(int x, {int? y}) => y;
 }
 
 class C extends A implements B {
@@ -16,7 +15,7 @@
 }
 
 class E extends D {
-  foo(int x, {int y});
+  foo(int x, {int? y});
   noSuchMethod(i) {}
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
index ec03c53..7c6c6d0 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
+//   foo(int x, {int? y}) => y;
 //   ^
 //
 // pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
@@ -19,86 +19,56 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y});
+//   foo(int x, {int? y});
 //   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::int* x, {core::int* y = #C1}) → dynamic
+  method foo(core::int x, {core::int? y = #C1}) → dynamic
     return y;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print("No such method!");
     return 42;
   }
-  abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
+  abstract member-signature method foo(core::int x, {core::int? y = #C1}) → dynamic; -> self::B::foo
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
+  abstract method foo(core::int x, {core::int? y = #C1}) → dynamic;
+  method noSuchMethod(core::Invocation i) → dynamic {
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol, dynamic>});
     return 42;
   }
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  self::E* e = new self::E::•();
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect
index ec03c53..7c6c6d0 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
+//   foo(int x, {int? y}) => y;
 //   ^
 //
 // pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
@@ -19,86 +19,56 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y});
+//   foo(int x, {int? y});
 //   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::int* x, {core::int* y = #C1}) → dynamic
+  method foo(core::int x, {core::int? y = #C1}) → dynamic
     return y;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print("No such method!");
     return 42;
   }
-  abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
+  abstract member-signature method foo(core::int x, {core::int? y = #C1}) → dynamic; -> self::B::foo
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
+  abstract method foo(core::int x, {core::int? y = #C1}) → dynamic;
+  method noSuchMethod(core::Invocation i) → dynamic {
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol, dynamic>});
     return 42;
   }
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  self::E* e = new self::E::•();
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
index d6cfde1..1580e0f 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
+//   foo(int x, {int? y}) => y;
 //   ^
 //
 // pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
@@ -19,72 +19,42 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y});
+//   foo(int x, {int? y});
 //   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     ;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo(core::int* x, {core::int* y = null}) → dynamic
+  method foo(core::int x, {core::int? y = null}) → dynamic
     ;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
-  abstract member-signature method foo(core::int* x, {core::int* y}) → dynamic; -> self::B::foo
+  abstract member-signature method foo(core::int x, {core::int? y}) → dynamic; -> self::B::foo
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     ;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract method foo(core::int* x, {core::int* y = null}) → dynamic;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  abstract method foo(core::int x, {core::int? y = null}) → dynamic;
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
index ec03c53..7c6c6d0 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y}) => y;
+//   foo(int x, {int? y}) => y;
 //   ^
 //
 // pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
@@ -19,86 +19,56 @@
 //   foo(int x) => x;
 //   ^
 // pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-//   foo(int x, {int y});
+//   foo(int x, {int? y});
 //   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::int* x, {core::int* y = #C1}) → dynamic
+  method foo(core::int x, {core::int? y = #C1}) → dynamic
     return y;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic {
+  method noSuchMethod(core::Invocation i) → dynamic {
     core::print("No such method!");
     return 42;
   }
-  abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
+  abstract member-signature method foo(core::int x, {core::int? y = #C1}) → dynamic; -> self::B::foo
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method foo(core::int* x) → dynamic
+  method foo(core::int x) → dynamic
     return x;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
+  abstract method foo(core::int x, {core::int? y = #C1}) → dynamic;
+  method noSuchMethod(core::Invocation i) → dynamic {
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol, dynamic>});
     return 42;
   }
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  self::E* e = new self::E::•();
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart b/pkg/front_end/testcases/regress/issue_32972.dart
index 578caf4..23a1482 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart
+++ b/pkg/front_end/testcases/regress/issue_32972.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 void foo<X>(X i) {
   print(i);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline.expect
index c57478f..afd767f 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 void foo<X>(X i) {}
 
 class Foo {
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline_modelled.expect
index a04fc20..fedb95a 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar<X, Y> {}
 
 class Foo {
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
index 660b650..200c245 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,60 +31,40 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic {
+  static method foo<X extends core::Object? = dynamic>(self::Foo::foo::X% i) → dynamic {
     core::print(i);
   }
-  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic {
+  method bar<X extends core::Object? = dynamic>(self::Foo::bar::X% i) → dynamic {
     core::print(i);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<X extends core::Object* = dynamic>(self::foo::X* i) → void {
+static method foo<X extends core::Object? = dynamic>(self::foo::X% i) → void {
   core::print(i);
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
   foo<String, String>(\"hello world\");
   ^";
-  self::foo<core::String*>("hello world");
+  self::foo<core::String>("hello world");
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
   Foo.foo<int, int>(42);
       ^";
-  self::Foo::foo<core::int*>(42);
-  self::Foo* f = new self::Foo::•();
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
   f.bar<double, double>(42.42);
-    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
-  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double, core::double>(42.42){(invalid-type) → invalid-type};
+  f.{self::Foo::bar}<core::double>(42.42){(core::double) → dynamic};
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
   new Bar<String>();
       ^";
-  new self::Bar::•<core::String*, core::String*>();
+  new self::Bar::•<core::String, core::String>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect
index 660b650..200c245 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,60 +31,40 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic {
+  static method foo<X extends core::Object? = dynamic>(self::Foo::foo::X% i) → dynamic {
     core::print(i);
   }
-  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic {
+  method bar<X extends core::Object? = dynamic>(self::Foo::bar::X% i) → dynamic {
     core::print(i);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<X extends core::Object* = dynamic>(self::foo::X* i) → void {
+static method foo<X extends core::Object? = dynamic>(self::foo::X% i) → void {
   core::print(i);
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
   foo<String, String>(\"hello world\");
   ^";
-  self::foo<core::String*>("hello world");
+  self::foo<core::String>("hello world");
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
   Foo.foo<int, int>(42);
       ^";
-  self::Foo::foo<core::int*>(42);
-  self::Foo* f = new self::Foo::•();
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
   f.bar<double, double>(42.42);
-    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
-  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double, core::double>(42.42){(invalid-type) → invalid-type};
+  f.{self::Foo::bar}<core::double>(42.42){(core::double) → dynamic};
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
   new Bar<String>();
       ^";
-  new self::Bar::•<core::String*, core::String*>();
+  new self::Bar::•<core::String, core::String>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.outline.expect
index 456f978..d9df500 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic
+  static method foo<X extends core::Object? = dynamic>(self::Foo::foo::X% i) → dynamic
     ;
-  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic
+  method bar<X extends core::Object? = dynamic>(self::Foo::bar::X% i) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<X extends core::Object* = dynamic>(self::foo::X* i) → void
+static method foo<X extends core::Object? = dynamic>(self::foo::X% i) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect
index 660b650..200c245 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -31,60 +31,40 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic {
+  static method foo<X extends core::Object? = dynamic>(self::Foo::foo::X% i) → dynamic {
     core::print(i);
   }
-  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic {
+  method bar<X extends core::Object? = dynamic>(self::Foo::bar::X% i) → dynamic {
     core::print(i);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo<X extends core::Object* = dynamic>(self::foo::X* i) → void {
+static method foo<X extends core::Object? = dynamic>(self::foo::X% i) → void {
   core::print(i);
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
   foo<String, String>(\"hello world\");
   ^";
-  self::foo<core::String*>("hello world");
+  self::foo<core::String>("hello world");
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
   Foo.foo<int, int>(42);
       ^";
-  self::Foo::foo<core::int*>(42);
-  self::Foo* f = new self::Foo::•();
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
   f.bar<double, double>(42.42);
-    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
-  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double, core::double>(42.42){(invalid-type) → invalid-type};
+  f.{self::Foo::bar}<core::double>(42.42){(core::double) → dynamic};
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
   new Bar<String>();
       ^";
-  new self::Bar::•<core::String*, core::String*>();
+  new self::Bar::•<core::String, core::String>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart b/pkg/front_end/testcases/regress/issue_33452.dart
index 9e94976..bd8c790 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart
+++ b/pkg/front_end/testcases/regress/issue_33452.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class ExistingClass {
   ExistingClass.existingConstructor();
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline.expect
index fcbd268..eff2983 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class ExistingClass {
   ExistingClass.existingConstructor();
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline_modelled.expect
index fcbd268..eff2983 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class ExistingClass {
   ExistingClass.existingConstructor();
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
index 0f3ef8d..153005e 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class ExistingClass extends core::Object {
-  constructor existingConstructor() → self::ExistingClass*
+  constructor existingConstructor() → self::ExistingClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect
index 0f3ef8d..153005e 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class ExistingClass extends core::Object {
-  constructor existingConstructor() → self::ExistingClass*
+  constructor existingConstructor() → self::ExistingClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.outline.expect
index 11d9af2..b6db5ef 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class ExistingClass extends core::Object {
-  constructor existingConstructor() → self::ExistingClass*
+  constructor existingConstructor() → self::ExistingClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
index 0f3ef8d..153005e 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,19 +30,9 @@
 import "dart:core" as core;
 
 class ExistingClass extends core::Object {
-  constructor existingConstructor() → self::ExistingClass*
+  constructor existingConstructor() → self::ExistingClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart b/pkg/front_end/testcases/regress/issue_33672.dart
index b35af71d..f302c8a 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart
+++ b/pkg/front_end/testcases/regress/issue_33672.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 main() {
   int count = 0;
   yield: for (int a = 0; a < 10; ++a) {
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
index 7caa5cb..6531e98 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* count = 0;
+  core::int count = 0;
   #L1:
-  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
-    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
-      count = count.{core::num::+}(1){(core::num*) →* core::int*};
-      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
+  for (core::int a = 0; a.{core::num::<}(10){(core::num) → core::bool}; a = a.{core::num::+}(1){(core::num) → core::int}) {
+    for (core::int b = 0; b.{core::num::<}(10){(core::num) → core::bool}; b = b.{core::num::+}(1){(core::num) → core::int}) {
+      count = count.{core::num::+}(1){(core::num) → core::int};
+      if(count =={core::num::==}{(core::Object) → core::bool} 27)
         break #L1;
     }
-    count = count.{core::num::+}(1){(core::num*) →* core::int*};
+    count = count.{core::num::+}(1){(core::num) → core::int};
   }
-  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
+  if(!(count =={core::num::==}{(core::Object) → core::bool} 27))
     throw "failed: ${count}";
 }
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect
index 7caa5cb..6531e98 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* count = 0;
+  core::int count = 0;
   #L1:
-  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
-    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
-      count = count.{core::num::+}(1){(core::num*) →* core::int*};
-      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
+  for (core::int a = 0; a.{core::num::<}(10){(core::num) → core::bool}; a = a.{core::num::+}(1){(core::num) → core::int}) {
+    for (core::int b = 0; b.{core::num::<}(10){(core::num) → core::bool}; b = b.{core::num::+}(1){(core::num) → core::int}) {
+      count = count.{core::num::+}(1){(core::num) → core::int};
+      if(count =={core::num::==}{(core::Object) → core::bool} 27)
         break #L1;
     }
-    count = count.{core::num::+}(1){(core::num*) →* core::int*};
+    count = count.{core::num::+}(1){(core::num) → core::int};
   }
-  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
+  if(!(count =={core::num::==}{(core::Object) → core::bool} 27))
     throw "failed: ${count}";
 }
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
index 7caa5cb..6531e98 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* count = 0;
+  core::int count = 0;
   #L1:
-  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
-    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
-      count = count.{core::num::+}(1){(core::num*) →* core::int*};
-      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
+  for (core::int a = 0; a.{core::num::<}(10){(core::num) → core::bool}; a = a.{core::num::+}(1){(core::num) → core::int}) {
+    for (core::int b = 0; b.{core::num::<}(10){(core::num) → core::bool}; b = b.{core::num::+}(1){(core::num) → core::int}) {
+      count = count.{core::num::+}(1){(core::num) → core::int};
+      if(count =={core::num::==}{(core::Object) → core::bool} 27)
         break #L1;
     }
-    count = count.{core::num::+}(1){(core::num*) →* core::int*};
+    count = count.{core::num::+}(1){(core::num) → core::int};
   }
-  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
+  if(!(count =={core::num::==}{(core::Object) → core::bool} 27))
     throw "failed: ${count}";
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart b/pkg/front_end/testcases/regress/issue_34225.dart
index d9470a5..e058ee7 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart
+++ b/pkg/front_end/testcases/regress/issue_34225.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class C {
   static set C(v) {} //# 01: compile-time error
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.textual_outline.expect
index e268fae..ab71dd0 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   static set C(v) {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
index 2a92ec9..4598ab4 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,44 +22,24 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set C(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   set D(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
     ^" in c{<unresolved>}.C = 5;
-  self::D* d = new self::D::•();
+  self::D d = new self::D::•();
   d.{self::D::D} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect
index 2a92ec9..4598ab4 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,44 +22,24 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set C(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   set D(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
     ^" in c{<unresolved>}.C = 5;
-  self::D* d = new self::D::•();
+  self::D d = new self::D::•();
   d.{self::D::D} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.outline.expect
index 5944ff5..bd191bb 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,36 +16,16 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   static set C(dynamic v) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   set D(dynamic v) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
index 2a92ec9..4598ab4 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,44 +22,24 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set C(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   set D(dynamic v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
     ^" in c{<unresolved>}.C = 5;
-  self::D* d = new self::D::•();
+  self::D d = new self::D::•();
   d.{self::D::D} = 5;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart b/pkg/front_end/testcases/regress/issue_34291.dart
index ee7e3f0..4011208 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart
+++ b/pkg/front_end/testcases/regress/issue_34291.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import "issue_34291_lib.dart" as lib;
 
 class B {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline.expect
index 16dbb06..0019a54 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_34291_lib.dart" as lib;
 
 class B {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline_modelled.expect
index 16dbb06..0019a54 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_34291_lib.dart" as lib;
 
 class B {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
index 13bbe76..e9fdd4e 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,39 +12,19 @@
 import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → invalid-type {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
index 13bbe76..e9fdd4e 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,39 +12,19 @@
 import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → invalid-type {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
index 79da717..0f59580 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,39 +12,19 @@
 import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → invalid-type
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
index 13bbe76..e9fdd4e 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,39 +12,19 @@
 import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → invalid-type {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34291_lib.dart b/pkg/front_end/testcases/regress/issue_34291_lib.dart
index 2a07a00..a0e9344 100644
--- a/pkg/front_end/testcases/regress/issue_34291_lib.dart
+++ b/pkg/front_end/testcases/regress/issue_34291_lib.dart
@@ -1,5 +1,5 @@
 // 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.
-// @dart=2.9
+
 class A {}
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart b/pkg/front_end/testcases/regress/issue_34403.dart
index cbdf2da..37cff18 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart
+++ b/pkg/front_end/testcases/regress/issue_34403.dart
@@ -1,7 +1,9 @@
 // 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.
-// @dart=2.9
+
+// @dart=2.14
+
 import 'issue_34403_lib.dart' as p;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline.expect
index b26df927..17317b8 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.14
 import 'issue_34403_lib.dart' as p;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline_modelled.expect
index b26df927..17317b8 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.textual_outline_modelled.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.14
 import 'issue_34403_lib.dart' as p;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
index a31d72a..2d0471d 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
@@ -1,115 +1,115 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c1 = C.bar<int>();
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c3 = C<String>.bar<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:24:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c4 = new C<String>.bar<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:27:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d1 = D.foo<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d3 = D<String>.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:33:30: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d4 = const D<String>.foo<int>();
 //                              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:36:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e1 = p.E.bar<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:20: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e3 = p.E<String>.bar<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:42:28: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e4 = new p.E<String>.bar<int>();
 //                            ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:45:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f1 = p.F.foo<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f3 = p.F<String>.foo<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:51:32: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f4 = const p.F<String>.foo<int>();
 //                                ^^^
@@ -120,96 +120,56 @@
 
 import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* c1 = new self::C::bar<core::int*>();
-  c1.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c2 = new self::C::bar<core::int*>();
-  c2.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c3 = new self::C::bar<core::int*>();
-  c3.{self::C::toString}(){() →* core::String*};
-  self::C<core::String*>* c4 = new self::C::bar<core::String*>();
-  c4.{self::C::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C2.{self::D::toString}(){() →* core::String*};
-  iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
-  e1.{iss::E::toString}(){() →* core::String*};
-  iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
-  e2.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::int*>* e3 = new iss::E::bar<core::int*>();
-  e3.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
-  e4.{iss::E::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C4.{iss::F::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C5.{iss::F::toString}(){() →* core::String*};
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
-class E<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → iss::E<iss::E::T*>*
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → iss::F<iss::F::T*>*
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
@@ -223,6 +183,6 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_34403.dart:
-- D.foo (from org-dartlang-testcase:///issue_34403.dart:12:9)
+- D.foo (from org-dartlang-testcase:///issue_34403.dart:14:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:10:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
index a31d72a..2d0471d 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
@@ -1,115 +1,115 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c1 = C.bar<int>();
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c3 = C<String>.bar<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:24:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c4 = new C<String>.bar<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:27:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d1 = D.foo<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d3 = D<String>.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:33:30: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d4 = const D<String>.foo<int>();
 //                              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:36:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e1 = p.E.bar<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:20: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e3 = p.E<String>.bar<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:42:28: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e4 = new p.E<String>.bar<int>();
 //                            ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:45:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f1 = p.F.foo<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f3 = p.F<String>.foo<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:51:32: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f4 = const p.F<String>.foo<int>();
 //                                ^^^
@@ -120,96 +120,56 @@
 
 import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* c1 = new self::C::bar<core::int*>();
-  c1.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c2 = new self::C::bar<core::int*>();
-  c2.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c3 = new self::C::bar<core::int*>();
-  c3.{self::C::toString}(){() →* core::String*};
-  self::C<core::String*>* c4 = new self::C::bar<core::String*>();
-  c4.{self::C::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C2.{self::D::toString}(){() →* core::String*};
-  iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
-  e1.{iss::E::toString}(){() →* core::String*};
-  iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
-  e2.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::int*>* e3 = new iss::E::bar<core::int*>();
-  e3.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
-  e4.{iss::E::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C4.{iss::F::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C5.{iss::F::toString}(){() →* core::String*};
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
-class E<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → iss::E<iss::E::T*>*
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → iss::F<iss::F::T*>*
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
@@ -223,6 +183,6 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_34403.dart:
-- D.foo (from org-dartlang-testcase:///issue_34403.dart:12:9)
+- D.foo (from org-dartlang-testcase:///issue_34403.dart:14:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:10:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.outline.expect
index 748f874..23f446b 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.outline.expect
@@ -1,71 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-class E<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → self2::E<self2::E::T*>*
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self2::E<self2::E::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self2::F<self2::F::T*>*
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self2::F<self2::F::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
index a31d72a..2d0471d 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
@@ -1,115 +1,115 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c1 = C.bar<int>();
 //              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:22:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c3 = C<String>.bar<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:24:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var c4 = new C<String>.bar<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:27:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d1 = D.foo<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:31:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d3 = D<String>.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:33:30: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const d4 = const D<String>.foo<int>();
 //                              ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:36:16: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e1 = p.E.bar<int>();
 //                ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:20: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:40:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e3 = p.E<String>.bar<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:42:28: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   var e4 = new p.E<String>.bar<int>();
 //                            ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:45:18: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f1 = p.F.foo<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
-// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_34403.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:49:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f3 = p.F<String>.foo<int>();
 //                          ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// pkg/front_end/testcases/regress/issue_34403.dart:51:32: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
 //   const f4 = const p.F<String>.foo<int>();
 //                                ^^^
@@ -120,96 +120,56 @@
 
 import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* c1 = new self::C::bar<core::int*>();
-  c1.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c2 = new self::C::bar<core::int*>();
-  c2.{self::C::toString}(){() →* core::String*};
-  self::C<core::int*>* c3 = new self::C::bar<core::int*>();
-  c3.{self::C::toString}(){() →* core::String*};
-  self::C<core::String*>* c4 = new self::C::bar<core::String*>();
-  c4.{self::C::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C1.{self::D::toString}(){() →* core::String*};
-  #C2.{self::D::toString}(){() →* core::String*};
-  iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
-  e1.{iss::E::toString}(){() →* core::String*};
-  iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
-  e2.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::int*>* e3 = new iss::E::bar<core::int*>();
-  e3.{iss::E::toString}(){() →* core::String*};
-  iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
-  e4.{iss::E::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C4.{iss::F::toString}(){() →* core::String*};
-  #C3.{iss::F::toString}(){() →* core::String*};
-  #C5.{iss::F::toString}(){() →* core::String*};
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
-class E<T extends core::Object* = dynamic> extends core::Object {
-  constructor bar() → iss::E<iss::E::T*>*
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → iss::F<iss::F::T*>*
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
@@ -223,6 +183,6 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_34403.dart:
-- D.foo (from org-dartlang-testcase:///issue_34403.dart:12:9)
+- D.foo (from org-dartlang-testcase:///issue_34403.dart:14:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:10:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart b/pkg/front_end/testcases/regress/issue_34403_2.dart
new file mode 100644
index 0000000..157dbf0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart
@@ -0,0 +1,51 @@
+// 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 'issue_34403_lib.dart' as p;
+
+class C<T> {
+  C.bar();
+}
+
+class D<T> {
+  const D.foo();
+}
+
+main() {
+  var c1 = C.bar<int>();
+  c1.toString();
+  var c2 = new C.bar<int>();
+  c2.toString();
+  var c3 = C<String>.bar<int>();
+  c3.toString();
+  var c4 = new C<String>.bar<int>();
+  c4.toString();
+
+  const d1 = D.foo<int>();
+  d1.toString();
+  const d2 = const D.foo<int>();
+  d2.toString();
+  const d3 = D<String>.foo<int>();
+  d3.toString();
+  const d4 = const D<String>.foo<int>();
+  d4.toString();
+
+  var e1 = p.E.bar<int>();
+  e1.toString();
+  var e2 = new p.E.bar<int>();
+  e2.toString();
+  var e3 = p.E<String>.bar<int>();
+  e3.toString();
+  var e4 = new p.E<String>.bar<int>();
+  e4.toString();
+
+  const f1 = p.F.foo<int>();
+  f1.toString();
+  const f2 = const p.F.foo<int>();
+  f2.toString();
+  const f3 = p.F<String>.foo<int>();
+  f3.toString();
+  const f4 = const p.F<String>.foo<int>();
+  f4.toString();
+}
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline.expect
new file mode 100644
index 0000000..6ec803e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+import 'issue_34403_lib.dart' as p;
+
+class C<T> {
+  C.bar();
+}
+
+class D<T> {
+  const D.foo();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6ec803e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+import 'issue_34403_lib.dart' as p;
+
+class C<T> {
+  C.bar();
+}
+
+class D<T> {
+  const D.foo();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.expect
new file mode 100644
index 0000000..bb6af05
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c1 = C.bar<int>();
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c2 = new C.bar<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c3 = C<String>.bar<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c4 = new C<String>.bar<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d1 = D.foo<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d2 = const D.foo<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d3 = D<String>.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d4 = const D<String>.foo<int>();
+//                              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e1 = p.E.bar<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e2 = new p.E.bar<int>();
+//                    ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e3 = p.E<String>.bar<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e4 = new p.E<String>.bar<int>();
+//                            ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f1 = p.F.foo<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f2 = const p.F.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f3 = p.F<String>.foo<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f4 = const p.F<String>.foo<int>();
+//                                ^^^
+//
+import self as self;
+import "dart:core" as core;
+import "issue_34403_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
+    : super core::Object::•()
+    ;
+}
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = self::D<core::int*> {}
+  #C2 = self::D<core::String*> {}
+  #C3 = iss::F<core::int*> {}
+  #C4 = iss::F<dynamic> {}
+  #C5 = iss::F<core::String*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_34403_2.dart:
+- D.foo (from org-dartlang-testcase:///issue_34403_2.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.modular.expect
new file mode 100644
index 0000000..bb6af05
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.modular.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c1 = C.bar<int>();
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c2 = new C.bar<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c3 = C<String>.bar<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c4 = new C<String>.bar<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d1 = D.foo<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d2 = const D.foo<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d3 = D<String>.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d4 = const D<String>.foo<int>();
+//                              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e1 = p.E.bar<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e2 = new p.E.bar<int>();
+//                    ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e3 = p.E<String>.bar<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e4 = new p.E<String>.bar<int>();
+//                            ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f1 = p.F.foo<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f2 = const p.F.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f3 = p.F<String>.foo<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f4 = const p.F<String>.foo<int>();
+//                                ^^^
+//
+import self as self;
+import "dart:core" as core;
+import "issue_34403_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
+    : super core::Object::•()
+    ;
+}
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = self::D<core::int*> {}
+  #C2 = self::D<core::String*> {}
+  #C3 = iss::F<core::int*> {}
+  #C4 = iss::F<dynamic> {}
+  #C5 = iss::F<core::String*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_34403_2.dart:
+- D.foo (from org-dartlang-testcase:///issue_34403_2.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.outline.expect
new file mode 100644
index 0000000..23f446b
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self2::E<self2::E::T%>
+    ;
+}
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self2::F<self2::F::T%>
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..bb6af05
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2.dart.weak.transformed.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c1 = C.bar<int>();
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c2 = new C.bar<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c3 = C<String>.bar<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c4 = new C<String>.bar<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d1 = D.foo<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d2 = const D.foo<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d3 = D<String>.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d4 = const D<String>.foo<int>();
+//                              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e1 = p.E.bar<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e2 = new p.E.bar<int>();
+//                    ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e3 = p.E<String>.bar<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e4 = new p.E<String>.bar<int>();
+//                            ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f1 = p.F.foo<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f2 = const p.F.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f3 = p.F<String>.foo<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403_2.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f4 = const p.F<String>.foo<int>();
+//                                ^^^
+//
+import self as self;
+import "dart:core" as core;
+import "issue_34403_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C<core::int> c1 = new self::C::bar<core::int>();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c2 = new self::C::bar<core::int>();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C<core::int> c3 = new self::C::bar<core::int>();
+  c3.{core::Object::toString}(){() → core::String};
+  self::C<core::String> c4 = new self::C::bar<core::String>();
+  c4.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C1.{core::Object::toString}(){() → core::String};
+  #C2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e1 = new iss::E::bar<core::int>();
+  e1.{core::Object::toString}(){() → core::String};
+  iss::E<dynamic> e2 = new iss::E::bar<dynamic>();
+  e2.{core::Object::toString}(){() → core::String};
+  iss::E<core::int> e3 = new iss::E::bar<core::int>();
+  e3.{core::Object::toString}(){() → core::String};
+  iss::E<core::String> e4 = new iss::E::bar<core::String>();
+  e4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C4.{core::Object::toString}(){() → core::String};
+  #C3.{core::Object::toString}(){() → core::String};
+  #C5.{core::Object::toString}(){() → core::String};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T%>
+    : super core::Object::•()
+    ;
+}
+class F<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = self::D<core::int*> {}
+  #C2 = self::D<core::String*> {}
+  #C3 = iss::F<core::int*> {}
+  #C4 = iss::F<dynamic> {}
+  #C5 = iss::F<core::String*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_34403_2.dart:
+- D.foo (from org-dartlang-testcase:///issue_34403_2.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:12:9)
diff --git a/pkg/front_end/testcases/regress/issue_34403_2_lib.dart b/pkg/front_end/testcases/regress/issue_34403_2_lib.dart
new file mode 100644
index 0000000..51e0085
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403_2_lib.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class E<T> {
+  E.bar();
+}
+
+class F<T> {
+  const F.foo();
+}
diff --git a/pkg/front_end/testcases/regress/issue_34403_lib.dart b/pkg/front_end/testcases/regress/issue_34403_lib.dart
index 0a78e41..4253297 100644
--- a/pkg/front_end/testcases/regress/issue_34403_lib.dart
+++ b/pkg/front_end/testcases/regress/issue_34403_lib.dart
@@ -1,7 +1,9 @@
 // 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.
-// @dart=2.9
+
+// @dart=2.14
+
 class E<T> {
   E.bar();
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart b/pkg/front_end/testcases/regress/issue_34498.dart
index 0880816..aec52e6 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart
+++ b/pkg/front_end/testcases/regress/issue_34498.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 import 'issue_34498_lib.dart' as lib;
 
 class A {
-  lib.MyClass get lib => null; // (1)
+  lib.MyClass? get lib => null; // (1)
 
   foo foo() {}
 
@@ -14,7 +14,7 @@
 
 class B extends A {}
 
-final A a = null;
+final A? a = null;
 
 class C<T> {
   T<String> foo() {}
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline.expect
index 5522b80..99b31c4 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline.expect
@@ -1,15 +1,14 @@
-// @dart = 2.9
 import 'issue_34498_lib.dart' as lib;
 
 class A {
-  lib.MyClass get lib => null;
+  lib.MyClass? get lib => null;
   foo foo() {}
   Missing bar() {}
 }
 
 class B extends A {}
 
-final A a = null;
+final A? a = null;
 
 class C<T> {
   T<String> foo() {}
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline_modelled.expect
index b84c73c..e1b064c 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 import 'issue_34498_lib.dart' as lib;
 
 class A {
   Missing bar() {}
   foo foo() {}
-  lib.MyClass get lib => null;
+  lib.MyClass? get lib => null;
 }
 
 class B extends A {}
@@ -13,5 +12,5 @@
   T<String> foo() {}
 }
 
-final A a = null;
+final A? a = null;
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34498.dart.weak.expect
index fa054b4..6cdd190 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
-//   lib.MyClass get lib => null; // (1)
+//   lib.MyClass? get lib => null; // (1)
 //   ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
@@ -28,64 +28,34 @@
 import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get lib() → invalid-type
     return null;
   method foo() → invalid-type {}
   method bar() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method foo() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::A* a = null;
+static final field self::A? a = null;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class MyClass extends core::Object {
-  synthetic constructor •() → self2::MyClass*
+  synthetic constructor •() → self2::MyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect
index fa054b4..6cdd190 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
-//   lib.MyClass get lib => null; // (1)
+//   lib.MyClass? get lib => null; // (1)
 //   ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
@@ -28,64 +28,34 @@
 import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get lib() → invalid-type
     return null;
   method foo() → invalid-type {}
   method bar() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method foo() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::A* a = null;
+static final field self::A? a = null;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class MyClass extends core::Object {
-  synthetic constructor •() → self2::MyClass*
+  synthetic constructor •() → self2::MyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34498.dart.weak.outline.expect
index a5828de..55ff30a 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
-//   lib.MyClass get lib => null; // (1)
+//   lib.MyClass? get lib => null; // (1)
 //   ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
@@ -28,7 +28,7 @@
 import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   get lib() → invalid-type
     ;
@@ -36,56 +36,26 @@
     ;
   method bar() → invalid-type
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
   method foo() → invalid-type
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::A* a;
+static final field self::A? a;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class MyClass extends core::Object {
-  synthetic constructor •() → self2::MyClass*
+  synthetic constructor •() → self2::MyClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34498.dart.weak.transformed.expect
index fa054b4..6cdd190 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
-//   lib.MyClass get lib => null; // (1)
+//   lib.MyClass? get lib => null; // (1)
 //   ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
@@ -28,64 +28,34 @@
 import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   get lib() → invalid-type
     return null;
   method foo() → invalid-type {}
   method bar() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method foo() → invalid-type {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::A* a = null;
+static final field self::A? a = null;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class MyClass extends core::Object {
-  synthetic constructor •() → self2::MyClass*
+  synthetic constructor •() → self2::MyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_34498_lib.dart b/pkg/front_end/testcases/regress/issue_34498_lib.dart
index bbefaa9..a1b2795 100644
--- a/pkg/front_end/testcases/regress/issue_34498_lib.dart
+++ b/pkg/front_end/testcases/regress/issue_34498_lib.dart
@@ -1,5 +1,5 @@
 // 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.
-// @dart=2.9
+
 class MyClass {}
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart b/pkg/front_end/testcases/regress/issue_34563.dart
index 1ba791b..84109cc 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart
+++ b/pkg/front_end/testcases/regress/issue_34563.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 mixin M1 {
   int get m => 1;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34563.dart.textual_outline.expect
index 623f632..61b16e2 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 mixin M1 {
   int get m => 1;
 }
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
index 201e0fa..c2bdb53 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,92 +46,32 @@
 import "dart:core" as core;
 
 abstract class M1 extends core::Object /*isMixinDeclaration*/  {
-  get m() → core::int*
+  get m() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M3 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get c() → core::int*
+  get c() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C2* c2 = new self::C2::•();
+  self::C2 c2 = new self::C2::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
@@ -141,7 +81,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
             ^" in c2{<unresolved>}.c);
-  self::C3* c3 = new self::C3::•();
+  self::C3 c3 = new self::C3::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect
index 201e0fa..c2bdb53 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,92 +46,32 @@
 import "dart:core" as core;
 
 abstract class M1 extends core::Object /*isMixinDeclaration*/  {
-  get m() → core::int*
+  get m() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M3 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get c() → core::int*
+  get c() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C2* c2 = new self::C2::•();
+  self::C2 c2 = new self::C2::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
@@ -141,7 +81,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
             ^" in c2{<unresolved>}.c);
-  self::C3* c3 = new self::C3::•();
+  self::C3 c3 = new self::C3::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.outline.expect
index 1a2844e..a3834c6 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,86 +22,26 @@
 import "dart:core" as core;
 
 abstract class M1 extends core::Object /*isMixinDeclaration*/  {
-  get m() → core::int*
+  get m() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M3 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
-  get c() → core::int*
+  get c() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
index 201e0fa..c2bdb53 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,92 +46,32 @@
 import "dart:core" as core;
 
 abstract class M1 extends core::Object /*isMixinDeclaration*/  {
-  get m() → core::int*
+  get m() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M3 extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get c() → core::int*
+  get c() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C3 extends core::Object {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C2* c2 = new self::C2::•();
+  self::C2 c2 = new self::C2::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
@@ -141,7 +81,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
             ^" in c2{<unresolved>}.c);
-  self::C3* c3 = new self::C3::•();
+  self::C3 c3 = new self::C3::•();
   invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart b/pkg/front_end/testcases/regress/issue_34610.dart
index ed93b92..da9d50a 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart
+++ b/pkg/front_end/testcases/regress/issue_34610.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A { get A.named => null; get bar => 1; }
 
 class B { B.named : super(); get bar => 1; }
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34610.dart.textual_outline.expect
index 76f6547..176c1c6 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   get A.named ()=> null;
   get bar => 1;
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
index db6cda1..3bbc877 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,7 +36,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor named() → self::A*
+  constructor named() → self::A
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -44,36 +44,16 @@
                          ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  constructor named() → self::B*
+  constructor named() → self::B
     : super core::Object::•()
     ;
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  constructor named() → self::C*
+  constructor named() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -81,29 +61,19 @@
                      ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
     core::print(new self::A::named().{self::A::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   core::print(new self::B::named().{self::B::bar}{dynamic});
   try {
     core::print(new self::C::named().{self::C::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect
index db6cda1..3bbc877 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,7 +36,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor named() → self::A*
+  constructor named() → self::A
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -44,36 +44,16 @@
                          ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  constructor named() → self::B*
+  constructor named() → self::B
     : super core::Object::•()
     ;
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  constructor named() → self::C*
+  constructor named() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -81,29 +61,19 @@
                      ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
     core::print(new self::A::named().{self::A::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   core::print(new self::B::named().{self::B::bar}{dynamic});
   try {
     core::print(new self::C::named().{self::C::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.outline.expect
index 57bde4c..b49f277 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,52 +26,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor named() → self::A*
+  constructor named() → self::A
     ;
   get bar() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  constructor named() → self::B*
+  constructor named() → self::B
     ;
   get bar() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  constructor named() → self::C*
+  constructor named() → self::C
     ;
   get bar() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
index db6cda1..3bbc877 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,7 +36,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor named() → self::A*
+  constructor named() → self::A
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -44,36 +44,16 @@
                          ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  constructor named() → self::B*
+  constructor named() → self::B
     : super core::Object::•()
     ;
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  constructor named() → self::C*
+  constructor named() → self::C
     : super core::Object::•()
     invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
 Try removing the return type.
@@ -81,29 +61,19 @@
                      ^";
   get bar() → dynamic
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
     core::print(new self::A::named().{self::A::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   core::print(new self::B::named().{self::B::bar}{dynamic});
   try {
     core::print(new self::C::named().{self::C::bar}{dynamic});
     throw "expected exception";
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart b/pkg/front_end/testcases/regress/issue_34614.dart
index 8cdbe47..aedbef3a 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart
+++ b/pkg/front_end/testcases/regress/issue_34614.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class C { C. }
 
 main() {
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34614.dart.textual_outline.expect
index 24394ba..9b80699 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C. (){}
 }
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
index 9092aae..b66711f 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,21 +20,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::toString}(){() →* core::String*};
+  self::C c = new self::C::•();
+  c.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect
index 9092aae..b66711f 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,21 +20,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::toString}(){() →* core::String*};
+  self::C c = new self::C::•();
+  c.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.outline.expect
index 3132fad..c4341ef 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,18 +20,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
index 9092aae..b66711f 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,21 +20,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::toString}(){() →* core::String*};
+  self::C c = new self::C::•();
+  c.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart b/pkg/front_end/testcases/regress/issue_34850.dart
index d61c5ff..052530e 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart
+++ b/pkg/front_end/testcases/regress/issue_34850.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 <foo<
 
 int f1() {
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_34850.dart.textual_outline.expect
index 9e78bc0..7024734 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 <
 foo< int >f1() {}
 foo Future<List<int>> (){}
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
index 460422e..eff3876 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,7 +48,7 @@
 static method f1() → invalid-type {
   return null;
 }
-static method Future<List extends core::Object* = dynamic>() → invalid-type {}
+static method Future<List extends core::Object? = dynamic>() → invalid-type {}
 static method f2() → dynamic async /* futureValueType= dynamic */ 
   return null;
 static method f3() → invalid-type async /* futureValueType= invalid-type */ {
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
index 460422e..eff3876 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,7 +48,7 @@
 static method f1() → invalid-type {
   return null;
 }
-static method Future<List extends core::Object* = dynamic>() → invalid-type {}
+static method Future<List extends core::Object? = dynamic>() → invalid-type {}
 static method f2() → dynamic async /* futureValueType= dynamic */ 
   return null;
 static method f3() → invalid-type async /* futureValueType= invalid-type */ {
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
index 34f987e..e76b343 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -47,7 +47,7 @@
 
 static method f1() → invalid-type
   ;
-static method Future<List extends core::Object* = dynamic>() → invalid-type
+static method Future<List extends core::Object? = dynamic>() → invalid-type
   ;
 static method f2() → dynamic async 
   ;
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
index e1979d3..88fac78 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -50,14 +50,14 @@
 static method f1() → invalid-type {
   return null;
 }
-static method Future<List extends core::Object* = dynamic>() → invalid-type {}
+static method Future<List extends core::Object? = dynamic>() → invalid-type {}
 static method f2() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -69,22 +69,22 @@
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method f3() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<dynamic>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -96,22 +96,22 @@
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
@@ -127,12 +127,12 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart b/pkg/front_end/testcases/regress/issue_35151.dart
index 8c372eb..7c36418 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart
+++ b/pkg/front_end/testcases/regress/issue_35151.dart
@@ -1,9 +1,9 @@
 // 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.
-// @dart=2.9
+
 class A {
-  int a;
+  int a = 0;
 }
 
 class B extends A {
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35151.dart.textual_outline.expect
index 375f782..de24b92 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class A {
-  int a;
+  int a = 0;
 }
 class B extends A {
   B() : super.a = 42;
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35151.dart.weak.expect
index 146d622..a1693a5 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,23 +20,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
@@ -44,31 +34,21 @@
     ;
 }
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
-    self::B* b = new self::B::•();
+    self::B b = new self::B::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
   try {
-    self::C* c = new self::C::•();
+    self::C c = new self::C::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect
index 146d622..a1693a5 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,23 +20,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
@@ -44,31 +34,21 @@
     ;
 }
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
-    self::B* b = new self::B::•();
+    self::B b = new self::B::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
   try {
-    self::C* c = new self::C::•();
+    self::C c = new self::C::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35151.dart.weak.outline.expect
index 478d47a..3da6b9b 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,37 +11,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a;
-  synthetic constructor •() → self::A*
+  field core::int a;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35151.dart.weak.transformed.expect
index 146d622..a1693a5 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,23 +20,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •() → self::B*
+  constructor •() → self::B
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
@@ -44,31 +34,21 @@
     ;
 }
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   try {
-    self::B* b = new self::B::•();
+    self::B b = new self::B::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
   try {
-    self::C* c = new self::C::•();
+    self::C c = new self::C::•();
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart b/pkg/front_end/testcases/regress/issue_35177.dart
index 7fb29a5..8cbb06d 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart
+++ b/pkg/front_end/testcases/regress/issue_35177.dart
@@ -1,8 +1,8 @@
 // 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.
-// @dart=2.9
-main() {
-  dynamic Function() f;
+
+test() {
+  dynamic Function() f = () {};
   (f)()<int>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline.expect
index 7c126a2..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline_modelled.expect
index 7c126a2..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
index d0eb552..27aa3f7 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  () →* dynamic f;
-  f(){() →* dynamic}{dynamic}.call<core::int*>();
+static method test() → dynamic {
+  () → dynamic f = () → Null {};
+  f(){() → dynamic}{dynamic}.call<core::int>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect
index d0eb552..27aa3f7 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  () →* dynamic f;
-  f(){() →* dynamic}{dynamic}.call<core::int*>();
+static method test() → dynamic {
+  () → dynamic f = () → Null {};
+  f(){() → dynamic}{dynamic}.call<core::int>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.outline.expect
index 6a28c0d..eef3152 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.outline.expect
@@ -1,5 +1,5 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
index d0eb552..27aa3f7 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  () →* dynamic f;
-  f(){() →* dynamic}{dynamic}.call<core::int*>();
+static method test() → dynamic {
+  () → dynamic f = () → Null {};
+  f(){() → dynamic}{dynamic}.call<core::int>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart b/pkg/front_end/testcases/regress/issue_35213.dart
index e231fb7..37a9f1c 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart
+++ b/pkg/front_end/testcases/regress/issue_35213.dart
@@ -1,7 +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.
-// @dart=2.9
+
 f(int a int b) { }
 
 main() {
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline.expect
index b241519..55bc6cb 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 f(int a, int b) {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline_modelled.expect
index b241519..55bc6cb 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 f(int a, int b) {}
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35213.dart.weak.expect
index e97491d..a03f07f 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f(core::int* a, core::int* b) → dynamic {}
+static method f(core::int a, core::int b) → dynamic {}
 static method main() → dynamic {
   self::f(2, 3);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect
index e97491d..a03f07f 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f(core::int* a, core::int* b) → dynamic {}
+static method f(core::int a, core::int b) → dynamic {}
 static method main() → dynamic {
   self::f(2, 3);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35213.dart.weak.outline.expect
index 0a51465..1f8ba07 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f(core::int* a, core::int* b) → dynamic
+static method f(core::int a, core::int b) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35213.dart.weak.transformed.expect
index e97491d..a03f07f 100644
--- a/pkg/front_end/testcases/regress/issue_35213.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,7 +9,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method f(core::int* a, core::int* b) → dynamic {}
+static method f(core::int a, core::int b) → dynamic {}
 static method main() → dynamic {
   self::f(2, 3);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart b/pkg/front_end/testcases/regress/issue_35220.dart
index 1f52884..93b8134 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart
+++ b/pkg/front_end/testcases/regress/issue_35220.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 class A {
   A bad() { return true != 2; }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline.expect
index 178e278..81e059b 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A bad() {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline_modelled.expect
index 178e278..81e059b 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A bad() {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
index cab6aea..b2fb1b7 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
 //   A bad() { return true != 2; }
 //                         ^
@@ -11,24 +11,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method bad() → self::A* {
-    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+  method bad() → self::A {
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
-                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
+                        ^" in !(true =={core::Object::==}{(core::Object) → core::bool} 2) as{TypeError,ForNonNullableByDefault} self::A;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect
index cab6aea..b2fb1b7 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
 //   A bad() { return true != 2; }
 //                         ^
@@ -11,24 +11,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method bad() → self::A* {
-    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+  method bad() → self::A {
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
-                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
+                        ^" in !(true =={core::Object::==}{(core::Object) → core::bool} 2) as{TypeError,ForNonNullableByDefault} self::A;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.outline.expect
index 8e1c8d8..1cbe284 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method bad() → self::A*
+  method bad() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
index cab6aea..b2fb1b7 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
 //   A bad() { return true != 2; }
 //                         ^
@@ -11,24 +11,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method bad() → self::A* {
-    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+  method bad() → self::A {
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be returned from a function with return type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
-                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
+                        ^" in !(true =={core::Object::==}{(core::Object) → core::bool} 2) as{TypeError,ForNonNullableByDefault} self::A;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart b/pkg/front_end/testcases/regress/issue_35258.dart
index 941ce25..486fae4 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart
+++ b/pkg/front_end/testcases/regress/issue_35258.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 main() {
   new C(42);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline.expect
index bf2e71f..639a601 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 
 class C {
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline_modelled.expect
index 4a88bcb..f4d4891 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C() {}
   C(this.d) {}
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35258.dart.weak.expect
index 33c1bb2..4fd98f1 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,18 +23,8 @@
 
 class C extends core::Object {
   final field dynamic d = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35258.dart:6:7: Error: Can't use 'C' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect
index 33c1bb2..4fd98f1 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,18 +23,8 @@
 
 class C extends core::Object {
   final field dynamic d = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35258.dart:6:7: Error: Can't use 'C' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35258.dart.weak.outline.expect
index 6f0a04b..52c6688 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,18 +14,8 @@
 
 class C extends core::Object {
   final field dynamic d;
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35258.dart.weak.transformed.expect
index 33c1bb2..4fd98f1 100644
--- a/pkg/front_end/testcases/regress/issue_35258.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,18 +23,8 @@
 
 class C extends core::Object {
   final field dynamic d = null;
-  constructor •() → self::C*
+  constructor •() → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35258.dart:6:7: Error: Can't use 'C' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart b/pkg/front_end/testcases/regress/issue_35259.dart
index 1cee48a2..10246aa 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart
+++ b/pkg/front_end/testcases/regress/issue_35259.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class Supertype {
   factory Supertype() = Unresolved;
   factory Supertype() = Unresolved;
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline.expect
index 423a8e9..a47d649 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Supertype {
   factory Supertype() = Unresolved;
   factory Supertype() = Unresolved;
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline_modelled.expect
index 423a8e9..a47d649 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Supertype {
   factory Supertype() = Unresolved;
   factory Supertype() = Unresolved;
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
index 6a366d0..80f4a7e 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,21 +33,11 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
                         ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:11:13: Error: Can't use 'Supertype' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect
index 6a366d0..80f4a7e 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,21 +33,11 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
                         ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:11:13: Error: Can't use 'Supertype' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
index da1fe3e..bab0db5 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -29,21 +29,11 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•]/*isLegacy*/;
+  static factory •() → self::Supertype
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
                         ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
index 6a366d0..80f4a7e 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -33,21 +33,11 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
                         ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   core::print(invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:11:13: Error: Can't use 'Supertype' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart b/pkg/front_end/testcases/regress/issue_35260.dart
index 16ef8d7..ab79fbe 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart
+++ b/pkg/front_end/testcases/regress/issue_35260.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class Supertype {
   factory Supertype() = X;
   factory Supertype() = X;
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline.expect
index 2ec72a8..beaef36 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Supertype {
   factory Supertype() = X;
   factory Supertype() = X;
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline_modelled.expect
index 2ec72a8..beaef36 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Supertype {
   factory Supertype() = X;
   factory Supertype() = X;
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
index 0b4828a..2e94f53 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,37 +17,17 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return new self::X::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object implements self::Supertype {
-  constructor •() → self::X*
+  constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
+  self::X x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
             ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect
index 0b4828a..2e94f53 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,37 +17,17 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return new self::X::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object implements self::Supertype {
-  constructor •() → self::X*
+  constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
+  self::X x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
             ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
index fd0802b..643d8a4 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,33 +13,13 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•]/*isLegacy*/;
+  static factory •() → self::Supertype
     return new self::X::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object implements self::Supertype {
-  constructor •() → self::X*
+  constructor •() → self::X
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
index 0b4828a..2e94f53 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,37 +17,17 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •() → self::Supertype*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::Supertype
     return new self::X::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object implements self::Supertype {
-  constructor •() → self::X*
+  constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
+  self::X x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
             ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart b/pkg/front_end/testcases/regress/issue_35266.dart
index b87ca47..8564b50 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart
+++ b/pkg/front_end/testcases/regress/issue_35266.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class B<T> extends C<T> {
   B();
   factory B.foo() = B<T>;
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline.expect
index 92fdefa..1d6a7d0 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<T> extends C<T> {
   B();
   factory B.foo() = B<T>;
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline_modelled.expect
index 92fdefa..1d6a7d0 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<T> extends C<T> {
   B();
   factory B.foo() = B<T>;
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
index 9885c52..aec335a 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,33 +16,23 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::C<self::B::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::B<self::B::T%>
     : super self::C::•()
     ;
-  static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    return new self::B::•<self::B::foo::T*>();
+  static factory foo<T extends core::Object? = dynamic>() → self::B<self::B::foo::T%>
+    return new self::B::•<self::B::foo::T%>();
 }
-class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C<self::C::K*>*
+class C<K extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C<self::C::K%>
     : super core::Object::•()
     ;
-  static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
+  static factory bar<K extends core::Object? = dynamic>() → self::C<self::C::bar::K%>
     return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
   factory C.bar() = B<K>.foo;
                     ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect
index 9885c52..aec335a 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,33 +16,23 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::C<self::B::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::B<self::B::T%>
     : super self::C::•()
     ;
-  static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    return new self::B::•<self::B::foo::T*>();
+  static factory foo<T extends core::Object? = dynamic>() → self::B<self::B::foo::T%>
+    return new self::B::•<self::B::foo::T%>();
 }
-class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C<self::C::K*>*
+class C<K extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C<self::C::K%>
     : super core::Object::•()
     ;
-  static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
+  static factory bar<K extends core::Object? = dynamic>() → self::C<self::C::bar::K%>
     return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
   factory C.bar() = B<K>.foo;
                     ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
index c71adb4..7397639 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,31 +16,21 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::C<self::B::T%> {
+  static final field dynamic _redirecting# = <dynamic>[self::B::foo]/*isLegacy*/;
+  constructor •() → self::B<self::B::T%>
     ;
-  static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    return new self::B::•<self::B::foo::T*>();
+  static factory foo<T extends core::Object? = dynamic>() → self::B<self::B::foo::T%>
+    return new self::B::•<self::B::foo::T%>();
 }
-class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
-  constructor •() → self::C<self::C::K*>*
+class C<K extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  constructor •() → self::C<self::C::K%>
     ;
-  static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
+  static factory bar<K extends core::Object? = dynamic>() → self::C<self::C::bar::K%>
     return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
   factory C.bar() = B<K>.foo;
                     ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
index 9885c52..aec335a 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,33 +16,23 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::C<self::B::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::B<self::B::T%>
     : super self::C::•()
     ;
-  static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    return new self::B::•<self::B::foo::T*>();
+  static factory foo<T extends core::Object? = dynamic>() → self::B<self::B::foo::T%>
+    return new self::B::•<self::B::foo::T%>();
 }
-class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → self::C<self::C::K*>*
+class C<K extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::C<self::C::K%>
     : super core::Object::•()
     ;
-  static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
+  static factory bar<K extends core::Object? = dynamic>() → self::C<self::C::bar::K%>
     return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
   factory C.bar() = B<K>.foo;
                     ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart b/pkg/front_end/testcases/regress/issue_35900.dart
index f9b48dc..e03e5f5 100644
--- a/pkg/front_end/testcases/regress/issue_35900.dart
+++ b/pkg/front_end/testcases/regress/issue_35900.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for 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.9
-main () { int x; print('${x' '); }
+
+main () { int? x; print('${x' '); }
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35900.dart.weak.expect
index c6fc9e6..6dd9a32 100644
--- a/pkg/front_end/testcases/regress/issue_35900.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35900.dart.weak.expect
@@ -1,29 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: Can't find '}' to match '${'.
-// main () { int x; print('${x' '); }
-//                         ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:26: Error: Can't find '}' to match '${'.
+// main () { int? x; print('${x' '); }
+//                          ^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:24: Error: String starting with ' must end with '.
-// main () { int x; print('${x' '); }
-//                        ^^^^^^^^^^^^...
+// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: String starting with ' must end with '.
+// main () { int? x; print('${x' '); }
+//                         ^^^^^^^^^^^^...
 //
 // pkg/front_end/testcases/regress/issue_35900.dart:6:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:28: Error: Expected '}' before this.
-// main () { int x; print('${x' '); }
-//                            ^^^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:29: Error: Expected '}' before this.
+// main () { int? x; print('${x' '); }
+//                             ^^^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:31: Error: Expected a String, but got ')'.
-// main () { int x; print('${x' '); }
-//                               ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:32: Error: Expected a String, but got ')'.
+// main () { int? x; print('${x' '); }
+//                                ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x;
+  core::int? x;
   core::print("${x}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect
index c6fc9e6..6dd9a32 100644
--- a/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect
@@ -1,29 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: Can't find '}' to match '${'.
-// main () { int x; print('${x' '); }
-//                         ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:26: Error: Can't find '}' to match '${'.
+// main () { int? x; print('${x' '); }
+//                          ^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:24: Error: String starting with ' must end with '.
-// main () { int x; print('${x' '); }
-//                        ^^^^^^^^^^^^...
+// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: String starting with ' must end with '.
+// main () { int? x; print('${x' '); }
+//                         ^^^^^^^^^^^^...
 //
 // pkg/front_end/testcases/regress/issue_35900.dart:6:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:28: Error: Expected '}' before this.
-// main () { int x; print('${x' '); }
-//                            ^^^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:29: Error: Expected '}' before this.
+// main () { int? x; print('${x' '); }
+//                             ^^^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:31: Error: Expected a String, but got ')'.
-// main () { int x; print('${x' '); }
-//                               ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:32: Error: Expected a String, but got ')'.
+// main () { int? x; print('${x' '); }
+//                                ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x;
+  core::int? x;
   core::print("${x}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35900.dart.weak.outline.expect
index da0b63f..69520d4 100644
--- a/pkg/front_end/testcases/regress/issue_35900.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35900.dart.weak.outline.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: Can't find '}' to match '${'.
-// main () { int x; print('${x' '); }
-//                         ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:26: Error: Can't find '}' to match '${'.
+// main () { int? x; print('${x' '); }
+//                          ^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:24: Error: String starting with ' must end with '.
-// main () { int x; print('${x' '); }
-//                        ^^^^^^^^^^^^...
+// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: String starting with ' must end with '.
+// main () { int? x; print('${x' '); }
+//                         ^^^^^^^^^^^^...
 //
 // pkg/front_end/testcases/regress/issue_35900.dart:6:1: Error: Expected a declaration, but got ''.
 //
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35900.dart.weak.transformed.expect
index c6fc9e6..6dd9a32 100644
--- a/pkg/front_end/testcases/regress/issue_35900.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35900.dart.weak.transformed.expect
@@ -1,29 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: Can't find '}' to match '${'.
-// main () { int x; print('${x' '); }
-//                         ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:26: Error: Can't find '}' to match '${'.
+// main () { int? x; print('${x' '); }
+//                          ^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:24: Error: String starting with ' must end with '.
-// main () { int x; print('${x' '); }
-//                        ^^^^^^^^^^^^...
+// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: String starting with ' must end with '.
+// main () { int? x; print('${x' '); }
+//                         ^^^^^^^^^^^^...
 //
 // pkg/front_end/testcases/regress/issue_35900.dart:6:1: Error: Expected a declaration, but got ''.
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:28: Error: Expected '}' before this.
-// main () { int x; print('${x' '); }
-//                            ^^^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:29: Error: Expected '}' before this.
+// main () { int? x; print('${x' '); }
+//                             ^^^
 //
-// pkg/front_end/testcases/regress/issue_35900.dart:5:31: Error: Expected a String, but got ')'.
-// main () { int x; print('${x' '); }
-//                               ^
+// pkg/front_end/testcases/regress/issue_35900.dart:5:32: Error: Expected a String, but got ')'.
+// main () { int? x; print('${x' '); }
+//                                ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x;
+  core::int? x;
   core::print("${x}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart b/pkg/front_end/testcases/regress/issue_36400.dart
index dea6e4e..4e9455f 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart
+++ b/pkg/front_end/testcases/regress/issue_36400.dart
@@ -1,10 +1,10 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for 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.9
+
 class Test {
   Test factory Test() {
-    return null;
+    throw '';
   }
 }
 
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_36400.dart.textual_outline.expect
index a33d244..a6cca15 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Test {
   Test factory Test() {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36400.dart.weak.expect
index 3b5a369..4c11e13 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class Test extends core::Object {
-  static factory •() → self::Test* {
-    return null;
+  static factory •() → self::Test {
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect
index 3b5a369..4c11e13 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class Test extends core::Object {
-  static factory •() → self::Test* {
-    return null;
+  static factory •() → self::Test {
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_36400.dart.weak.outline.expect
index c49ae0d..7ac028f 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,16 +11,6 @@
 import "dart:core" as core;
 
 class Test extends core::Object {
-  static factory •() → self::Test*
+  static factory •() → self::Test
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36400.dart.weak.transformed.expect
index 3b5a369..4c11e13 100644
--- a/pkg/front_end/testcases/regress/issue_36400.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,17 +11,7 @@
 import "dart:core" as core;
 
 class Test extends core::Object {
-  static factory •() → self::Test* {
-    return null;
+  static factory •() → self::Test {
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart b/pkg/front_end/testcases/regress/issue_36647.dart
index 72babce..3fcff27 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart
+++ b/pkg/front_end/testcases/regress/issue_36647.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 import 'issue_36647_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline.expect
index ac80ab7..489c840 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 import 'issue_36647_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline_modelled.expect
index ac80ab7..489c840 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 import 'issue_36647_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36647.dart.weak.expect
index 85c932b..457856a 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.weak.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_36647_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "issue_36647_lib2.dart" as iss;
 additionalExports = (iss::xxx,
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///issue_36647_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -67,19 +67,9 @@
 import "dart:core" as core;
 
 class xxx extends core::Object {
-  synthetic constructor •() → iss::xxx*
+  synthetic constructor •() → iss::xxx
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field invalid-type XXX;
 static field dynamic extends;
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect
index 85c932b..457856a 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_36647_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "issue_36647_lib2.dart" as iss;
 additionalExports = (iss::xxx,
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///issue_36647_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -67,19 +67,9 @@
 import "dart:core" as core;
 
 class xxx extends core::Object {
-  synthetic constructor •() → iss::xxx*
+  synthetic constructor •() → iss::xxx
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field invalid-type XXX;
 static field dynamic extends;
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_36647.dart.weak.outline.expect
index 9ece05e..18d18f1 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_36647_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "issue_36647_lib2.dart" as iss;
 additionalExports = (iss::xxx,
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///issue_36647_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -63,18 +63,8 @@
 import "dart:core" as core;
 
 class xxx extends core::Object {
-  synthetic constructor •() → iss::xxx*
+  synthetic constructor •() → iss::xxx
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field invalid-type XXX;
 static field dynamic extends;
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36647.dart.weak.transformed.expect
index 85c932b..457856a 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_36647_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "issue_36647_lib2.dart" as iss;
 additionalExports = (iss::xxx,
@@ -16,7 +16,7 @@
 export "org-dartlang-testcase:///issue_36647_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -67,19 +67,9 @@
 import "dart:core" as core;
 
 class xxx extends core::Object {
-  synthetic constructor •() → iss::xxx*
+  synthetic constructor •() → iss::xxx
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field invalid-type XXX;
 static field dynamic extends;
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart b/pkg/front_end/testcases/regress/issue_36647_2.dart
index 7b521e8..4096e59 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 export 'issue_36647_2_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline.expect
index a071c84..f3a511c 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 export 'issue_36647_2_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline_modelled.expect
index a071c84..f3a511c 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 export 'issue_36647_2_lib1.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect
index 79c30c6..94480a3 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue_36647_2_lib1.dart" as iss;
 additionalExports = (iss::foo,
@@ -9,7 +9,7 @@
 export "org-dartlang-testcase:///issue_36647_2_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -37,8 +37,8 @@
 import self as iss;
 import "dart:core" as core;
 
-typedef bar = () →* core::bool*;
-static field core::int* foo;
-static method baz() → core::int* {
+typedef bar = () → core::bool;
+static field core::int foo;
+static method baz() → core::int {
   return 42;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect
index 79c30c6..94480a3 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue_36647_2_lib1.dart" as iss;
 additionalExports = (iss::foo,
@@ -9,7 +9,7 @@
 export "org-dartlang-testcase:///issue_36647_2_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -37,8 +37,8 @@
 import self as iss;
 import "dart:core" as core;
 
-typedef bar = () →* core::bool*;
-static field core::int* foo;
-static method baz() → core::int* {
+typedef bar = () → core::bool;
+static field core::int foo;
+static method baz() → core::int {
   return 42;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.outline.expect
index e7ebe11..edf4524 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue_36647_2_lib1.dart" as iss;
 additionalExports = (iss::foo,
@@ -9,7 +9,7 @@
 export "org-dartlang-testcase:///issue_36647_2_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -37,7 +37,7 @@
 import self as iss;
 import "dart:core" as core;
 
-typedef bar = () →* core::bool*;
-static field core::int* foo;
-static method baz() → core::int*
+typedef bar = () → core::bool;
+static field core::int foo;
+static method baz() → core::int
   ;
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect
index 79c30c6..94480a3 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue_36647_2_lib1.dart" as iss;
 additionalExports = (iss::foo,
@@ -9,7 +9,7 @@
 export "org-dartlang-testcase:///issue_36647_2_lib1.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -37,8 +37,8 @@
 import self as iss;
 import "dart:core" as core;
 
-typedef bar = () →* core::bool*;
-static field core::int* foo;
-static method baz() → core::int* {
+typedef bar = () → core::bool;
+static field core::int foo;
+static method baz() → core::int {
   return 42;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36647_2_lib1.dart b/pkg/front_end/testcases/regress/issue_36647_2_lib1.dart
index 83b7e44..b2d8d4b 100644
--- a/pkg/front_end/testcases/regress/issue_36647_2_lib1.dart
+++ b/pkg/front_end/testcases/regress/issue_36647_2_lib1.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 int foo = 42;
 int foo = 43;
 typedef bool bar();
diff --git a/pkg/front_end/testcases/regress/issue_36647_lib1.dart b/pkg/front_end/testcases/regress/issue_36647_lib1.dart
index 5572e1c..4aef191 100644
--- a/pkg/front_end/testcases/regress/issue_36647_lib1.dart
+++ b/pkg/front_end/testcases/regress/issue_36647_lib1.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 export 'issue_36647_lib2.dart';
diff --git a/pkg/front_end/testcases/regress/issue_36647_lib2.dart b/pkg/front_end/testcases/regress/issue_36647_lib2.dart
index 0cbc933..3960141 100644
--- a/pkg/front_end/testcases/regress/issue_36647_lib2.dart
+++ b/pkg/front_end/testcases/regress/issue_36647_lib2.dart
@@ -1,6 +1,6 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 class xxx xx XXX extends XXX {
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart b/pkg/front_end/testcases/regress/issue_36669.dart
index 64295d2..1de6055 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart
+++ b/pkg/front_end/testcases/regress/issue_36669.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 class NoUnnamedConstructor {
   NoUnnamedConstructor._();
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline.expect
index 04ff88d..0dab00a 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class NoUnnamedConstructor {
   NoUnnamedConstructor._();
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline_modelled.expect
index 6fa6b0d..ea59ead 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo extends NoUnnamedConstructor with MixMeIn {}
 
 class MixMeIn {}
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36669.dart.weak.expect
index 2eec808..1886d36 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class NoUnnamedConstructor extends core::Object {
-  constructor _() → self::NoUnnamedConstructor*
+  constructor _() → self::NoUnnamedConstructor
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MixMeIn extends core::Object {
-  synthetic constructor •() → self::MixMeIn*
+  synthetic constructor •() → self::MixMeIn
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn = self::NoUnnamedConstructor with self::MixMeIn /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn*
+  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn
     : super self::NoUnnamedConstructor::_()
     ;
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect
index 2eec808..1886d36 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class NoUnnamedConstructor extends core::Object {
-  constructor _() → self::NoUnnamedConstructor*
+  constructor _() → self::NoUnnamedConstructor
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MixMeIn extends core::Object {
-  synthetic constructor •() → self::MixMeIn*
+  synthetic constructor •() → self::MixMeIn
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn = self::NoUnnamedConstructor with self::MixMeIn /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn*
+  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn
     : super self::NoUnnamedConstructor::_()
     ;
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_36669.dart.weak.outline.expect
index 2799c79..b335607 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.weak.outline.expect
@@ -1,41 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class NoUnnamedConstructor extends core::Object {
-  constructor _() → self::NoUnnamedConstructor*
+  constructor _() → self::NoUnnamedConstructor
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MixMeIn extends core::Object {
-  synthetic constructor •() → self::MixMeIn*
+  synthetic constructor •() → self::MixMeIn
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn = self::NoUnnamedConstructor with self::MixMeIn /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn*
+  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn
     : super self::NoUnnamedConstructor::_()
     ;
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36669.dart.weak.transformed.expect
index b37611c..1fb6d3a 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class NoUnnamedConstructor extends core::Object {
-  constructor _() → self::NoUnnamedConstructor*
+  constructor _() → self::NoUnnamedConstructor
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MixMeIn extends core::Object {
-  synthetic constructor •() → self::MixMeIn*
+  synthetic constructor •() → self::MixMeIn
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn extends self::NoUnnamedConstructor implements self::MixMeIn /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn*
+  synthetic constructor _() → self::_Foo&NoUnnamedConstructor&MixMeIn
     : super self::NoUnnamedConstructor::_()
     ;
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : invalid-initializer
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart b/pkg/front_end/testcases/regress/issue_36793.dart
index e5a48a0..1601a23 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart
+++ b/pkg/front_end/testcases/regress/issue_36793.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 const int y = 42;
 
 @y
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline.expect
index 6e9cb4c..b3d1993 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int y = 42;
 @y
 int x = 1;
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline_modelled.expect
index 6e9cb4c..b3d1993 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int y = 42;
 @y
 int x = 1;
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect
index ac733f1..4cb7705 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* y = #C1;
+static const field core::int y = #C1;
 @#C1
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic {
   core::print(#C1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect
index ac733f1..4cb7705 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* y = #C1;
+static const field core::int y = #C1;
 @#C1
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic {
   core::print(#C1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.outline.expect
index 8436fb3..307b5e7 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* y = 42;
+static const field core::int y = 42;
 @self::y
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect
index ac733f1..4cb7705 100644
--- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* y = #C1;
+static const field core::int y = #C1;
 @#C1
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic {
   core::print(#C1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart b/pkg/front_end/testcases/regress/issue_37285.dart
index 08673f3..6b5857d 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart
+++ b/pkg/front_end/testcases/regress/issue_37285.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for 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.9
+
 class C {
   C() : super()[];
 }
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_37285.dart.textual_outline.expect
index ff7918c..f2ce432 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C() : super()[];
 }
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.weak.expect b/pkg/front_end/testcases/regress/issue_37285.dart.weak.expect
index 84ceeef..a7c7118 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,22 +21,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect
index 84ceeef..a7c7118 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,22 +21,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_37285.dart.weak.outline.expect
index ffc4431..cceb0f2 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,18 +11,8 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37285.dart.weak.transformed.expect
index 84ceeef..a7c7118 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,22 +21,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •() → self::C*
+  constructor •() → self::C
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::C::•();
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart b/pkg/front_end/testcases/regress/issue_37681.dart
index c8cca5e..ca0cd8b 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart
+++ b/pkg/front_end/testcases/regress/issue_37681.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 main() async {
   int f_async() async { return 42; }
   print(await f_async());
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline_modelled.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
index 668dece..969857e 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,20 +19,20 @@
 import "dart:async" as asy;
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  function f_async() → core::int* async /* futureValueType= core::int* */ {
+  function f_async() → core::int async /* futureValueType= core::Object? */ {
     return 42;
   }
-  core::print(await f_async(){() →* core::int*});
-  function f_async_star() → core::int* async* {
+  core::print(await f_async(){() → core::int});
+  function f_async_star() → core::int async* {
     yield 42;
   }
-  await for (dynamic x in (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  await for (dynamic x in (f_async_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
     core::print(x);
   }
-  function f_sync_star() → core::int* sync* {
+  function f_sync_star() → core::int sync* {
     yield 42;
   }
-  for (dynamic x in (f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (dynamic x in (f_sync_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     core::print(x);
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
index 668dece..969857e 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,20 +19,20 @@
 import "dart:async" as asy;
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  function f_async() → core::int* async /* futureValueType= core::int* */ {
+  function f_async() → core::int async /* futureValueType= core::Object? */ {
     return 42;
   }
-  core::print(await f_async(){() →* core::int*});
-  function f_async_star() → core::int* async* {
+  core::print(await f_async(){() → core::int});
+  function f_async_star() → core::int async* {
     yield 42;
   }
-  await for (dynamic x in (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  await for (dynamic x in (f_async_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
     core::print(x);
   }
-  function f_sync_star() → core::int* sync* {
+  function f_sync_star() → core::int sync* {
     yield 42;
   }
-  for (dynamic x in (f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (dynamic x in (f_sync_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     core::print(x);
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.outline.expect
index b3304ef..074fe5d 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic async 
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
index 9edac46..3e8045c 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,12 +20,12 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -35,13 +35,13 @@
     try {
       #L1:
       {
-        function f_async() → core::int* /* futureValueType= core::int* */ /* originally async */ {
-          final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+        function f_async() → core::int /* futureValueType= core::Object? */ /* originally async */ {
+          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           dynamic :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
+          (dynamic) → dynamic :async_op_then;
+          (core::Object, core::StackTrace) → dynamic :async_op_error;
+          core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
@@ -53,23 +53,23 @@
               asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
               asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<core::int*>(:result_or_exception));
-        function f_async_star() → core::int* /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>* :controller;
+        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() → core::int}, :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::int>(:result_or_exception));
+        function f_async_star() → core::int /* originally async* */ {
+          asy::_AsyncStarStreamController<dynamic>? :controller;
           dynamic :controller_stream;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
+          (dynamic) → dynamic :async_op_then;
+          (core::Object, core::StackTrace) → dynamic :async_op_error;
+          core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
@@ -85,7 +85,7 @@
                 }
                 return;
               }
-              on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
                 :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
               }
             finally {
@@ -98,8 +98,8 @@
           return :controller_stream;
         }
         {
-          asy::Stream<dynamic>* :stream = (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          asy::Stream<dynamic> :stream = (f_async_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
+          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
             #L4:
             while (true) {
@@ -120,11 +120,11 @@
               :result_or_exception;
             }
         }
-        function f_sync_star() → core::int* /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-            core::int* :await_jump_var = 0;
+        function f_sync_star() → core::int /* originally sync* */ {
+          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+            core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
               {
                 {
                   :iterator.{core::_SyncIterator::_current} = 42;
@@ -138,7 +138,7 @@
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
         }
         {
-          core::Iterator<dynamic>* :sync-for-iterator = ((f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+          core::Iterator<dynamic> :sync-for-iterator = ((f_sync_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
             dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
             {
@@ -150,12 +150,12 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart b/pkg/front_end/testcases/regress/issue_39040.dart
index 4cb5870..0232245 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart
+++ b/pkg/front_end/testcases/regress/issue_39040.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 void main() {
   List<String> whereWasI = [];
   int outer = 1;
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline.expect
index 864efbe..ab73b3a 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 void main() {}
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline_modelled.expect
index 864efbe..ab73b3a 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 void main() {}
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
index ade6db2..97e5537 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
-  core::List<core::String*>* whereWasI = <core::String*>[];
-  core::int* outer = 1;
-  core::int* inner = 0;
+  core::List<core::String> whereWasI = <core::String>[];
+  core::int outer = 1;
+  core::int inner = 0;
   #L1:
   switch(outer) {
     #L2:
     case #C1:
       {
-        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
+        whereWasI.{core::List::add}("outer 0"){(core::String) → void};
         break #L1;
       }
     #L3:
@@ -22,19 +22,19 @@
             #L4:
             case #C1:
               {
-                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 0"){(core::String) → void};
                 continue #L5;
               }
             #L5:
             case #C2:
               {
-                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 1"){(core::String) → void};
               }
           }
-        })(){() →* Null};
+        })(){() → Null};
       }
   }
-  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
+  if(!(whereWasI.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 2) || !(whereWasI.{core::List::[]}(0){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 1")) {
     throw "Unexpected path.";
   }
   core::print(whereWasI);
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect
index ade6db2..97e5537 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
-  core::List<core::String*>* whereWasI = <core::String*>[];
-  core::int* outer = 1;
-  core::int* inner = 0;
+  core::List<core::String> whereWasI = <core::String>[];
+  core::int outer = 1;
+  core::int inner = 0;
   #L1:
   switch(outer) {
     #L2:
     case #C1:
       {
-        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
+        whereWasI.{core::List::add}("outer 0"){(core::String) → void};
         break #L1;
       }
     #L3:
@@ -22,19 +22,19 @@
             #L4:
             case #C1:
               {
-                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 0"){(core::String) → void};
                 continue #L5;
               }
             #L5:
             case #C2:
               {
-                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 1"){(core::String) → void};
               }
           }
-        })(){() →* Null};
+        })(){() → Null};
       }
   }
-  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
+  if(!(whereWasI.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 2) || !(whereWasI.{core::List::[]}(0){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 1")) {
     throw "Unexpected path.";
   }
   core::print(whereWasI);
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.outline.expect
index 2982c48..684454e 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → void
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
index 86da00b..41c539c 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
-  core::List<core::String*>* whereWasI = core::_GrowableList::•<core::String*>(0);
-  core::int* outer = 1;
-  core::int* inner = 0;
+  core::List<core::String> whereWasI = core::_GrowableList::•<core::String>(0);
+  core::int outer = 1;
+  core::int inner = 0;
   #L1:
   switch(outer) {
     #L2:
     case #C1:
       {
-        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
+        whereWasI.{core::List::add}("outer 0"){(core::String) → void};
         break #L1;
       }
     #L3:
@@ -22,19 +22,19 @@
             #L4:
             case #C1:
               {
-                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 0"){(core::String) → void};
                 continue #L5;
               }
             #L5:
             case #C2:
               {
-                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
+                whereWasI.{core::List::add}("inner 1"){(core::String) → void};
               }
           }
-        })(){() →* Null};
+        })(){() → Null};
       }
   }
-  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
+  if(!(whereWasI.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 2) || !(whereWasI.{core::List::[]}(0){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 1")) {
     throw "Unexpected path.";
   }
   core::print(whereWasI);
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart b/pkg/front_end/testcases/regress/issue_39091_1.dart
index 2a15740..00a65ee 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 hello
\ No newline at end of file
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.textual_outline.expect
index 6f45439..943e3f5 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 hello;
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.expect
index c414477..a3950aa 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect
index c414477..a3950aa 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.outline.expect
index c414477..a3950aa 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.transformed.expect
index c414477..a3950aa 100644
--- a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/regress/issue_39091_2.dart b/pkg/front_end/testcases/regress/issue_39091_2.dart
index f401961..437ef6e 100644
--- a/pkg/front_end/testcases/regress/issue_39091_2.dart
+++ b/pkg/front_end/testcases/regress/issue_39091_2.dart
@@ -1,7 +1,7 @@
 ﻿﻿// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 main() {
 "﻿";  /*æøå*/ "﻿";
 "﻿";
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart b/pkg/front_end/testcases/regress/issue_39682.dart
index 63edd14..117d0d4 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart
+++ b/pkg/front_end/testcases/regress/issue_39682.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 import "issue_39682_lib.dart" deferred as foo;
 
 main() {
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline.expect
index e7a1ec4..1d2a6fb 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_39682_lib.dart" deferred as foo;
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline_modelled.expect
index 4ab8bb5..ea21c2f 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_39682_lib.dart" deferred as foo;
 
 String __loadLibrary_foo() {}
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
index 9866587..6102c74 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,17 +6,17 @@
 import "org-dartlang-testcase:///issue_39682_lib.dart" deferred as foo;
 
 static method main() → dynamic {
-  () →* asy::Future<dynamic>* f = #C1;
-  f(){() →* asy::Future<dynamic>*};
+  () → asy::Future<dynamic> f = #C1;
+  f(){() → asy::Future<dynamic>};
   core::print(self::__loadLibrary_foo());
 }
-static method __loadLibrary_foo() → core::String* {
+static method __loadLibrary_foo() → core::String {
   return "I'll call my methods what I want!";
 }
-static method _#loadLibrary_foo() → asy::Future<dynamic>*
+static method _#loadLibrary_foo() → asy::Future<dynamic>
   return LoadLibrary(foo);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect
index 9866587..6102c74 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,17 +6,17 @@
 import "org-dartlang-testcase:///issue_39682_lib.dart" deferred as foo;
 
 static method main() → dynamic {
-  () →* asy::Future<dynamic>* f = #C1;
-  f(){() →* asy::Future<dynamic>*};
+  () → asy::Future<dynamic> f = #C1;
+  f(){() → asy::Future<dynamic>};
   core::print(self::__loadLibrary_foo());
 }
-static method __loadLibrary_foo() → core::String* {
+static method __loadLibrary_foo() → core::String {
   return "I'll call my methods what I want!";
 }
-static method _#loadLibrary_foo() → asy::Future<dynamic>*
+static method _#loadLibrary_foo() → asy::Future<dynamic>
   return LoadLibrary(foo);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.outline.expect
index bd418bb..4776c67 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,10 +6,10 @@
 
 static method main() → dynamic
   ;
-static method __loadLibrary_foo() → core::String*
+static method __loadLibrary_foo() → core::String
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
index 9866587..6102c74 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,17 +6,17 @@
 import "org-dartlang-testcase:///issue_39682_lib.dart" deferred as foo;
 
 static method main() → dynamic {
-  () →* asy::Future<dynamic>* f = #C1;
-  f(){() →* asy::Future<dynamic>*};
+  () → asy::Future<dynamic> f = #C1;
+  f(){() → asy::Future<dynamic>};
   core::print(self::__loadLibrary_foo());
 }
-static method __loadLibrary_foo() → core::String* {
+static method __loadLibrary_foo() → core::String {
   return "I'll call my methods what I want!";
 }
-static method _#loadLibrary_foo() → asy::Future<dynamic>*
+static method _#loadLibrary_foo() → asy::Future<dynamic>
   return LoadLibrary(foo);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_39682_lib.dart b/pkg/front_end/testcases/regress/issue_39682_lib.dart
index 721f173..7a16b65 100644
--- a/pkg/front_end/testcases/regress/issue_39682_lib.dart
+++ b/pkg/front_end/testcases/regress/issue_39682_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
-// @dart=2.9
+
 foo() {
   print("foo!");
 }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart b/pkg/front_end/testcases/regress/issue_42423.dart
index 3d58bc3..094bb14 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart
+++ b/pkg/front_end/testcases/regress/issue_42423.dart
@@ -1,7 +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.9
+
 import 'package:expect/expect.dart';
 
 test1(dynamic stringList) {
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline.expect
index ac29037..f8a2a21 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 test1(dynamic stringList) {}
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline_modelled.expect
index 69999c2..012ca7c 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
index f4dba33..d75de94 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -7,49 +7,49 @@
 import "package:expect/expect.dart";
 
 static method test1(dynamic stringList) → dynamic {
-  core::Set<core::int*>* intSet = block {
-    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
-    final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::Set<core::int> intSet = block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t2 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t2 == null))
-      for (final has-declared-initializer dynamic #t3 in #t2) {
-        final core::int* #t4 = #t3 as{TypeError} core::int*;
-        #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
+      for (final has-declared-initializer dynamic #t3 in #t2{core::Iterable<dynamic>}) {
+        final core::int #t4 = #t3 as{TypeError,ForNonNullableByDefault} core::int;
+        #t1.{core::Set::add}{Invariant}(#t4){(core::int) → core::bool};
       }
   } =>#t1;
 }
 static method test2(dynamic stringList) → dynamic {
-  core::List<core::int*>* intList = block {
-    final core::List<core::int*>* #t5 = <core::int*>[];
-    final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::List<core::int> intList = block {
+    final core::List<core::int> #t5 = <core::int>[];
+    final core::Iterable<dynamic>? #t6 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t6 == null))
-      for (final has-declared-initializer dynamic #t7 in #t6) {
-        final core::int* #t8 = #t7 as{TypeError} core::int*;
-        #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
+      for (final has-declared-initializer dynamic #t7 in #t6{core::Iterable<dynamic>}) {
+        final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+        #t5.{core::List::add}{Invariant}(#t8){(core::int) → void};
       }
   } =>#t5;
 }
 static method test3(dynamic stringMap) → dynamic {
-  core::Map<core::int*, core::int*>* intMap = block {
-    final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
-    final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
+  core::Map<core::int, core::int> intMap = block {
+    final core::Map<core::int, core::int> #t9 = <core::int, core::int>{};
+    final core::Map<dynamic, dynamic>? #t10 = stringMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>?;
     if(!(#t10 == null))
-      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
-        final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
-        final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-        #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t11 in #t10{core::Map<dynamic, dynamic>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}) {
+        final core::int #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+        final core::int #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+        #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int, core::int) → void};
       }
   } =>#t9;
 }
 static method main() → dynamic {
-  dynamic stringList = <core::String*>["string"];
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringList = <core::String>["string"];
+  exp::Expect::throwsTypeError(() → void {
     self::test1(stringList);
   });
-  exp::Expect::throwsTypeError(() → Null {
+  exp::Expect::throwsTypeError(() → void {
     self::test2(stringList);
   });
-  dynamic stringMap = <core::String*, core::String*>{"a": "b"};
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringMap = <core::String, core::String>{"a": "b"};
+  exp::Expect::throwsTypeError(() → void {
     self::test3(stringMap);
   });
 }
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
index f4dba33..d75de94 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -7,49 +7,49 @@
 import "package:expect/expect.dart";
 
 static method test1(dynamic stringList) → dynamic {
-  core::Set<core::int*>* intSet = block {
-    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
-    final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::Set<core::int> intSet = block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t2 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t2 == null))
-      for (final has-declared-initializer dynamic #t3 in #t2) {
-        final core::int* #t4 = #t3 as{TypeError} core::int*;
-        #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
+      for (final has-declared-initializer dynamic #t3 in #t2{core::Iterable<dynamic>}) {
+        final core::int #t4 = #t3 as{TypeError,ForNonNullableByDefault} core::int;
+        #t1.{core::Set::add}{Invariant}(#t4){(core::int) → core::bool};
       }
   } =>#t1;
 }
 static method test2(dynamic stringList) → dynamic {
-  core::List<core::int*>* intList = block {
-    final core::List<core::int*>* #t5 = <core::int*>[];
-    final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::List<core::int> intList = block {
+    final core::List<core::int> #t5 = <core::int>[];
+    final core::Iterable<dynamic>? #t6 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t6 == null))
-      for (final has-declared-initializer dynamic #t7 in #t6) {
-        final core::int* #t8 = #t7 as{TypeError} core::int*;
-        #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
+      for (final has-declared-initializer dynamic #t7 in #t6{core::Iterable<dynamic>}) {
+        final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+        #t5.{core::List::add}{Invariant}(#t8){(core::int) → void};
       }
   } =>#t5;
 }
 static method test3(dynamic stringMap) → dynamic {
-  core::Map<core::int*, core::int*>* intMap = block {
-    final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
-    final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
+  core::Map<core::int, core::int> intMap = block {
+    final core::Map<core::int, core::int> #t9 = <core::int, core::int>{};
+    final core::Map<dynamic, dynamic>? #t10 = stringMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>?;
     if(!(#t10 == null))
-      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
-        final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
-        final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-        #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t11 in #t10{core::Map<dynamic, dynamic>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}) {
+        final core::int #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+        final core::int #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+        #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int, core::int) → void};
       }
   } =>#t9;
 }
 static method main() → dynamic {
-  dynamic stringList = <core::String*>["string"];
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringList = <core::String>["string"];
+  exp::Expect::throwsTypeError(() → void {
     self::test1(stringList);
   });
-  exp::Expect::throwsTypeError(() → Null {
+  exp::Expect::throwsTypeError(() → void {
     self::test2(stringList);
   });
-  dynamic stringMap = <core::String*, core::String*>{"a": "b"};
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringMap = <core::String, core::String>{"a": "b"};
+  exp::Expect::throwsTypeError(() → void {
     self::test3(stringMap);
   });
 }
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.outline.expect
index 0ed79c5..03d8196 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:expect/expect.dart";
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
index 2fb8e72..2400154 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -7,64 +7,64 @@
 import "package:expect/expect.dart";
 
 static method test1(dynamic stringList) → dynamic {
-  core::Set<core::int*>* intSet = block {
-    final core::Set<core::int*>* #t1 = new col::_CompactLinkedHashSet::•<core::int*>();
-    final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::Set<core::int> intSet = block {
+    final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t2 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t2 == null)) {
-      core::Iterator<dynamic>* :sync-for-iterator = #t2.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = #t2{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final core::int* #t4 = #t3 as{TypeError} core::int*;
-          #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
+          final core::int #t4 = #t3 as{TypeError,ForNonNullableByDefault} core::int;
+          #t1.{core::Set::add}{Invariant}(#t4){(core::int) → core::bool};
         }
       }
     }
   } =>#t1;
 }
 static method test2(dynamic stringList) → dynamic {
-  core::List<core::int*>* intList = block {
-    final core::List<core::int*>* #t5 = core::_GrowableList::•<core::int*>(0);
-    final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  core::List<core::int> intList = block {
+    final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
+    final core::Iterable<dynamic>? #t6 = stringList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t6 == null)) {
-      core::Iterator<dynamic>* :sync-for-iterator = #t6.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = #t6{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          final core::int* #t8 = #t7 as{TypeError} core::int*;
-          #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
+          final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+          #t5.{core::List::add}{Invariant}(#t8){(core::int) → void};
         }
       }
     }
   } =>#t5;
 }
 static method test3(dynamic stringMap) → dynamic {
-  core::Map<core::int*, core::int*>* intMap = block {
-    final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
-    final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
+  core::Map<core::int, core::int> intMap = block {
+    final core::Map<core::int, core::int> #t9 = <core::int, core::int>{};
+    final core::Map<dynamic, dynamic>? #t10 = stringMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>?;
     if(!(#t10 == null)) {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t10{core::Map<dynamic, dynamic>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, dynamic>* #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
+        final core::MapEntry<dynamic, dynamic> #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
         {
-          final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
-          final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
-          #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
+          final core::int #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+          final core::int #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+          #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int, core::int) → void};
         }
       }
     }
   } =>#t9;
 }
 static method main() → dynamic {
-  dynamic stringList = core::_GrowableList::_literal1<core::String*>("string");
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringList = core::_GrowableList::_literal1<core::String>("string");
+  exp::Expect::throwsTypeError(() → void {
     self::test1(stringList);
   });
-  exp::Expect::throwsTypeError(() → Null {
+  exp::Expect::throwsTypeError(() → void {
     self::test2(stringList);
   });
-  dynamic stringMap = <core::String*, core::String*>{"a": "b"};
-  exp::Expect::throwsTypeError(() → Null {
+  dynamic stringMap = <core::String, core::String>{"a": "b"};
+  exp::Expect::throwsTypeError(() → void {
     self::test3(stringMap);
   });
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart b/pkg/front_end/testcases/runtime_checks/call_kinds.dart
index 7422040..2aba871 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -9,7 +9,7 @@
 
 class C {
   void f() {}
-  F get g => null;
+  F get g => throw '';
   dynamic get h => null;
   void test() {
     // Call via this
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline.expect
index 6098d60..e2383b2 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 library test;
 
 typedef void F();
 
 class C {
   void f() {}
-  F get g => null;
+  F get g => throw '';
   dynamic get h => null;
   void test() {}
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline_modelled.expect
index 7f28360..4e82015 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  F get g => null;
+  F get g => throw '';
   dynamic get h => null;
   void f() {}
   void test() {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
index d6a32ed..00dcc6e 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
@@ -1,42 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
+typedef F = () → void;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  get g() → () →* void
-    return null;
+  get g() → () → void
+    return throw "";
   get h() → dynamic
     return null;
   method test() → void {
-    this.{self::C::f}(){() →* void};
-    this.{self::C::f}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
     this.{self::C::h}{dynamic}{dynamic}.call();
     this.{self::C::h}{dynamic}{dynamic}.call();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, () →* void f, dynamic d) → void {
-  c.{self::C::f}(){() →* void};
-  f(){() →* void};
+static method test(self::C c, () → void f, dynamic d) → void {
+  c.{self::C::f}(){() → void};
+  f(){() → void};
   d{dynamic}.call();
   d{dynamic}.f();
-  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::g}{() → void}(){() → void};
   c.{self::C::h}{dynamic}{dynamic}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect
index d6a32ed..00dcc6e 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect
@@ -1,42 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
+typedef F = () → void;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  get g() → () →* void
-    return null;
+  get g() → () → void
+    return throw "";
   get h() → dynamic
     return null;
   method test() → void {
-    this.{self::C::f}(){() →* void};
-    this.{self::C::f}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
     this.{self::C::h}{dynamic}{dynamic}.call();
     this.{self::C::h}{dynamic}{dynamic}.call();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, () →* void f, dynamic d) → void {
-  c.{self::C::f}(){() →* void};
-  f(){() →* void};
+static method test(self::C c, () → void f, dynamic d) → void {
+  c.{self::C::f}(){() → void};
+  f(){() → void};
   d{dynamic}.call();
   d{dynamic}.f();
-  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::g}{() → void}(){() → void};
   c.{self::C::h}{dynamic}{dynamic}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.outline.expect
index 148021d..d1ff2cb 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
+typedef F = () → void;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method f() → void
     ;
-  get g() → () →* void
+  get g() → () → void
     ;
   get h() → dynamic
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, () →* void f, dynamic d) → void
+static method test(self::C c, () → void f, dynamic d) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
index d6a32ed..00dcc6e 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
@@ -1,42 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
+typedef F = () → void;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  get g() → () →* void
-    return null;
+  get g() → () → void
+    return throw "";
   get h() → dynamic
     return null;
   method test() → void {
-    this.{self::C::f}(){() →* void};
-    this.{self::C::f}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
-    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::f}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
+    this.{self::C::g}{() → void}(){() → void};
     this.{self::C::h}{dynamic}{dynamic}.call();
     this.{self::C::h}{dynamic}{dynamic}.call();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, () →* void f, dynamic d) → void {
-  c.{self::C::f}(){() →* void};
-  f(){() →* void};
+static method test(self::C c, () → void f, dynamic d) → void {
+  c.{self::C::f}(){() → void};
+  f(){() → void};
   d{dynamic}.call();
   d{dynamic}.f();
-  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::g}{() → void}(){() → void};
   c.{self::C::h}{dynamic}{dynamic}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart
index 81ff2c2..ed8556e 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline.expect
index 6eb1323..aaf824e 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline_modelled.expect
index 69519b0..588c9cd 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
index 96f9b35..e3ccdac 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
@@ -15,18 +15,8 @@
     dynamic v3 = this.{self::C::y}{dynamic};
     dynamic v4 = this.{self::C::y}{dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   dynamic v1 = c.{self::C::x}{dynamic};
   dynamic v2 = c.{self::C::y}{dynamic};
   dynamic v3 = d{dynamic}.x;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect
index 96f9b35..e3ccdac 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
@@ -15,18 +15,8 @@
     dynamic v3 = this.{self::C::y}{dynamic};
     dynamic v4 = this.{self::C::y}{dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   dynamic v1 = c.{self::C::x}{dynamic};
   dynamic v2 = c.{self::C::y}{dynamic};
   dynamic v3 = d{dynamic}.x;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.outline.expect
index e330688..49a467d 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   get x() → dynamic
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void
+static method test(self::C c, dynamic d) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
index 96f9b35..e3ccdac 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
@@ -15,18 +15,8 @@
     dynamic v3 = this.{self::C::y}{dynamic};
     dynamic v4 = this.{self::C::y}{dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   dynamic v1 = c.{self::C::x}{dynamic};
   dynamic v2 = c.{self::C::y}{dynamic};
   dynamic v3 = d{dynamic}.x;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart
index e14b4f2..2072ab6 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline.expect
index b8d22a2..c96f079 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline_modelled.expect
index cbf6b63..1ea93b3 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
index a78157b..902122f 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
@@ -14,18 +14,8 @@
     this.{self::C::y} = null;
     this.{self::C::y} = null;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   c.{self::C::x} = null;
   c.{self::C::y} = null;
   d{dynamic}.x = null;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect
index a78157b..902122f 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
@@ -14,18 +14,8 @@
     this.{self::C::y} = null;
     this.{self::C::y} = null;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   c.{self::C::x} = null;
   c.{self::C::y} = null;
   d{dynamic}.x = null;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.outline.expect
index 183ccaa..d2f6916 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   set x(dynamic value) → void
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void
+static method test(self::C c, dynamic d) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
index a78157b..902122f 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
@@ -14,18 +14,8 @@
     this.{self::C::y} = null;
     this.{self::C::y} = null;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c, dynamic d) → void {
+static method test(self::C c, dynamic d) → void {
   c.{self::C::x} = null;
   c.{self::C::y} = null;
   d{dynamic}.x = null;
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart
index 9c79ba9..1ea9483 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline.expect
index ac57e71..acd8a15 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline_modelled.expect
index ac57e71..acd8a15 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
index bffdb53..fc1fdf8 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  () → void x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect
index bffdb53..fc1fdf8 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  () → void x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.outline.expect
index 950f95a..9c2d471 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method call() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
index bffdb53..fc1fdf8 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  () → void x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart
index 5ffb89a..b2320f9 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline.expect
index ea8a339..c9eba70 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline_modelled.expect
index ea8a339..c9eba70 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
index edf5d5c..955ecec 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  FutureOr<() → void>x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect
index edf5d5c..955ecec 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  FutureOr<() → void>x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.outline.expect
index 5e63eb8..29372cb 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method call() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
index edf5d5c..955ecec 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method call() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+  FutureOr<() → void>x = let final self::C #t1 = new self::C::•() in #t1 == null ?{() → void} null : #t1.{self::C::call}{() → void};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart
index bfc499c..527eb16 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart
@@ -1,21 +1,21 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f() {
     var x = this.y;
   }
 }
 
 void g(C<num> c) {
-  var x = c. /*@ checkReturn=(num*) ->* void */ y;
+  var x = c. /*@checkReturn=(num) -> void*/ y;
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline.expect
index 2f4bdf3..adad7ee 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline_modelled.expect
index 24309e5..eb32d9a 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
index 2142878..cb46be7 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
+    (self::C::T%) → void x = this.{self::C::y}{(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect
index 2142878..cb46be7 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
+    (self::C::T%) → void x = this.{self::C::y}{(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.outline.expect
index 3902b3d..7400122 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
   method f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void
+static method g(self::C<core::num> c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
index 2142878..cb46be7 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
+    (self::C::T%) → void x = this.{self::C::y}{(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart
index 5a55bde..9ca3747 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline.expect
index 01ca255..3bc94cd 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
index d63adb1..d45149c 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
index 3e9cb61..26d4967 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T*) →* void>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends (self::C::T%) → void>(self::C::f::U x) → void {}
 }
-static method g(self::C<core::num*>* c) → void {
-  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
+static method g(self::C<core::num> c) → void {
+  c.{self::C::f}<(core::Object) → void>((core::Object o) → void {}){((core::Object) → void) → void};
 }
 static method test() → void {
-  self::g(new self::C::•<core::int*>());
+  self::g(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect
index 3e9cb61..26d4967 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T*) →* void>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends (self::C::T%) → void>(self::C::f::U x) → void {}
 }
-static method g(self::C<core::num*>* c) → void {
-  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
+static method g(self::C<core::num> c) → void {
+  c.{self::C::f}<(core::Object) → void>((core::Object o) → void {}){((core::Object) → void) → void};
 }
 static method test() → void {
-  self::g(new self::C::•<core::int*>());
+  self::g(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.outline.expect
index 713c4b7..ad1ea5d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<U extends (self::C::T*) →* void>(self::C::f::U* x) → void
+  method f<U extends (self::C::T%) → void>(self::C::f::U x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void
+static method g(self::C<core::num> c) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
index 3e9cb61..26d4967 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends (self::C::T*) →* void>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends (self::C::T%) → void>(self::C::f::U x) → void {}
 }
-static method g(self::C<core::num*>* c) → void {
-  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
+static method g(self::C<core::num> c) → void {
+  c.{self::C::f}<(core::Object) → void>((core::Object o) → void {}){((core::Object) → void) → void};
 }
 static method test() → void {
-  self::g(new self::C::•<core::int*>());
+  self::g(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart
index 33868c9..e594ea7 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart
@@ -1,32 +1,32 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> f1() {}
+  F<T> f1() => throw '';
   List<F<T>> f2() {
     return [this.f1()];
   }
 }
 
 void g1(C<num> c) {
-  var x = c.f1 /*@ checkReturn=(num*) ->* void */ ();
+  var x = c.f1 /*@checkReturn=(num) -> void*/ ();
   print('hello');
   x(1.5);
 }
 
 void g2(C<num> c) {
-  F<int> x = c.f1 /*@ checkReturn=(num*) ->* void */ ();
+  F<int> x = c.f1 /*@checkReturn=(num) -> void*/ ();
   x(1);
 }
 
 void g3(C<num> c) {
-  var x = c.f2 /*@ checkReturn=List<(num*) ->* void>* */ ();
+  var x = c.f2 /*@checkReturn=List<(num) -> void>*/ ();
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline.expect
index 4971ed6..d5b36e2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> f1() {}
+  F<T> f1() => throw '';
   List<F<T>> f2() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline_modelled.expect
index 3ed7c2d..05f1ee3 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  F<T> f1() {}
+  F<T> f1() => throw '';
   List<F<T>> f2() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
index a1cb113..6e1c923 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
@@ -1,37 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1() → (self::C::T*) →* void {}
-  method f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}(){() → (self::C::T%) → void}];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect
index a1cb113..6e1c923 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect
@@ -1,37 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1() → (self::C::T*) →* void {}
-  method f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}(){() → (self::C::T%) → void}];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.outline.expect
index ae504e7..08ea945 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f1() → (self::C::T*) →* void
+  method f1() → (self::C::T%) → void
     ;
-  method f2() → core::List<(self::C::T*) →* void>*
+  method f2() → core::List<(self::C::T%) → void>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void
+static method g1(self::C<core::num> c) → void
   ;
-static method g2(self::C<core::num*>* c) → void
+static method g2(self::C<core::num> c) → void
   ;
-static method g3(self::C<core::num*>* c) → void
+static method g3(self::C<core::num> c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
index 5c0c338..ed1c81f 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
@@ -1,37 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1() → (self::C::T*) →* void {}
-  method f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}(){() →* (self::C::T*) →* void});
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return core::_GrowableList::_literal1<(self::C::T%) → void>(this.{self::C::f1}(){() → (self::C::T%) → void});
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart
index bdde6a5..94668c3 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -15,18 +17,18 @@
 }
 
 void g1(C<num> c) {
-  var x = c?.f1 /*@ checkReturn=(num*) ->* void */ ();
+  var x = c?.f1 /*@checkReturn=(num*) ->* void*/ ();
   print('hello');
   x(1.5);
 }
 
 void g2(C<num> c) {
-  F<int> x = c?.f1 /*@ checkReturn=(num*) ->* void */ ();
+  F<int> x = c?.f1 /*@checkReturn=(num*) ->* void*/ ();
   x(1);
 }
 
 void g3(C<num> c) {
-  var x = c?.f2 /*@ checkReturn=List<(num*) ->* void>* */ ();
+  var x = c?.f2 /*@checkReturn=List<(num*) ->* void>**/ ();
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart
new file mode 100644
index 0000000..39583a2
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart
@@ -0,0 +1,32 @@
+// 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.
+
+/*@testedFeatures=checks*/
+library test;
+
+typedef void F<T>(T x);
+
+class C<T> {
+  F<T> f1() => throw '';
+  List<F<T>> f2() {
+    return [this?.f1()];
+  }
+}
+
+void g1(C<num>? c) {
+  var x = c?.f1 /*@checkReturn=(num) -> void*/ ();
+  print('hello');
+  x?.call(1.5);
+}
+
+void g2(C<num>? c) {
+  F<int>? x = c?.f1 /*@checkReturn=(num) -> void*/ ();
+  x?.call(1);
+}
+
+void g3(C<num>? c) {
+  var x = c?.f2 /*@checkReturn=List<(num) -> void>*/ ();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..34dcf8e
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+typedef void F<T>(T x);
+
+class C<T> {
+  F<T> f1() => throw '';
+  List<F<T>> f2() {}
+}
+
+void g1(C<num>? c) {}
+void g2(C<num>? c) {}
+void g3(C<num>? c) {}
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f4e23e8
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+library test;
+
+class C<T> {
+  F<T> f1() => throw '';
+  List<F<T>> f2() {}
+}
+
+typedef void F<T>(T x);
+void g1(C<num>? c) {}
+void g2(C<num>? c) {}
+void g3(C<num>? c) {}
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.expect
new file mode 100644
index 0000000..dd20162
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1()];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}(){() → (self::C::T%) → void}];
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..dd20162
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1()];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}(){() → (self::C::T%) → void}];
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..7365f0d
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    ;
+  method f1() → (self::C::T%) → void
+    ;
+  method f2() → core::List<(self::C::T%) → void>
+    ;
+}
+static method g1(self::C<core::num>? c) → void
+  ;
+static method g2(self::C<core::num>? c) → void
+  ;
+static method g3(self::C<core::num>? c) → void
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..f5a0662
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1()];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method f1() → (self::C::T%) → void
+    return throw "";
+  method f2() → core::List<(self::C::T%) → void> {
+    return core::_GrowableList::_literal1<(self::C::T%) → void>(this.{self::C::f1}(){() → (self::C::T%) → void});
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}(){() → core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart
index ec99cae..4b202f2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -15,7 +15,7 @@
 }
 
 G<num> g(C<num> c) {
-  return c. /*@ checkReturn=() ->* (num*) ->* void */ f;
+  return c. /*@checkReturn=() -> (num) -> void*/ f;
 }
 
 void h(int i) {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline.expect
index 96eabed..950b57d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline_modelled.expect
index 0a9988b..ac397a4 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 G<num> g(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
index 3f796f1..f128147 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic> = () →* (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void _x;
-  constructor •((self::C::T*) →* void _x) → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic> = () → (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void _x;
+  constructor •((self::C::T%) → void _x) → self::C<self::C::T%>
     : self::C::_x = _x, super core::Object::•()
     ;
-  method f() → (self::C::T*) →* void
-    return this.{self::C::_x}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → (self::C::T%) → void
+    return this.{self::C::_x}{(self::C::T%) → void};
 }
-static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+static method g(self::C<core::num> c) → () → (core::num) → void {
+  return c.{self::C::f}{() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} () → (core::num) → void;
 }
-static method h(core::int* i) → void {
+static method h(core::int i) → void {
   core::print("${i}");
 }
 static method test() → void {
-  () →* (core::num*) →* void x = self::g(new self::C::•<core::int*>(#C1));
+  () → (core::num) → void x = self::g(new self::C::•<core::int>(#C1));
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect
index 3f796f1..f128147 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic> = () →* (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void _x;
-  constructor •((self::C::T*) →* void _x) → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic> = () → (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void _x;
+  constructor •((self::C::T%) → void _x) → self::C<self::C::T%>
     : self::C::_x = _x, super core::Object::•()
     ;
-  method f() → (self::C::T*) →* void
-    return this.{self::C::_x}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → (self::C::T%) → void
+    return this.{self::C::_x}{(self::C::T%) → void};
 }
-static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+static method g(self::C<core::num> c) → () → (core::num) → void {
+  return c.{self::C::f}{() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} () → (core::num) → void;
 }
-static method h(core::int* i) → void {
+static method h(core::int i) → void {
   core::print("${i}");
 }
 static method test() → void {
-  () →* (core::num*) →* void x = self::g(new self::C::•<core::int*>(#C1));
+  () → (core::num) → void x = self::g(new self::C::•<core::int>(#C1));
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.outline.expect
index 238d0af..853a041 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic> = () →* (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void _x;
-  constructor •((self::C::T*) →* void _x) → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic> = () → (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void _x;
+  constructor •((self::C::T%) → void _x) → self::C<self::C::T%>
     ;
-  method f() → (self::C::T*) →* void
+  method f() → (self::C::T%) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → () →* (core::num*) →* void
+static method g(self::C<core::num> c) → () → (core::num) → void
   ;
-static method h(core::int* i) → void
+static method h(core::int i) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
index 3f796f1..f128147 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic> = () →* (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void _x;
-  constructor •((self::C::T*) →* void _x) → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic> = () → (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void _x;
+  constructor •((self::C::T%) → void _x) → self::C<self::C::T%>
     : self::C::_x = _x, super core::Object::•()
     ;
-  method f() → (self::C::T*) →* void
-    return this.{self::C::_x}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → (self::C::T%) → void
+    return this.{self::C::_x}{(self::C::T%) → void};
 }
-static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+static method g(self::C<core::num> c) → () → (core::num) → void {
+  return c.{self::C::f}{() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} () → (core::num) → void;
 }
-static method h(core::int* i) → void {
+static method h(core::int i) → void {
   core::print("${i}");
 }
 static method test() → void {
-  () →* (core::num*) →* void x = self::g(new self::C::•<core::int*>(#C1));
+  () → (core::num) → void x = self::g(new self::C::•<core::int>(#C1));
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart
index f940dab..7141d55 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart
@@ -1,21 +1,21 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f(T value) {
     this.y(value);
   }
 }
 
 void g(C<num> c) {
-  c.y /*@ checkGetterReturn=(num*) ->* void */ (1.5);
+  c.y /*@checkGetterReturn=(num) -> void*/ (1.5);
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline.expect
index 385996d..a802dab 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f(T value) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline_modelled.expect
index 3120bc5..66f8603 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  F<T> y;
+  F<T> y = throw '';
   void f(T value) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
index d641b1f..749fd48 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* value) → void {
-    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% value) → void {
+    let final self::C::T% #t1 = value in this.{self::C::y}{(self::C::T%) → void}(#t1){(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
+static method g(self::C<core::num> c) → void {
+  let final self::C<core::num> #t2 = c in let final core::double #t3 = 1.5 in (#t2.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t3){(core::num) → void};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect
index d641b1f..749fd48 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* value) → void {
-    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% value) → void {
+    let final self::C::T% #t1 = value in this.{self::C::y}{(self::C::T%) → void}(#t1){(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
+static method g(self::C<core::num> c) → void {
+  let final self::C<core::num> #t2 = c in let final core::double #t3 = 1.5 in (#t2.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t3){(core::num) → void};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
index 84a11c2..4a4749d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f(covariant-by-class self::C::T* value) → void
+  method f(covariant-by-class self::C::T% value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void
+static method g(self::C<core::num> c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
index 66836cf..4872820 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field (self::C::T*) →* void y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field (self::C::T%) → void y = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* value) → void {
-    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% value) → void {
+    let final self::C::T% #t1 = value in this.{self::C::y}{(self::C::T%) → void}(#t1){(self::C::T%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
+static method g(self::C<core::num> c) → void {
+  let final self::C<core::num> #t2 = c in let final core::double #t3 = 1.5 in (#t2.{self::C::y}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t3){(core::num) → void};
 }
 static method main() → void {}
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_getter.dart:18:49 -> DoubleConstant(1.5)
-Extra constant evaluation: evaluated: 14, effectively constant: 1
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_getter.dart:18:45 -> DoubleConstant(1.5)
+Extra constant evaluation: evaluated: 15, effectively constant: 1
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart
index d8489b5..f005e46 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart
@@ -1,32 +1,32 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> get f1 => null;
+  F<T> get f1 => throw '';
   List<F<T>> get f2 {
     return [this.f1];
   }
 }
 
 void g1(C<num> c) {
-  var x = c. /*@ checkReturn=(num*) ->* void */ f1;
+  var x = c. /*@checkReturn=(num) -> void*/ f1;
   print('hello');
   x(1.5);
 }
 
 void g2(C<num> c) {
-  F<int> x = c. /*@ checkReturn=(num*) ->* void */ f1;
+  F<int> x = c. /*@checkReturn=(num) -> void*/ f1;
   x(1);
 }
 
 void g3(C<num> c) {
-  var x = c. /*@ checkReturn=List<(num*) ->* void>* */ f2;
+  var x = c. /*@checkReturn=List<(num) -> void>*/ f2;
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline.expect
index 2e2cd6e..185f54a 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> get f1 => null;
+  F<T> get f1 => throw '';
   List<F<T>> get f2 {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline_modelled.expect
index 3099710..d8b22d8 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  F<T> get f1 => null;
+  F<T> get f1 => throw '';
   List<F<T>> get f2 {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
index 60445df..72fd3d0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
@@ -1,38 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  get f1() → (self::C::T*) →* void
-    return null;
-  get f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}{(self::C::T%) → void}];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect
index 60445df..72fd3d0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect
@@ -1,38 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  get f1() → (self::C::T*) →* void
-    return null;
-  get f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}{(self::C::T%) → void}];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.outline.expect
index fe6232e..599f411 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  get f1() → (self::C::T*) →* void
+  get f1() → (self::C::T%) → void
     ;
-  get f2() → core::List<(self::C::T*) →* void>*
+  get f2() → core::List<(self::C::T%) → void>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void
+static method g1(self::C<core::num> c) → void
   ;
-static method g2(self::C<core::num*>* c) → void
+static method g2(self::C<core::num> c) → void
   ;
-static method g3(self::C<core::num*>* c) → void
+static method g3(self::C<core::num> c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
index 54d2c49..4b87ccb 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
@@ -1,38 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  get f1() → (self::C::T*) →* void
-    return null;
-  get f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}{(self::C::T*) →* void});
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return core::_GrowableList::_literal1<(self::C::T%) → void>(this.{self::C::f1}{(self::C::T%) → void});
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method g1(self::C<core::num> c) → void {
+  (core::num) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
   core::print("hello");
-  x(1.5){(core::num*) →* void};
+  x(1.5){(core::num) → void};
 }
-static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x(1){(core::int*) →* void};
+static method g2(self::C<core::num> c) → void {
+  (core::int) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  x(1){(core::int) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+static method g3(self::C<core::num> c) → void {
+  core::List<(core::num) → void> x = c.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart
index 8c0d561..b179484 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -15,18 +17,18 @@
 }
 
 void g1(C<num> c) {
-  var x = c?. /*@ checkReturn=(num*) ->* void */ f1;
+  var x = c?. /*@checkReturn=(num*) ->* void*/ f1;
   print('hello');
   x(1.5);
 }
 
 void g2(C<num> c) {
-  F<int> x = c?. /*@ checkReturn=(num*) ->* void */ f1;
+  F<int> x = c?. /*@checkReturn=(num*) ->* void*/ f1;
   x(1);
 }
 
 void g3(C<num> c) {
-  var x = c?. /*@ checkReturn=List<(num*) ->* void>* */ f2;
+  var x = c?. /*@checkReturn=List<(num*) ->* void>**/ f2;
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart
new file mode 100644
index 0000000..147c7e4
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart
@@ -0,0 +1,32 @@
+// 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.
+
+/*@testedFeatures=checks*/
+library test;
+
+typedef void F<T>(T x);
+
+class C<T> {
+  F<T> get f1 => throw '';
+  List<F<T>> get f2 {
+    return [this?.f1];
+  }
+}
+
+void g1(C<num>? c) {
+  var x = c?. /*@checkReturn=(num) -> void*/ f1;
+  print('hello');
+  x?.call(1.5);
+}
+
+void g2(C<num>? c) {
+  F<int>? x = c?. /*@checkReturn=(num) -> void*/ f1;
+  x?.call(1);
+}
+
+void g3(C<num>? c) {
+  var x = c?. /*@checkReturn=List<(num) -> void>*/ f2;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..3ba92ee
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+typedef void F<T>(T x);
+
+class C<T> {
+  F<T> get f1 => throw '';
+  List<F<T>> get f2 {}
+}
+
+void g1(C<num>? c) {}
+void g2(C<num>? c) {}
+void g3(C<num>? c) {}
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b94fc41
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+library test;
+
+class C<T> {
+  F<T> get f1 => throw '';
+  List<F<T>> get f2 {}
+}
+
+typedef void F<T>(T x);
+void g1(C<num>? c) {}
+void g2(C<num>? c) {}
+void g3(C<num>? c) {}
+void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.expect
new file mode 100644
index 0000000..4436169
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}{(self::C::T%) → void}];
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..4436169
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return <(self::C::T%) → void>[this.{self::C::f1}{(self::C::T%) → void}];
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..3e52552
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    ;
+  get f1() → (self::C::T%) → void
+    ;
+  get f2() → core::List<(self::C::T%) → void>
+    ;
+}
+static method g1(self::C<core::num>? c) → void
+  ;
+static method g2(self::C<core::num>? c) → void
+  ;
+static method g3(self::C<core::num>? c) → void
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..1564267
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware2.dart:13:13: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     return [this?.f1];
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get f1() → (self::C::T%) → void
+    return throw "";
+  get f2() → core::List<(self::C::T%) → void> {
+    return core::_GrowableList::_literal1<(self::C::T%) → void>(this.{self::C::f1}{(self::C::T%) → void});
+  }
+}
+static method g1(self::C<core::num>? c) → void {
+  (core::num) →? void x = let final self::C<core::num>? #t1 = c in #t1 == null ?{(core::num) →? void} null : #t1{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  core::print("hello");
+  let final (core::num) →? void #t2 = x in #t2 == null ?{void} null : #t2{(core::num) → void}(1.5){(core::num) → void};
+}
+static method g2(self::C<core::num>? c) → void {
+  (core::int) →? void x = let final self::C<core::num>? #t3 = c in #t3 == null ?{(core::num) →? void} null : #t3{self::C<core::num>}.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
+  let final (core::int) →? void #t4 = x in #t4 == null ?{void} null : #t4{(core::int) → void}(1){(core::int) → void};
+}
+static method g3(self::C<core::num>? c) → void {
+  core::List<(core::num) → void>? x = let final self::C<core::num>? #t5 = c in #t5 == null ?{core::List<(core::num) → void>?} null : #t5{self::C<core::num>}.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart
index 07ef302..ec30f9e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline.expect
index d5b5708..066813e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
index 0cea1b9..0bbb372 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
index 23d142c..6dddee6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,32 +15,22 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  method g1<covariant-by-class U extends self::C::T*>() → void {
-    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
+  method g1<covariant-by-class U extends self::C::T%>() → void {
+    this.{self::C::f}<self::C::g1::U%>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
-              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
+              ^" in 1.5 as{TypeError,ForNonNullableByDefault} Never){(self::C::g1::U%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g2(self::C<core::Object*>* c) → void {
-  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
+static method g2(self::C<core::Object> c) → void {
+  c.{self::C::f}<core::num>(1.5){(core::num) → void};
 }
 static method test() → void {
-  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
-  self::g2(new self::C::•<core::int*>());
+  new self::C::•<core::int>().{self::C::g1}<core::num>(){() → void};
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect
index 23d142c..6dddee6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,32 +15,22 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  method g1<covariant-by-class U extends self::C::T*>() → void {
-    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
+  method g1<covariant-by-class U extends self::C::T%>() → void {
+    this.{self::C::f}<self::C::g1::U%>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
-              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
+              ^" in 1.5 as{TypeError,ForNonNullableByDefault} Never){(self::C::g1::U%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g2(self::C<core::Object*>* c) → void {
-  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
+static method g2(self::C<core::Object> c) → void {
+  c.{self::C::f}<core::num>(1.5){(core::num) → void};
 }
 static method test() → void {
-  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
-  self::g2(new self::C::•<core::int*>());
+  new self::C::•<core::int>().{self::C::g1}<core::num>(){() → void};
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
index a4e9eee9..3a05d92 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void
     ;
-  method g1<covariant-by-class U extends self::C::T*>() → void
+  method g1<covariant-by-class U extends self::C::T%>() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g2(self::C<core::Object*>* c) → void
+static method g2(self::C<core::Object> c) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
index 23d142c..6dddee6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,32 +15,22 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  method g1<covariant-by-class U extends self::C::T*>() → void {
-    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
+  method g1<covariant-by-class U extends self::C::T%>() → void {
+    this.{self::C::f}<self::C::g1::U%>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
-              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
+              ^" in 1.5 as{TypeError,ForNonNullableByDefault} Never){(self::C::g1::U%) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g2(self::C<core::Object*>* c) → void {
-  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
+static method g2(self::C<core::Object> c) → void {
+  c.{self::C::f}<core::num>(1.5){(core::num) → void};
 }
 static method test() → void {
-  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
-  self::g2(new self::C::•<core::int*>());
+  new self::C::•<core::int>().{self::C::g1}<core::num>(){() → void};
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart
index bb6a3cd..a7b05bf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class C<T> {
-  void f(T x) {}
+  void f(T? x) {}
 }
 
 void g1(C<num> c) {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline.expect
index e49980f..32ad3db 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  void f(T x) {}
+  void f(T? x) {}
 }
 
 void g1(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline_modelled.expect
index 82b0389..0ff079d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  void f(T x) {}
+  void f(T? x) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
index 2794c16..14bcaae 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::C::T? x) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f}(1.5){(core::num?) → void};
 }
-static method g2(self::C<core::int*>* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g2(self::C<core::int> c) → void {
+  c.{self::C::f}(1){(core::int?) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f}(null){(core::num*) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f}(null){(core::num?) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect
index 2794c16..14bcaae 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::C::T? x) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f}(1.5){(core::num?) → void};
 }
-static method g2(self::C<core::int*>* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g2(self::C<core::int> c) → void {
+  c.{self::C::f}(1){(core::int?) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f}(null){(core::num*) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f}(null){(core::num?) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
index 1c58939..72c6ce5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f(covariant-by-class self::C::T* x) → void
+  method f(covariant-by-class self::C::T? x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → void
+static method g1(self::C<core::num> c) → void
   ;
-static method g2(self::C<core::int*>* c) → void
+static method g2(self::C<core::int> c) → void
   ;
-static method g3(self::C<core::num*>* c) → void
+static method g3(self::C<core::num> c) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
index 2794c16..14bcaae 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::C::T? x) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f}(1.5){(core::num?) → void};
 }
-static method g2(self::C<core::int*>* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g2(self::C<core::int> c) → void {
+  c.{self::C::f}(1){(core::int?) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f}(null){(core::num*) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f}(null){(core::num?) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart
index 8c2a6b4..6cb0061 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline.expect
index bf82a37..be90d87 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline_modelled.expect
index 672a106..9b83d94 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
index 41147c6..f874d1a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
-  method f2(covariant-by-class () →* self::C::T* callback) → void {}
-  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
-  method f4((self::C::T*) →* void callback) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::List<self::C::T%> x) → void {}
+  method f2(covariant-by-class () → self::C::T% callback) → void {}
+  method f3(covariant-by-class (self::C::T%) → self::C::T% callback) → void {}
+  method f4((self::C::T%) → void callback) → void {}
 }
-static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
-  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
+static method g1(self::C<core::num> c, core::List<core::num> l) → void {
+  c.{self::C::f1}(l){(core::List<core::num>) → void};
 }
-static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
-  c.{self::C::f2}(callback){(() →* core::num*) →* void};
+static method g2(self::C<core::num> c, () → core::num callback) → void {
+  c.{self::C::f2}(callback){(() → core::num) → void};
 }
-static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
-  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
+static method g3(self::C<core::num> c, (core::num) → core::num callback) → void {
+  c.{self::C::f3}(callback){((core::num) → core::num) → void};
 }
-static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
-  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
+static method g4(self::C<core::num> c, (core::num) → void callback) → void {
+  c.{self::C::f4}(callback){((core::num) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect
index 41147c6..f874d1a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
-  method f2(covariant-by-class () →* self::C::T* callback) → void {}
-  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
-  method f4((self::C::T*) →* void callback) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::List<self::C::T%> x) → void {}
+  method f2(covariant-by-class () → self::C::T% callback) → void {}
+  method f3(covariant-by-class (self::C::T%) → self::C::T% callback) → void {}
+  method f4((self::C::T%) → void callback) → void {}
 }
-static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
-  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
+static method g1(self::C<core::num> c, core::List<core::num> l) → void {
+  c.{self::C::f1}(l){(core::List<core::num>) → void};
 }
-static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
-  c.{self::C::f2}(callback){(() →* core::num*) →* void};
+static method g2(self::C<core::num> c, () → core::num callback) → void {
+  c.{self::C::f2}(callback){(() → core::num) → void};
 }
-static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
-  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
+static method g3(self::C<core::num> c, (core::num) → core::num callback) → void {
+  c.{self::C::f3}(callback){((core::num) → core::num) → void};
 }
-static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
-  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
+static method g4(self::C<core::num> c, (core::num) → void callback) → void {
+  c.{self::C::f4}(callback){((core::num) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
index 1482d6b..a31dcd4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f1(covariant-by-class core::List<self::C::T*>* x) → void
+  method f1(covariant-by-class core::List<self::C::T%> x) → void
     ;
-  method f2(covariant-by-class () →* self::C::T* callback) → void
+  method f2(covariant-by-class () → self::C::T% callback) → void
     ;
-  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void
+  method f3(covariant-by-class (self::C::T%) → self::C::T% callback) → void
     ;
-  method f4((self::C::T*) →* void callback) → void
+  method f4((self::C::T%) → void callback) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void
+static method g1(self::C<core::num> c, core::List<core::num> l) → void
   ;
-static method g2(self::C<core::num*>* c, () →* core::num* callback) → void
+static method g2(self::C<core::num> c, () → core::num callback) → void
   ;
-static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void
+static method g3(self::C<core::num> c, (core::num) → core::num callback) → void
   ;
-static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void
+static method g4(self::C<core::num> c, (core::num) → void callback) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
index 41147c6..f874d1a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
-  method f2(covariant-by-class () →* self::C::T* callback) → void {}
-  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
-  method f4((self::C::T*) →* void callback) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::List<self::C::T%> x) → void {}
+  method f2(covariant-by-class () → self::C::T% callback) → void {}
+  method f3(covariant-by-class (self::C::T%) → self::C::T% callback) → void {}
+  method f4((self::C::T%) → void callback) → void {}
 }
-static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
-  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
+static method g1(self::C<core::num> c, core::List<core::num> l) → void {
+  c.{self::C::f1}(l){(core::List<core::num>) → void};
 }
-static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
-  c.{self::C::f2}(callback){(() →* core::num*) →* void};
+static method g2(self::C<core::num> c, () → core::num callback) → void {
+  c.{self::C::f2}(callback){(() → core::num) → void};
 }
-static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
-  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
+static method g3(self::C<core::num> c, (core::num) → core::num callback) → void {
+  c.{self::C::f3}(callback){((core::num) → core::num) → void};
 }
-static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
-  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
+static method g4(self::C<core::num> c, (core::num) → void callback) → void {
+  c.{self::C::f4}(callback){((core::num) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart
index dbc9828..0ca506f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -12,12 +12,12 @@
 
 class C<U> implements I<int> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 class D<U> extends C<U> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 void g1(C<num> c) {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline.expect
index 7e31659..e441193 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
@@ -8,12 +7,12 @@
 
 class C<U> implements I<int> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 class D<U> extends C<U> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 void g1(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline_modelled.expect
index 20115dc..06ab27f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
@@ -8,12 +7,12 @@
 
 class C<U> implements I<int> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 class D<U> extends C<U> {
   void f1(int x) {}
-  void f2(int x, [U y]) {}
+  void f2(int x, [U? y]) {}
 }
 
 void g1(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
index b492a06..76a9980 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
@@ -1,65 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f1(covariant-by-class self::I::T* x) → void;
-  abstract method f2(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f1(covariant-by-class self::I::T% x) → void;
+  abstract method f2(covariant-by-class self::I::T% x) → void;
 }
-class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::C::U? y = #C1]) → void {}
 }
-class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
-  synthetic constructor •() → self::D<self::D::U*>*
+class D<U extends core::Object? = dynamic> extends self::C<self::D::U%> {
+  synthetic constructor •() → self::D<self::D::U%>
     : super self::C::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::D::U? y = #C1]) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f1}(1){(core::int*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f1}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f1}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f1}(1.5){(core::num) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
-static method g4(self::D<core::num*>* d) → void {
-  d.{self::D::f1}(1){(core::int*) →* void};
+static method g4(self::D<core::num> d) → void {
+  d.{self::D::f1}(1){(core::int) → void};
 }
-static method g5(self::D<core::num*>* d) → void {
-  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g5(self::D<core::num> d) → void {
+  d.{self::D::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
 static method test() → void {
-  self::g2(new self::C::•<core::num*>());
+  self::g2(new self::C::•<core::num>());
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect
index b492a06..76a9980 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect
@@ -1,65 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f1(covariant-by-class self::I::T* x) → void;
-  abstract method f2(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f1(covariant-by-class self::I::T% x) → void;
+  abstract method f2(covariant-by-class self::I::T% x) → void;
 }
-class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::C::U? y = #C1]) → void {}
 }
-class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
-  synthetic constructor •() → self::D<self::D::U*>*
+class D<U extends core::Object? = dynamic> extends self::C<self::D::U%> {
+  synthetic constructor •() → self::D<self::D::U%>
     : super self::C::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::D::U? y = #C1]) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f1}(1){(core::int*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f1}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f1}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f1}(1.5){(core::num) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
-static method g4(self::D<core::num*>* d) → void {
-  d.{self::D::f1}(1){(core::int*) →* void};
+static method g4(self::D<core::num> d) → void {
+  d.{self::D::f1}(1){(core::int) → void};
 }
-static method g5(self::D<core::num*>* d) → void {
-  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g5(self::D<core::num> d) → void {
+  d.{self::D::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
 static method test() → void {
-  self::g2(new self::C::•<core::num*>());
+  self::g2(new self::C::•<core::num>());
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
index f427dbb..997d988 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
@@ -1,58 +1,38 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f1(covariant-by-class self::I::T* x) → void;
-  abstract method f2(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f1(covariant-by-class self::I::T% x) → void;
+  abstract method f2(covariant-by-class self::I::T% x) → void;
 }
-class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::C<self::C::U%>
     ;
-  method f1(covariant-by-class core::int* x) → void
+  method f1(covariant-by-class core::int x) → void
     ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = null]) → void
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
-  synthetic constructor •() → self::D<self::D::U*>*
-    ;
-  method f1(covariant-by-class core::int* x) → void
-    ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = null]) → void
+  method f2(covariant-by-class core::int x, [covariant-by-class self::C::U? y = null]) → void
     ;
 }
-static method g1(self::C<core::num*>* c) → void
+class D<U extends core::Object? = dynamic> extends self::C<self::D::U%> {
+  synthetic constructor •() → self::D<self::D::U%>
+    ;
+  method f1(covariant-by-class core::int x) → void
+    ;
+  method f2(covariant-by-class core::int x, [covariant-by-class self::D::U? y = null]) → void
+    ;
+}
+static method g1(self::C<core::num> c) → void
   ;
-static method g2(self::I<core::num*>* i) → void
+static method g2(self::I<core::num> i) → void
   ;
-static method g3(self::C<core::num*>* c) → void
+static method g3(self::C<core::num> c) → void
   ;
-static method g4(self::D<core::num*>* d) → void
+static method g4(self::D<core::num> d) → void
   ;
-static method g5(self::D<core::num*>* d) → void
+static method g5(self::D<core::num> d) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
index b492a06..76a9980 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
@@ -1,65 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f1(covariant-by-class self::I::T* x) → void;
-  abstract method f2(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f1(covariant-by-class self::I::T% x) → void;
+  abstract method f2(covariant-by-class self::I::T% x) → void;
 }
-class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::C::U? y = #C1]) → void {}
 }
-class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
-  synthetic constructor •() → self::D<self::D::U*>*
+class D<U extends core::Object? = dynamic> extends self::C<self::D::U%> {
+  synthetic constructor •() → self::D<self::D::U%>
     : super self::C::•()
     ;
-  method f1(covariant-by-class core::int* x) → void {}
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int x) → void {}
+  method f2(covariant-by-class core::int x, [covariant-by-class self::D::U? y = #C1]) → void {}
 }
-static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f1}(1){(core::int*) →* void};
+static method g1(self::C<core::num> c) → void {
+  c.{self::C::f1}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f1}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f1}(1.5){(core::num) → void};
 }
-static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g3(self::C<core::num> c) → void {
+  c.{self::C::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
-static method g4(self::D<core::num*>* d) → void {
-  d.{self::D::f1}(1){(core::int*) →* void};
+static method g4(self::D<core::num> d) → void {
+  d.{self::D::f1}(1){(core::int) → void};
 }
-static method g5(self::D<core::num*>* d) → void {
-  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+static method g5(self::D<core::num> d) → void {
+  d.{self::D::f2}(1, 1.5){(core::int, [core::num?]) → void};
 }
 static method test() → void {
-  self::g2(new self::C::•<core::num*>());
+  self::g2(new self::C::•<core::num>());
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart
index ea3b2d7..4da2532 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline.expect
index e5cf27f..7d6cf9b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline_modelled.expect
index dab06f7..f1f1057 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
index c7a7694..32dd7df 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
@@ -1,67 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::M::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect
index c7a7694..32dd7df 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect
@@ -1,67 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::M::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
index 9ebe44f..b8c12ff 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
@@ -1,64 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x) → void
+  method f(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  method f(core::int* x) → void
+  method f(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::M::f}(x);
 }
-static method g1(self::C* c) → void
+static method g1(self::C c) → void
   ;
-static method g2(self::I<core::num*>* i) → void
+static method g2(self::I<core::num> i) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
index 224bd67..9d2b0e0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
@@ -1,66 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-class C extends self::B implements self::I<core::int*>, self::M /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int>, self::M /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method f(covariant-by-class core::int* x) → void {}
+  method f(covariant-by-class core::int x) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart
index 409b0b4..a869fd9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline.expect
index 479adf0..1995799 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline_modelled.expect
index cc37c29..da6ecc9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
index 5e85a90..e79657e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
@@ -1,51 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect
index 5e85a90..e79657e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect
@@ -1,51 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
index fc3b403..4b88524 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
@@ -1,47 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x) → void
+  method f(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void
+static method g1(self::C c) → void
   ;
-static method g2(self::I<core::num*>* i) → void
+static method g2(self::I<core::num> i) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
index 5e85a90..e79657e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
@@ -1,51 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart
index 85f3e7c..8208926 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline.expect
index 3a36753..ef098bf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline_modelled.expect
index 1c14876..6b9085b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
index e69ba31..f446603 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
@@ -1,66 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect
index e69ba31..f446603 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect
@@ -1,66 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
index 75621ad..6ff2a0e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
@@ -1,62 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x) → void
+  method f(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void
+static method g1(self::C c) → void
   ;
-static method g2(self::I<core::num*>* i) → void
+static method g2(self::I<core::num> i) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
index 8aae2e5..38a7a74 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
@@ -1,66 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B implements self::I<core::int*>, self::M /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int>, self::M /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int x) → void
     return super.{self::B::f}(x);
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1){(core::int*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1){(core::int) → void};
 }
-static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5){(core::num*) →* void};
+static method g2(self::I<core::num> i) → void {
+  i.{self::I::f}(1.5){(core::num) → void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart
index 0d4dd96..2fd42d7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -15,7 +15,7 @@
 }
 
 F<num> g1(C<num> c) {
-  return c.f1;
+  return c. /*@checkReturn=(num) -> void*/ f1;
 }
 
 void g2(C<int> c, Object x) {
@@ -24,7 +24,7 @@
 }
 
 G<List<num>, num> g3(C<num> c) {
-  return c.f2;
+  return c. /*@checkReturn=(List<num>) -> num*/ f2;
 }
 
 void test() {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline.expect
index 6e9b88c..86fd3b6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline_modelled.expect
index cce693e..c813f8d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 F<num> g1(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
index a63dac3..71d5edf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
@@ -1,40 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic> = (T%) → U%;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
-    return x.{core::Iterable::first}{self::C::T*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(covariant-by-class core::List<self::C::T%> x) → self::C::T%
+    return x.{core::Iterable::first}{self::C::T%};
 }
-static method g1(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::f1}{(core::num*) →* void};
+static method g1(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
-static method g2(self::C<core::int*>* c, core::Object* x) → void {
-  (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
-  f(x){(core::Object*) →* void};
+static method g2(self::C<core::int> c, core::Object x) → void {
+  (core::Object) → void f = self::g1(c) as{ForNonNullableByDefault} (core::Object) → void;
+  f(x){(core::Object) → void};
 }
-static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
-  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
+static method g3(self::C<core::num> c) → (core::List<core::num>) → core::num {
+  return c.{self::C::f2}{(core::List<core::num>) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::List<core::num>) → core::num;
 }
 static method test() → void {
-  (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
-  x(1.5){(core::num*) →* void};
-  self::g3(new self::C::•<core::int*>());
+  (core::num) → void x = self::g1(new self::C::•<core::int>());
+  x(1.5){(core::num) → void};
+  self::g3(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect
index a63dac3..71d5edf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect
@@ -1,40 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic> = (T%) → U%;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
-    return x.{core::Iterable::first}{self::C::T*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(covariant-by-class core::List<self::C::T%> x) → self::C::T%
+    return x.{core::Iterable::first}{self::C::T%};
 }
-static method g1(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::f1}{(core::num*) →* void};
+static method g1(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
-static method g2(self::C<core::int*>* c, core::Object* x) → void {
-  (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
-  f(x){(core::Object*) →* void};
+static method g2(self::C<core::int> c, core::Object x) → void {
+  (core::Object) → void f = self::g1(c) as{ForNonNullableByDefault} (core::Object) → void;
+  f(x){(core::Object) → void};
 }
-static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
-  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
+static method g3(self::C<core::num> c) → (core::List<core::num>) → core::num {
+  return c.{self::C::f2}{(core::List<core::num>) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::List<core::num>) → core::num;
 }
 static method test() → void {
-  (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
-  x(1.5){(core::num*) →* void};
-  self::g3(new self::C::•<core::int*>());
+  (core::num) → void x = self::g1(new self::C::•<core::int>());
+  x(1.5){(core::num) → void};
+  self::g3(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
index 5ba10bb..146ef04 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic> = (T%) → U%;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f1(covariant-by-class self::C::T* x) → void
+  method f1(covariant-by-class self::C::T% x) → void
     ;
-  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
+  method f2(covariant-by-class core::List<self::C::T%> x) → self::C::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g1(self::C<core::num*>* c) → (core::num*) →* void
+static method g1(self::C<core::num> c) → (core::num) → void
   ;
-static method g2(self::C<core::int*>* c, core::Object* x) → void
+static method g2(self::C<core::int> c, core::Object x) → void
   ;
-static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num*
+static method g3(self::C<core::num> c) → (core::List<core::num>) → core::num
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
index a63dac3..71d5edf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
@@ -1,40 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef G<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic> = (T%) → U%;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
-    return x.{core::Iterable::first}{self::C::T*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(covariant-by-class core::List<self::C::T%> x) → self::C::T%
+    return x.{core::Iterable::first}{self::C::T%};
 }
-static method g1(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::f1}{(core::num*) →* void};
+static method g1(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
-static method g2(self::C<core::int*>* c, core::Object* x) → void {
-  (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
-  f(x){(core::Object*) →* void};
+static method g2(self::C<core::int> c, core::Object x) → void {
+  (core::Object) → void f = self::g1(c) as{ForNonNullableByDefault} (core::Object) → void;
+  f(x){(core::Object) → void};
 }
-static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
-  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
+static method g3(self::C<core::num> c) → (core::List<core::num>) → core::num {
+  return c.{self::C::f2}{(core::List<core::num>) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::List<core::num>) → core::num;
 }
 static method test() → void {
-  (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
-  x(1.5){(core::num*) →* void};
-  self::g3(new self::C::•<core::int*>());
+  (core::num) → void x = self::g1(new self::C::•<core::int>());
+  x(1.5){(core::num) → void};
+  self::g3(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart
index c506dd0..02bfdcf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline.expect
index ce94263..a0211e4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef F<T>(T x);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline_modelled.expect
index 845403c..7b38b24 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 F<num> g2(C c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
index bf44b39..38a56e3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
@@ -1,44 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → (core::num*) →* dynamic {
-  return c.{self::C::f}{(core::num*) →* void};
+static method g2(self::C c) → (core::num) → dynamic {
+  return c.{self::C::f}{(core::num) → void};
 }
 static method test() → dynamic {
   self::g1(new self::D::•());
-  (core::num*) →* dynamic x = self::g2(new self::D::•());
+  (core::num) → dynamic x = self::g2(new self::D::•());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect
index bf44b39..38a56e3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect
@@ -1,44 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → (core::num*) →* dynamic {
-  return c.{self::C::f}{(core::num*) →* void};
+static method g2(self::C c) → (core::num) → dynamic {
+  return c.{self::C::f}{(core::num) → void};
 }
 static method test() → dynamic {
   self::g1(new self::D::•());
-  (core::num*) →* dynamic x = self::g2(new self::D::•());
+  (core::num) → dynamic x = self::g2(new self::D::•());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
index 24552c4..60ac54f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
@@ -1,39 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f(core::num* x) → void
+  method f(core::num x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method f(covariant-by-declaration core::int* x) → void
+  method f(covariant-by-declaration core::int x) → void
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  method f(covariant-by-declaration core::int* x) → void
+  method f(covariant-by-declaration core::int x) → void
     ;
 }
-static method g1(self::C* c) → void
+static method g1(self::C c) → void
   ;
-static method g2(self::C* c) → (core::num*) →* dynamic
+static method g2(self::C c) → (core::num) → dynamic
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
index bf44b39..38a56e3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
@@ -1,44 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(covariant-by-declaration core::int* x) → void {}
+  method f(covariant-by-declaration core::int x) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}(1.5){(core::num*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → (core::num*) →* dynamic {
-  return c.{self::C::f}{(core::num*) →* void};
+static method g2(self::C c) → (core::num) → dynamic {
+  return c.{self::C::f}{(core::num) → void};
 }
 static method test() → dynamic {
   self::g1(new self::D::•());
-  (core::num*) →* dynamic x = self::g2(new self::D::•());
+  (core::num) → dynamic x = self::g2(new self::D::•());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart
index 070f4c9..ca46367 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline.expect
index a6f9dc1..1379e63 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline_modelled.expect
index a6f9dc1..1379e63 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
index 210c2cb..fe0527a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect
index 210c2cb..fe0527a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
index 359e402..8df4386 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
@@ -1,51 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x;
-  synthetic constructor •() → self::C*
+  field core::num? x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x;
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x;
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
index 210c2cb..fe0527a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart
index 3b905d7..1da1e49 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart
@@ -1,21 +1,21 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int get x => 0;
-  void set x(int value) {}
+  int? get x => 0;
+  void set x(int? value) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline.expect
index c7a1db5..1533cd3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline.expect
@@ -1,17 +1,16 @@
-// @dart = 2.9
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int get x => 0;
-  void set x(int value) {}
+  int? get x => 0;
+  void set x(int? value) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline_modelled.expect
index c7a1db5..1533cd3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.textual_outline_modelled.expect
@@ -1,17 +1,16 @@
-// @dart = 2.9
 library test;
 
 class C {
-  num x;
+  num? x;
 }
 
 class D implements C {
-  covariant int x;
+  covariant int? x;
 }
 
 class E implements D {
-  int get x => 0;
-  void set x(int value) {}
+  int? get x => 0;
+  void set x(int? value) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
index 2e274f6..12ad231 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  set x(covariant-by-declaration core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect
index 2e274f6..12ad231 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  set x(covariant-by-declaration core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
index 64b3fce..5abd874 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
@@ -1,54 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x;
-  synthetic constructor •() → self::C*
+  field core::num? x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x;
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  get x() → core::int*
+  get x() → core::int?
     ;
-  set x(covariant-by-declaration core::int* value) → void
+  set x(covariant-by-declaration core::int? value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
index 2e274f6..12ad231 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::D*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  set x(covariant-by-declaration core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart
index 54580cd..d9b8a30e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline.expect
index dc45d51..3e18946 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline_modelled.expect
index dc45d51..3e18946 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
index 3f5f3e4..6eaf130 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect
index 3f5f3e4..6eaf130 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
index 3d21253..07f9c35 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set x(core::num* value) → void
+  set x(core::num value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set x(covariant-by-declaration core::int* value) → void
+  set x(covariant-by-declaration core::int value) → void
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  set x(covariant-by-declaration core::int* value) → void
+  set x(covariant-by-declaration core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
index 3f5f3e4..6eaf130 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart
index b3bcc5e..cbd45fa 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class C {
-  void set x(num value) {}
+  void set x(num? value) {}
 }
 
 class D extends C {
-  void set x(covariant int value) {}
+  void set x(covariant int? value) {}
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline.expect
index 8d6ae0f..f919365 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 class C {
-  void set x(num value) {}
+  void set x(num? value) {}
 }
 
 class D extends C {
-  void set x(covariant int value) {}
+  void set x(covariant int? value) {}
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline_modelled.expect
index 8d6ae0f..f919365 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 class C {
-  void set x(num value) {}
+  void set x(num? value) {}
 }
 
 class D extends C {
-  void set x(covariant int value) {}
+  void set x(covariant int? value) {}
 }
 
 class E implements D {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
index 8c69a30..eb090d5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num? value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect
index 8c69a30..eb090d5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num? value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
index 28be2c8..0a58b9a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set x(core::num* value) → void
+  set x(core::num? value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set x(covariant-by-declaration core::int* value) → void
+  set x(covariant-by-declaration core::int? value) → void
     ;
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x;
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
index 8c69a30..eb090d5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::num* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::num? value) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant-by-declaration core::int* value) → void {}
+  set x(covariant-by-declaration core::int? value) → void {}
 }
 class E extends core::Object implements self::D {
-  covariant-by-declaration field core::int* x = null;
-  synthetic constructor •() → self::E*
+  covariant-by-declaration field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart
index fef54de..e81a781 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  T x;
-  void set y(T value) {}
-  void f(T value) {
+  T? x;
+  void set y(T? value) {}
+  void f(T? value) {
     this.x = value;
     this.y = value;
   }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline.expect
index 7a6ee1e..8e2f72c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  T x;
-  void set y(T value) {}
-  void f(T value) {}
+  T? x;
+  void set y(T? value) {}
+  void f(T? value) {}
 }
 
 void g(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline_modelled.expect
index 4204df0..c45d014 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  T x;
-  void f(T value) {}
-  void set y(T value) {}
+  T? x;
+  void f(T? value) {}
+  void set y(T? value) {}
 }
 
 typedef void F<T>(T x);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
index dee3331..b565b4a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set y(covariant-by-class self::C::T* value) → void {}
-  method f(covariant-by-class self::C::T* value) → void {
+  set y(covariant-by-class self::C::T? value) → void {}
+  method f(covariant-by-class self::C::T? value) → void {
     this.{self::C::x} = value;
     this.{self::C::y} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
+static method g(self::C<core::num> c) → void {
   c.{self::C::x} = 1.5;
   c.{self::C::y} = 1.5;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect
index dee3331..b565b4a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set y(covariant-by-class self::C::T* value) → void {}
-  method f(covariant-by-class self::C::T* value) → void {
+  set y(covariant-by-class self::C::T? value) → void {}
+  method f(covariant-by-class self::C::T? value) → void {
     this.{self::C::x} = value;
     this.{self::C::y} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
+static method g(self::C<core::num> c) → void {
   c.{self::C::x} = 1.5;
   c.{self::C::y} = 1.5;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
index c431be4..d59d8a3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* x;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? x;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  set y(covariant-by-class self::C::T* value) → void
+  set y(covariant-by-class self::C::T? value) → void
     ;
-  method f(covariant-by-class self::C::T* value) → void
+  method f(covariant-by-class self::C::T? value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void
+static method g(self::C<core::num> c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
index dee3331..b565b4a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set y(covariant-by-class self::C::T* value) → void {}
-  method f(covariant-by-class self::C::T* value) → void {
+  set y(covariant-by-class self::C::T? value) → void {}
+  method f(covariant-by-class self::C::T? value) → void {
     this.{self::C::x} = value;
     this.{self::C::y} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C<core::num*>* c) → void {
+static method g(self::C<core::num> c) → void {
   c.{self::C::x} = 1.5;
   c.{self::C::y} = 1.5;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart
index d9e65fb..790dff4 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline.expect
index 5a050cf..3385f7f 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline_modelled.expect
index fa18448..89135dc 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
index 3d1a3dc..ec602df 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(core::int x) → void {}
 }
-class D extends self::C<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f1(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method g1(dynamic d) → void {
   d{dynamic}.f1(1.5);
@@ -32,7 +22,7 @@
   d{dynamic}.f2(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
   self::g2(new self::C::•<dynamic>());
   self::g1(new self::D::•());
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect
index 3d1a3dc..ec602df 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(core::int x) → void {}
 }
-class D extends self::C<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f1(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method g1(dynamic d) → void {
   d{dynamic}.f1(1.5);
@@ -32,7 +22,7 @@
   d{dynamic}.f2(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
   self::g2(new self::C::•<dynamic>());
   self::g1(new self::D::•());
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
index a2c2b89..b8da6db 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f1(covariant-by-class self::C::T* x) → void
+  method f1(covariant-by-class self::C::T% x) → void
     ;
-  method f2(core::int* x) → void
+  method f2(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::num> {
+  synthetic constructor •() → self::D
     ;
-  method f1(covariant-by-declaration covariant-by-class core::int* x) → void
+  method f1(covariant-by-declaration covariant-by-class core::int x) → void
     ;
 }
 static method g1(dynamic d) → void
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
index 3d1a3dc..ec602df 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f1(covariant-by-class self::C::T* x) → void {}
-  method f2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-class self::C::T% x) → void {}
+  method f2(core::int x) → void {}
 }
-class D extends self::C<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f1(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method g1(dynamic d) → void {
   d{dynamic}.f1(1.5);
@@ -32,7 +22,7 @@
   d{dynamic}.f2(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
   self::g2(new self::C::•<dynamic>());
   self::g1(new self::D::•());
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart
index 894c95b..6206b0e 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline.expect
index 2e2fd8f..3ab451a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline_modelled.expect
index 025143f..cc44c99 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
index bbd989a..969f2a9 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
 }
 static method g1(dynamic d) → void {
-  d{dynamic}.f<core::num*>(1.5);
+  d{dynamic}.f<core::num>(1.5);
 }
 static method g2(dynamic d) → void {
   d{dynamic}.f(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
-  self::g2(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect
index bbd989a..969f2a9 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
 }
 static method g1(dynamic d) → void {
-  d{dynamic}.f<core::num*>(1.5);
+  d{dynamic}.f<core::num>(1.5);
 }
 static method g2(dynamic d) → void {
   d{dynamic}.f(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
-  self::g2(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
index 8d50179..ed46391 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(dynamic d) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
index bbd989a..969f2a9 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<covariant-by-class U extends self::C::T%>(self::C::f::U% x) → void {}
 }
 static method g1(dynamic d) → void {
-  d{dynamic}.f<core::num*>(1.5);
+  d{dynamic}.f<core::num>(1.5);
 }
 static method g2(dynamic d) → void {
   d{dynamic}.f(1.5);
 }
 static method test() → void {
-  self::g1(new self::C::•<core::int*>());
-  self::g2(new self::C::•<core::int*>());
+  self::g1(new self::C::•<core::int>());
+  self::g2(new self::C::•<core::int>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart
index 7a6a6a5..7c7fe48 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline.expect
index 4611b50..7737325 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline_modelled.expect
index 40fbf9f..4e49871 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
index 204effc..ae55f39 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic f;
-  constructor •(dynamic f) → self::C*
+  constructor •(dynamic f) → self::C
     : self::C::f = f, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
+static method g(self::C c) → void {
+  let final self::C #t1 = c in let final core::double #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
 }
-static method h(core::int* i) → void {}
+static method h(core::int i) → void {}
 static method test() → void {
   self::g(new self::C::•(#C1));
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect
index 204effc..ae55f39 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic f;
-  constructor •(dynamic f) → self::C*
+  constructor •(dynamic f) → self::C
     : self::C::f = f, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
+static method g(self::C c) → void {
+  let final self::C #t1 = c in let final core::double #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
 }
-static method h(core::int* i) → void {}
+static method h(core::int i) → void {}
 static method test() → void {
   self::g(new self::C::•(#C1));
 }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.outline.expect
index e3dcba5..0ff4a0b 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic f;
-  constructor •(dynamic f) → self::C*
+  constructor •(dynamic f) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C* c) → void
+static method g(self::C c) → void
   ;
-static method h(core::int* i) → void
+static method h(core::int i) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
index 14d1ec2..b88ebd1 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic f;
-  constructor •(dynamic f) → self::C*
+  constructor •(dynamic f) → self::C
     : self::C::f = f, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
+static method g(self::C c) → void {
+  let final self::C #t1 = c in let final core::double #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
 }
-static method h(core::int* i) → void {}
+static method h(core::int i) → void {}
 static method test() → void {
   self::g(new self::C::•(#C1));
 }
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart
index c1f2d16..7e83576 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B<T> {
-  T x;
+  T? x;
 }
 
 class C {
-  num x;
+  num? x;
 }
 
 class D extends C implements B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline.expect
index be28691..340c4a4 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  T x;
+  T? x;
 }
 
 class C {
-  num x;
+  num? x;
 }
 
 class D extends C implements B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline_modelled.expect
index be28691..340c4a4 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  T x;
+  T? x;
 }
 
 class C {
-  num x;
+  num? x;
 }
 
 class D extends C implements B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
index e0143ec..136a478 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T? x = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C implements self::B<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C implements self::B<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-class core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num? value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect
index e0143ec..136a478 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T? x = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C implements self::B<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C implements self::B<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-class core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num? value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
index 17eb717..853fff8 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T? x;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::num* x;
-  synthetic constructor •() → self::C*
+  field core::num? x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C implements self::B<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C implements self::B<core::num> {
+  synthetic constructor •() → self::D
     ;
-  forwarding-stub set x(covariant-by-class core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num? value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
index e0143ec..136a478 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T? x = null;
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::num* x = null;
-  synthetic constructor •() → self::C*
+  field core::num? x = null;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C implements self::B<core::num*> {
-  synthetic constructor •() → self::D*
+class D extends self::C implements self::B<core::num> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-class core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num? value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart
index 1858b00..f0c7c41 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B {
-  Object _x;
+  Object? _x;
   void f([num x = 10]) {
     _x = x;
   }
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline.expect
index df71248..5971664 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class B {
-  Object _x;
+  Object? _x;
   void f([num x = 10]) {}
   void g({num x = 20}) {}
   void check(Object expectedValue) {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline_modelled.expect
index c3d5b86..80ed0e1 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
@@ -7,7 +6,7 @@
 }
 
 class B {
-  Object _x;
+  Object? _x;
   void check(Object expectedValue) {}
   void f([num x = 10]) {}
   void g({num x = 20}) {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
index 672eea9..204dfca 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
@@ -1,66 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  field core::Object* _x = null;
-  synthetic constructor •() → self::B*
+  field core::Object? _x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f([core::num* x = #C1]) → void {
+  method f([core::num x = #C1]) → void {
     this.{self::B::_x} = x;
   }
-  method g({core::num* x = #C2}) → void {
+  method g({core::num x = #C2}) → void {
     this.{self::B::_x} = x;
   }
-  method check(core::Object* expectedValue) → void {
-    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
-      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
+  method check(core::Object expectedValue) → void {
+    if(!(this.{self::B::_x}{core::Object?} =={core::Object::==}{(core::Object) → core::bool} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object?}}";
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
-  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f([covariant-by-class self::I::T% x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T% x = #C3}) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
+  forwarding-stub method f([covariant-by-class core::num x = #C1]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
+  forwarding-stub method g({covariant-by-class core::num x = #C2}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::f}(){([core::num*]) →* void};
-  c.{self::B::check}(10){(core::Object*) →* void};
-  c.{self::C::g}(){({x: core::num*}) →* void};
-  c.{self::B::check}(20){(core::Object*) →* void};
+  self::C c = new self::C::•();
+  c.{self::C::f}(){([core::num]) → void};
+  c.{self::B::check}(10){(core::Object) → void};
+  c.{self::C::g}(){({x: core::num}) → void};
+  c.{self::B::check}(20){(core::Object) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect
index 672eea9..204dfca 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect
@@ -1,66 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  field core::Object* _x = null;
-  synthetic constructor •() → self::B*
+  field core::Object? _x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f([core::num* x = #C1]) → void {
+  method f([core::num x = #C1]) → void {
     this.{self::B::_x} = x;
   }
-  method g({core::num* x = #C2}) → void {
+  method g({core::num x = #C2}) → void {
     this.{self::B::_x} = x;
   }
-  method check(core::Object* expectedValue) → void {
-    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
-      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
+  method check(core::Object expectedValue) → void {
+    if(!(this.{self::B::_x}{core::Object?} =={core::Object::==}{(core::Object) → core::bool} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object?}}";
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
-  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f([covariant-by-class self::I::T% x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T% x = #C3}) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
+  forwarding-stub method f([covariant-by-class core::num x = #C1]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
+  forwarding-stub method g({covariant-by-class core::num x = #C2}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::f}(){([core::num*]) →* void};
-  c.{self::B::check}(10){(core::Object*) →* void};
-  c.{self::C::g}(){({x: core::num*}) →* void};
-  c.{self::B::check}(20){(core::Object*) →* void};
+  self::C c = new self::C::•();
+  c.{self::C::f}(){([core::num]) → void};
+  c.{self::B::check}(10){(core::Object) → void};
+  c.{self::C::g}(){({x: core::num}) → void};
+  c.{self::B::check}(20){(core::Object) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
index 232826f..b8c77b9 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
@@ -1,50 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  field core::Object* _x;
-  synthetic constructor •() → self::B*
+  field core::Object? _x;
+  synthetic constructor •() → self::B
     ;
-  method f([core::num* x = 10]) → void
+  method f([core::num x = 10]) → void
     ;
-  method g({core::num* x = 20}) → void
+  method g({core::num x = 20}) → void
     ;
-  method check(core::Object* expectedValue) → void
+  method check(core::Object expectedValue) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f([covariant-by-class self::I::T* x = null]) → void;
-  abstract method g({covariant-by-class self::I::T* x = null}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f([covariant-by-class self::I::T% x = null]) → void;
+  abstract method g({covariant-by-class self::I::T% x = null}) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f([covariant-by-class core::num* x]) → void
+  forwarding-stub method f([covariant-by-class core::num x]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({covariant-by-class core::num* x}) → void
+  forwarding-stub method g({covariant-by-class core::num x}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
index 672eea9..204dfca 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
@@ -1,66 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  field core::Object* _x = null;
-  synthetic constructor •() → self::B*
+  field core::Object? _x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f([core::num* x = #C1]) → void {
+  method f([core::num x = #C1]) → void {
     this.{self::B::_x} = x;
   }
-  method g({core::num* x = #C2}) → void {
+  method g({core::num x = #C2}) → void {
     this.{self::B::_x} = x;
   }
-  method check(core::Object* expectedValue) → void {
-    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
-      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
+  method check(core::Object expectedValue) → void {
+    if(!(this.{self::B::_x}{core::Object?} =={core::Object::==}{(core::Object) → core::bool} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object?}}";
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
-  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f([covariant-by-class self::I::T% x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T% x = #C3}) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
+  forwarding-stub method f([covariant-by-class core::num x = #C1]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
+  forwarding-stub method g({covariant-by-class core::num x = #C2}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  c.{self::C::f}(){([core::num*]) →* void};
-  c.{self::B::check}(10){(core::Object*) →* void};
-  c.{self::C::g}(){({x: core::num*}) →* void};
-  c.{self::B::check}(20){(core::Object*) →* void};
+  self::C c = new self::C::•();
+  c.{self::C::f}(){([core::num]) → void};
+  c.{self::B::check}(10){(core::Object) → void};
+  c.{self::C::g}(){({x: core::num}) → void};
+  c.{self::B::check}(20){(core::Object) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart
index 50a9e4d..2cd0b19 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline.expect
index 681a9ab..8c6231b 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline_modelled.expect
index 1177a3c..345dc98 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
index 76facc74..ac4945f 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::int y) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int x, core::int y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect
index 76facc74..ac4945f 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::int y) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int x, core::int y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
index 15a57c7..69d5b22 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x, core::int* y) → void
+  method f(core::int x, core::int y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::int y) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int x, core::int y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
index 76facc74..ac4945f 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::int y) → void;
 }
-class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int x, core::int y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart
index 80ac157..5fbf5e9 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart
@@ -1,24 +1,24 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class C<T> {
-  void set x(T t) {}
-  T y;
+  void set x(T? t) {}
+  T? y;
 }
 
 class D implements C<num> {
-  num x;
-  num y;
+  num? x;
+  num? y;
 }
 
 class E implements C<num> {
-  void set x(num t) {}
-  num get y => null;
-  void set y(num t) {}
+  void set x(num? t) {}
+  num? get y => null;
+  void set y(num? t) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline.expect
index 2d3e16b..562ff44 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  void set x(T t) {}
-  T y;
+  void set x(T? t) {}
+  T? y;
 }
 
 class D implements C<num> {
-  num x;
-  num y;
+  num? x;
+  num? y;
 }
 
 class E implements C<num> {
-  void set x(num t) {}
-  num get y => null;
-  void set y(num t) {}
+  void set x(num? t) {}
+  num? get y => null;
+  void set y(num? t) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline_modelled.expect
index 551aa2b..fce3704 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.textual_outline_modelled.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  T y;
-  void set x(T t) {}
+  T? y;
+  void set x(T? t) {}
 }
 
 class D implements C<num> {
-  num x;
-  num y;
+  num? x;
+  num? y;
 }
 
 class E implements C<num> {
-  num get y => null;
-  void set x(num t) {}
-  void set y(num t) {}
+  num? get y => null;
+  void set x(num? t) {}
+  void set y(num? t) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
index 2fc5b5a..2bb8197 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? y = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set x(covariant-by-class self::C::T* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-class self::C::T? t) → void {}
 }
-class D extends core::Object implements self::C<core::num*> {
-  covariant-by-class field core::num* x = null;
-  covariant-by-class field core::num* y = null;
-  synthetic constructor •() → self::D*
+class D extends core::Object implements self::C<core::num> {
+  covariant-by-class field core::num? x = null;
+  covariant-by-class field core::num? y = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E extends core::Object implements self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends core::Object implements self::C<core::num> {
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  set x(covariant-by-class core::num* t) → void {}
-  get y() → core::num*
+  set x(covariant-by-class core::num? t) → void {}
+  get y() → core::num?
     return null;
-  set y(covariant-by-class core::num* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set y(covariant-by-class core::num? t) → void {}
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect
index 2fc5b5a..2bb8197 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? y = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set x(covariant-by-class self::C::T* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-class self::C::T? t) → void {}
 }
-class D extends core::Object implements self::C<core::num*> {
-  covariant-by-class field core::num* x = null;
-  covariant-by-class field core::num* y = null;
-  synthetic constructor •() → self::D*
+class D extends core::Object implements self::C<core::num> {
+  covariant-by-class field core::num? x = null;
+  covariant-by-class field core::num? y = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E extends core::Object implements self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends core::Object implements self::C<core::num> {
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  set x(covariant-by-class core::num* t) → void {}
-  get y() → core::num*
+  set x(covariant-by-class core::num? t) → void {}
+  get y() → core::num?
     return null;
-  set y(covariant-by-class core::num* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set y(covariant-by-class core::num? t) → void {}
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
index e8177bf..3c62092 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
@@ -1,59 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* y;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? y;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  set x(covariant-by-class self::C::T* t) → void
+  set x(covariant-by-class self::C::T? t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends core::Object implements self::C<core::num*> {
-  covariant-by-class field core::num* x;
-  covariant-by-class field core::num* y;
-  synthetic constructor •() → self::D*
+class D extends core::Object implements self::C<core::num> {
+  covariant-by-class field core::num? x;
+  covariant-by-class field core::num? y;
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E extends core::Object implements self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends core::Object implements self::C<core::num> {
+  synthetic constructor •() → self::E
     ;
-  set x(covariant-by-class core::num* t) → void
+  set x(covariant-by-class core::num? t) → void
     ;
-  get y() → core::num*
+  get y() → core::num?
     ;
-  set y(covariant-by-class core::num* t) → void
+  set y(covariant-by-class core::num? t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
index 2fc5b5a..2bb8197 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* y = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? y = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  set x(covariant-by-class self::C::T* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(covariant-by-class self::C::T? t) → void {}
 }
-class D extends core::Object implements self::C<core::num*> {
-  covariant-by-class field core::num* x = null;
-  covariant-by-class field core::num* y = null;
-  synthetic constructor •() → self::D*
+class D extends core::Object implements self::C<core::num> {
+  covariant-by-class field core::num? x = null;
+  covariant-by-class field core::num? y = null;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E extends core::Object implements self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends core::Object implements self::C<core::num> {
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  set x(covariant-by-class core::num* t) → void {}
-  get y() → core::num*
+  set x(covariant-by-class core::num? t) → void {}
+  get y() → core::num?
     return null;
-  set y(covariant-by-class core::num* t) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set y(covariant-by-class core::num? t) → void {}
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart
index f049390..895d11f 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart
@@ -1,22 +1,22 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 abstract class A {
-  void set x(covariant Object value);
+  void set x(covariant Object? value);
 }
 
 class B implements A {
-  void f(covariant Object x) {}
-  Object x; // covariant
+  void f(covariant Object? x) {}
+  Object? x; // covariant
 }
 
 class C<T> implements B {
-  void f(T x) {}
-  T x;
+  void f(T? x) {}
+  T? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline.expect
index 9bc6e47..b170ef9 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline.expect
@@ -1,18 +1,17 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  void set x(covariant Object value);
+  void set x(covariant Object? value);
 }
 
 class B implements A {
-  void f(covariant Object x) {}
-  Object x;
+  void f(covariant Object? x) {}
+  Object? x;
 }
 
 class C<T> implements B {
-  void f(T x) {}
-  T x;
+  void f(T? x) {}
+  T? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline_modelled.expect
index a7a82e5..c51ceda 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.textual_outline_modelled.expect
@@ -1,18 +1,17 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  void set x(covariant Object value);
+  void set x(covariant Object? value);
 }
 
 class B implements A {
-  Object x;
-  void f(covariant Object x) {}
+  Object? x;
+  void f(covariant Object? x) {}
 }
 
 class C<T> implements B {
-  T x;
-  void f(T x) {}
+  T? x;
+  void f(T? x) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
index 3e9000d..ffc705f 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(covariant-by-declaration core::Object? value) → void;
 }
 class B extends core::Object implements self::A {
-  covariant-by-declaration field core::Object* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::Object? x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::Object* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::Object? x) → void {}
 }
-class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant-by-declaration covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object implements self::B {
+  covariant-by-declaration covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration covariant-by-class self::C::T? x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect
index 3e9000d..ffc705f 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(covariant-by-declaration core::Object? value) → void;
 }
 class B extends core::Object implements self::A {
-  covariant-by-declaration field core::Object* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::Object? x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::Object* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::Object? x) → void {}
 }
-class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant-by-declaration covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object implements self::B {
+  covariant-by-declaration covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration covariant-by-class self::C::T? x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
index 50fbaa0..4cc7edb 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(covariant-by-declaration core::Object? value) → void;
 }
 class B extends core::Object implements self::A {
-  covariant-by-declaration field core::Object* x;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::Object? x;
+  synthetic constructor •() → self::B
     ;
-  method f(covariant-by-declaration core::Object* x) → void
+  method f(covariant-by-declaration core::Object? x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant-by-declaration covariant-by-class field self::C::T* x;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object implements self::B {
+  covariant-by-declaration covariant-by-class field self::C::T? x;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void
+  method f(covariant-by-declaration covariant-by-class self::C::T? x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
index 3e9000d..ffc705f 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(covariant-by-declaration core::Object? value) → void;
 }
 class B extends core::Object implements self::A {
-  covariant-by-declaration field core::Object* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::Object? x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::Object* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::Object? x) → void {}
 }
-class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant-by-declaration covariant-by-class field self::C::T* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object implements self::B {
+  covariant-by-declaration covariant-by-class field self::C::T? x = null;
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration covariant-by-class self::C::T? x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart
index 449fbe0..b27c02f 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart
index 8940551..cd91c69f 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart
index c7da78b..f186aa3 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart
index 4ee9d69..76015e2 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart
index 617e9dd..9c92eb6 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart
index dc3b23b..84304d8 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart
index d1de7be..7810836 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart b/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart
index db3ef60..662243e 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart
index 427af13..47824ee 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline.expect
index d51e54c..84c7157 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline_modelled.expect
index e3df18c..168422a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
index 761e51b..546063a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect
index 761e51b..546063a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
index 0bf24b3..2911433 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::num* x) → void
+  method f(core::num x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
index 761e51b..546063a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::num* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::num x) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x) → void;
 }
-class C extends self::B implements self::I<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart
index 208e734..fa5945b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -31,7 +31,7 @@
 }
 
 test() {
-  var x = new D().g4 /*@ checkReturn=(int*) ->* dynamic */ () as F<Object>;
+  var x = new D().g4 /*@checkReturn=(int) -> dynamic*/ () as F<Object>;
   x('hi');
   new E().g1(1.5);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline.expect
index 21fa569..6c7fe09 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef F<T>(T x);
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline_modelled.expect
index ce16639..a210365 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
index 1efedac..5a2aec7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
@@ -1,49 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  method g1(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% x) → void {}
+  method g1(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g2(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method g2(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
-    c.{self::C::f}(x){(self::C::T*) →* void};
+  method g3(covariant-by-class self::C<self::C::T%> c, covariant-by-class self::C::T% x) → void {
+    c.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g4() → (self::C::T*) →* dynamic
-    return this.{self::C::f}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g4() → (self::C::T%) → dynamic
+    return this.{self::C::f}{(self::C::T%) → void};
 }
-class D extends self::C<core::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class E extends self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends self::C<core::num> {
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
-  x("hi"){(core::Object*) →* dynamic};
-  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
+  (core::Object) → dynamic x = (new self::D::•().{self::C::g4}(){() → (core::int) → dynamic} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::int) → dynamic) as{ForNonNullableByDefault} (core::Object) → dynamic;
+  x("hi"){(core::Object) → dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect
index 1efedac..5a2aec7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect
@@ -1,49 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  method g1(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% x) → void {}
+  method g1(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g2(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method g2(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
-    c.{self::C::f}(x){(self::C::T*) →* void};
+  method g3(covariant-by-class self::C<self::C::T%> c, covariant-by-class self::C::T% x) → void {
+    c.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g4() → (self::C::T*) →* dynamic
-    return this.{self::C::f}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g4() → (self::C::T%) → dynamic
+    return this.{self::C::f}{(self::C::T%) → void};
 }
-class D extends self::C<core::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class E extends self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends self::C<core::num> {
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
-  x("hi"){(core::Object*) →* dynamic};
-  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
+  (core::Object) → dynamic x = (new self::D::•().{self::C::g4}(){() → (core::int) → dynamic} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::int) → dynamic) as{ForNonNullableByDefault} (core::Object) → dynamic;
+  x("hi"){(core::Object) → dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
index 92a85fa..fdf2295 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
@@ -1,40 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f(covariant-by-class self::C::T* x) → void
+  method f(covariant-by-class self::C::T% x) → void
     ;
-  method g1(covariant-by-class self::C::T* x) → void
+  method g1(covariant-by-class self::C::T% x) → void
     ;
-  method g2(covariant-by-class self::C::T* x) → void
+  method g2(covariant-by-class self::C::T% x) → void
     ;
-  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void
+  method g3(covariant-by-class self::C<self::C::T%> c, covariant-by-class self::C::T% x) → void
     ;
-  method g4() → (self::C::T*) →* dynamic
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class D extends self::C<core::int*> {
-  synthetic constructor •() → self::D*
+  method g4() → (self::C::T%) → dynamic
     ;
 }
-class E extends self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     ;
-  method f(covariant-by-declaration covariant-by-class core::int* x) → void
+}
+class E extends self::C<core::num> {
+  synthetic constructor •() → self::E
+    ;
+  method f(covariant-by-declaration covariant-by-class core::int x) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
index 1efedac..5a2aec7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
@@ -1,49 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::C::T* x) → void {}
-  method g1(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method f(covariant-by-class self::C::T% x) → void {}
+  method g1(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g2(covariant-by-class self::C::T* x) → void {
-    this.{self::C::f}(x){(self::C::T*) →* void};
+  method g2(covariant-by-class self::C::T% x) → void {
+    this.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
-    c.{self::C::f}(x){(self::C::T*) →* void};
+  method g3(covariant-by-class self::C<self::C::T%> c, covariant-by-class self::C::T% x) → void {
+    c.{self::C::f}(x){(self::C::T%) → void};
   }
-  method g4() → (self::C::T*) →* dynamic
-    return this.{self::C::f}{(self::C::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g4() → (self::C::T%) → dynamic
+    return this.{self::C::f}{(self::C::T%) → void};
 }
-class D extends self::C<core::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class E extends self::C<core::num*> {
-  synthetic constructor •() → self::E*
+class E extends self::C<core::num> {
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
+  method f(covariant-by-declaration covariant-by-class core::int x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
-  x("hi"){(core::Object*) →* dynamic};
-  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
+  (core::Object) → dynamic x = (new self::D::•().{self::C::g4}(){() → (core::int) → dynamic} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::int) → dynamic) as{ForNonNullableByDefault} (core::Object) → dynamic;
+  x("hi"){(core::Object) → dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart
index 282d831..1d1da45 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart
@@ -1,41 +1,41 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class B<T, U extends F<T>> {
-  B<T, F<T>> operator +(other) => null;
+  B<T, F<T>> operator +(other) => throw '';
 }
 
 class C {
-  B<num, F<num>> x;
-  static B<num, F<num>> y;
-  B<num, F<num>> operator [](int i) => null;
+  B<num, F<num>> x = throw '';
+  static B<num, F<num>> y = throw '';
+  B<num, F<num>> operator [](int i) => throw '';
   void operator []=(int i, B<num, F<num>> v) {}
 }
 
 void test1(B<num, F<num>> b) {
-  b /*@ checkReturn=B<num*, (num*) ->* void>* */ += 1;
-  var x = b /*@ checkReturn=B<num*, (num*) ->* void>* */ += 2;
+  b /*@checkReturn=B<num, (num) -> void>*/ += 1;
+  var x = b /*@checkReturn=B<num, (num) -> void>*/ += 2;
 }
 
 void test2(C c) {
-  c[0] /*@ checkReturn=B<num*, (num*) ->* void>* */ += 1;
-  var x = c[0] /*@ checkReturn=B<num*, (num*) ->* void>* */ += 2;
+  c[0] /*@checkReturn=B<num, (num) -> void>*/ += 1;
+  var x = c[0] /*@checkReturn=B<num, (num) -> void>*/ += 2;
 }
 
 void test3(C c) {
-  c.x /*@ checkReturn=B<num*, (num*) ->* void>* */ += 1;
-  var x = c.x /*@ checkReturn=B<num*, (num*) ->* void>* */ += 2;
+  c.x /*@checkReturn=B<num, (num) -> void>*/ += 1;
+  var x = c.x /*@checkReturn=B<num, (num) -> void>*/ += 2;
 }
 
 void test4(C c) {
-  C.y /*@ checkReturn=B<num*, (num*) ->* void>* */ += 1;
-  var x = C.y /*@ checkReturn=B<num*, (num*) ->* void>* */ += 2;
+  C.y /*@checkReturn=B<num, (num) -> void>*/ += 1;
+  var x = C.y /*@checkReturn=B<num, (num) -> void>*/ += 2;
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline.expect
index e5e025e..fcbbcb9 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class B<T, U extends F<T>> {
-  B<T, F<T>> operator +(other) => null;
+  B<T, F<T>> operator +(other) => throw '';
 }
 
 class C {
-  B<num, F<num>> x;
-  static B<num, F<num>> y;
-  B<num, F<num>> operator [](int i) => null;
+  B<num, F<num>> x = throw '';
+  static B<num, F<num>> y = throw '';
+  B<num, F<num>> operator [](int i) => throw '';
   void operator []=(int i, B<num, F<num>> v) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline_modelled.expect
index 68b1d9d..4a280b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.textual_outline_modelled.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 library test;
 
 class B<T, U extends F<T>> {
-  B<T, F<T>> operator +(other) => null;
+  B<T, F<T>> operator +(other) => throw '';
 }
 
 class C {
-  B<num, F<num>> operator [](int i) => null;
-  B<num, F<num>> x;
-  static B<num, F<num>> y;
+  B<num, F<num>> operator [](int i) => throw '';
+  B<num, F<num>> x = throw '';
+  static B<num, F<num>> y = throw '';
   void operator []=(int i, B<num, F<num>> v) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
index d266b53..124f096 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
@@ -1,59 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic, U extends (self::B::T%) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%, self::B::U>
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B<self::B::T%, (self::B::T%) → void>
+    return throw "";
 }
 class C extends core::Object {
-  field self::B<core::num*, (core::num*) →* void>* x = null;
-  static field self::B<core::num*, (core::num*) →* void>* y = null;
-  synthetic constructor •() → self::C*
+  field self::B<core::num, (core::num) → void> x = throw "";
+  static field self::B<core::num, (core::num) → void> y = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<core::num, (core::num) → void>
+    return throw "";
+  operator []=(core::int i, self::B<core::num, (core::num) → void> v) → void {}
 }
-static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test1(self::B<core::num, (core::num) → void> b) → void {
+  b = b.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = b = b.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
+static method test2(self::C c) → void {
+  let final self::C #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>){(core::int, self::B<core::num, (core::num) → void>) → void};
+  self::B<core::num, (core::num) → void> x = let final self::C #t3 = c in let final core::int #t4 = 0 in let final self::B<core::num, (core::num) → void> #t5 = #t3.{self::C::[]}(#t4){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void> in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<core::num, (core::num) → void>) → void} in #t5;
 }
-static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test3(self::C c) → void {
+  let final self::C #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = let final self::C #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test4(self::C c) → void {
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect
index d266b53..124f096 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect
@@ -1,59 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic, U extends (self::B::T%) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%, self::B::U>
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B<self::B::T%, (self::B::T%) → void>
+    return throw "";
 }
 class C extends core::Object {
-  field self::B<core::num*, (core::num*) →* void>* x = null;
-  static field self::B<core::num*, (core::num*) →* void>* y = null;
-  synthetic constructor •() → self::C*
+  field self::B<core::num, (core::num) → void> x = throw "";
+  static field self::B<core::num, (core::num) → void> y = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<core::num, (core::num) → void>
+    return throw "";
+  operator []=(core::int i, self::B<core::num, (core::num) → void> v) → void {}
 }
-static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test1(self::B<core::num, (core::num) → void> b) → void {
+  b = b.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = b = b.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
+static method test2(self::C c) → void {
+  let final self::C #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>){(core::int, self::B<core::num, (core::num) → void>) → void};
+  self::B<core::num, (core::num) → void> x = let final self::C #t3 = c in let final core::int #t4 = 0 in let final self::B<core::num, (core::num) → void> #t5 = #t3.{self::C::[]}(#t4){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void> in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<core::num, (core::num) → void>) → void} in #t5;
 }
-static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test3(self::C c) → void {
+  let final self::C #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = let final self::C #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test4(self::C c) → void {
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.outline.expect
index fcd72a0..6c23f8d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.outline.expect
@@ -1,51 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic, U extends (self::B::T%) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%, self::B::U>
     ;
-  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
+  operator +(dynamic other) → self::B<self::B::T%, (self::B::T%) → void>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::B<core::num*, (core::num*) →* void>* x;
-  static field self::B<core::num*, (core::num*) →* void>* y;
-  synthetic constructor •() → self::C*
+  field self::B<core::num, (core::num) → void> x;
+  static field self::B<core::num, (core::num) → void> y;
+  synthetic constructor •() → self::C
     ;
-  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
+  operator [](core::int i) → self::B<core::num, (core::num) → void>
     ;
-  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void
+  operator []=(core::int i, self::B<core::num, (core::num) → void> v) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test1(self::B<core::num*, (core::num*) →* void>* b) → void
+static method test1(self::B<core::num, (core::num) → void> b) → void
   ;
-static method test2(self::C* c) → void
+static method test2(self::C c) → void
   ;
-static method test3(self::C* c) → void
+static method test3(self::C c) → void
   ;
-static method test4(self::C* c) → void
+static method test4(self::C c) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
index 28b2e93..46d6732 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
@@ -1,60 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic, U extends (self::B::T%) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%, self::B::U>
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B<self::B::T%, (self::B::T%) → void>
+    return throw "";
 }
 class C extends core::Object {
-  field self::B<core::num*, (core::num*) →* void>* x = null;
-  static field self::B<core::num*, (core::num*) →* void>* y = null;
-  synthetic constructor •() → self::C*
+  field self::B<core::num, (core::num) → void> x = throw "";
+  static field self::B<core::num, (core::num) → void> y = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<core::num, (core::num) → void>
+    return throw "";
+  operator []=(core::int i, self::B<core::num, (core::num) → void> v) → void {}
 }
-static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test1(self::B<core::num, (core::num) → void> b) → void {
+  b = b.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = b = b.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
+static method test2(self::C c) → void {
+  let final self::C #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>){(core::int, self::B<core::num, (core::num) → void>) → void};
+  self::B<core::num, (core::num) → void> x = let final self::C #t3 = c in let final core::int #t4 = 0 in let final self::B<core::num, (core::num) → void> #t5 = #t3.{self::C::[]}(#t4){(core::int) → self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void> in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<core::num, (core::num) → void>) → void} in #t5;
 }
-static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test3(self::C c) → void {
+  let final self::C #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = let final self::C #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num, (core::num) → void>}.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
-static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+static method test4(self::C c) → void {
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
+  self::B<core::num, (core::num) → void> x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) → self::B<core::num, (core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<core::num, (core::num) → void>;
 }
 static method main() → void {}
 
@@ -64,4 +44,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_combiner.dart:27:5 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_combiner.dart:28:13 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_combiner.dart:28:13 -> IntConstant(0)
-Extra constant evaluation: evaluated: 58, effectively constant: 4
+Extra constant evaluation: evaluated: 62, effectively constant: 4
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart
index 6efbcbc..1e248ad 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -46,11 +48,11 @@
   // But not this one:
   //   (num)->num
   D d = new D(new C(numToInt));
-  d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+  d.value /*@checkReturn=(num*) ->* num**/ += 1;
   expect(d.setValue(0), 1);
   d = new D(new C(numToNum));
   expectTypeError(() {
-    d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+    d.value /*@checkReturn=(num*) ->* num**/ += 1;
   });
   expect(d.setValue, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
index edcb17e..e4fa7a2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:30:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
 //  - 'C' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart'.
 //   C<num> get value => getValue;
 //              ^^^^^
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:12: Context: This is the declaration of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:34:12: Context: This is the declaration of the setter 'D.value'.
 //   void set value(int Function(int) value) {
 //            ^^^^^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                              ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//   d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                                ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//     d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                              ^
 //
 import self as self;
 import "dart:core" as core;
@@ -80,15 +80,15 @@
   return 2;
 static method main() → void {
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
-  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-  d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                           ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
-    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-    d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                             ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect
index edcb17e..e4fa7a2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:30:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
 //  - 'C' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart'.
 //   C<num> get value => getValue;
 //              ^^^^^
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:12: Context: This is the declaration of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:34:12: Context: This is the declaration of the setter 'D.value'.
 //   void set value(int Function(int) value) {
 //            ^^^^^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                              ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//   d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                                ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//     d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                              ^
 //
 import self as self;
 import "dart:core" as core;
@@ -80,15 +80,15 @@
   return 2;
 static method main() → void {
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
-  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-  d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                           ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
-    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-    d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                             ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.outline.expect
index fa1259d..c3f93cc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:30:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
 //  - 'C' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart'.
 //   C<num> get value => getValue;
 //              ^^^^^
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:12: Context: This is the declaration of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:34:12: Context: This is the declaration of the setter 'D.value'.
 //   void set value(int Function(int) value) {
 //            ^^^^^
 //
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
index bafb1cc..d14fa8c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:30:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
 //  - 'C' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart'.
 //   C<num> get value => getValue;
 //              ^^^^^
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:12: Context: This is the declaration of the setter 'D.value'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:34:12: Context: This is the declaration of the setter 'D.value'.
 //   void set value(int Function(int) value) {
 //            ^^^^^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                              ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//   d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-//     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-//                                                ^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//     d.value /*@checkReturn=(num*) ->* num**/ += 1;
+//                                              ^
 //
 import self as self;
 import "dart:core" as core;
@@ -80,15 +80,15 @@
   return 2;
 static method main() → void {
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
-  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-  d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:44: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                           ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
-    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
-    d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:55:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    d.value /*@checkReturn=(num*) ->* num**/ += 1;
+                                             ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
@@ -99,5 +99,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:21 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_generic_return_with_compound_assign_implicit_downcast.dart:52:21 -> IntConstant(0)
 Extra constant evaluation: evaluated: 46, effectively constant: 1
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart
index 4c8c9a7..bff2605 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -12,15 +14,15 @@
 }
 
 class C<T> {
-  B<F<T>> get x => null;
+  B<F<T>> get x => throw '';
   void set x(B<F<T>> value) {}
 }
 
 void test(C<num> c) {
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-  var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-  var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
+  c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+  var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+  c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+  var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline.expect
index 0b43ccc..2b0be85 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline.expect
@@ -8,7 +8,7 @@
 }
 
 class C<T> {
-  B<F<T>> get x => null;
+  B<F<T>> get x => throw '';
   void set x(B<F<T>> value) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline_modelled.expect
index c0bc672..30a234a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.textual_outline_modelled.expect
@@ -6,7 +6,7 @@
 }
 
 class C<T> {
-  B<F<T>> get x => null;
+  B<F<T>> get x => throw '';
   void set x(B<F<T>> value) {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
index c730f2f..6a43f50 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                      ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                    ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                              ^
+//   var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                       ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                     ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                               ^
+//   var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
@@ -48,7 +48,7 @@
     : super core::Object::•()
     ;
   get x() → self::B<(self::C::T*) →* void>*
-    return null;
+    return throw "";
   set x(self::B<(self::C::T*) →* void>* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -62,21 +62,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                   ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                           ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                    ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
+  var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                            ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect
index c730f2f..6a43f50 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                      ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                    ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                              ^
+//   var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                       ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                     ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                               ^
+//   var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
@@ -48,7 +48,7 @@
     : super core::Object::•()
     ;
   get x() → self::B<(self::C::T*) →* void>*
-    return null;
+    return throw "";
   set x(self::B<(self::C::T*) →* void>* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -62,21 +62,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                   ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                           ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                    ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
+  var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                            ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
index c730f2f..6a43f50 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                      ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                    ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-//                                                              ^
+//   var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+//                                                            ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                       ^
+//   c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                     ^
 //
-// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
 //  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-//   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-//                                                               ^
+//   var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
@@ -48,7 +48,7 @@
     : super core::Object::•()
     ;
   get x() → self::B<(self::C::T*) →* void>*
-    return null;
+    return throw "";
   set x(self::B<(self::C::T*) →* void>* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -62,21 +62,21 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                   ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
-  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  var y = c. /*@checkReturn=B<(num*) ->* void>**/ x += new B<num>();
+                                                           ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:53: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                    ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:25:61: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
-  var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
-                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
+  var z = c. /*@checkReturn=B<(num*) ->* void>**/ x ??= new B<num>();
+                                                            ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart
new file mode 100644
index 0000000..bda0153
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart
@@ -0,0 +1,28 @@
+// 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.
+
+/*@testedFeatures=checks*/
+library test;
+
+typedef void F<T>(T x);
+
+class B<T> {
+  B<T> operator +(B<T> other) => throw '';
+}
+
+class C<T> {
+  B<F<T>> get x => throw '';
+  void set x(B<F<T>> value) {}
+  B<F<T>>? get x2 => null;
+  void set x2(B<F<T>>? value) {}
+}
+
+void test(C<num> c) {
+  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+  c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+  var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline.expect
new file mode 100644
index 0000000..ee91c60
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+library test;
+
+typedef void F<T>(T x);
+
+class B<T> {
+  B<T> operator +(B<T> other) => throw '';
+}
+
+class C<T> {
+  B<F<T>> get x => throw '';
+  void set x(B<F<T>> value) {}
+  B<F<T>>? get x2 => null;
+  void set x2(B<F<T>>? value) {}
+}
+
+void test(C<num> c) {}
+main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..19cfea8
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+library test;
+
+class B<T> {
+  B<T> operator +(B<T> other) => throw '';
+}
+
+class C<T> {
+  B<F<T>>? get x2 => null;
+  B<F<T>> get x => throw '';
+  void set x(B<F<T>> value) {}
+  void set x2(B<F<T>>? value) {}
+}
+
+main() {}
+typedef void F<T>(T x);
+void test(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.expect
new file mode 100644
index 0000000..4eb28a0
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.expect
@@ -0,0 +1,65 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                 ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                         ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                    ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get x() → self::B<(self::C::T%) → void>
+    return throw "";
+  set x(self::B<(self::C::T%) → void> value) → void {}
+  get x2() → self::B<(self::C::T%) → void>?
+    return null;
+  set x2(self::B<(self::C::T%) → void>? value) → void {}
+}
+static method test(self::C<core::num> c) → void {
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  self::B<(core::num) → void> y = let final self::C<core::num> #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                        ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  let final self::C<core::num> #t3 = c in #t3.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<core::Object>} #t3.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                   ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : null;
+  self::B<core::Object> z = let final self::C<core::num> #t4 = c in let final self::B<(core::num) → void>? #t5 = #t4.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t5 == null ?{self::B<core::Object>} #t4.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                           ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : #t5{self::B<(core::num) → void>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.modular.expect
new file mode 100644
index 0000000..4eb28a0
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                 ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                         ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                    ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get x() → self::B<(self::C::T%) → void>
+    return throw "";
+  set x(self::B<(self::C::T%) → void> value) → void {}
+  get x2() → self::B<(self::C::T%) → void>?
+    return null;
+  set x2(self::B<(self::C::T%) → void>? value) → void {}
+}
+static method test(self::C<core::num> c) → void {
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  self::B<(core::num) → void> y = let final self::C<core::num> #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                        ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  let final self::C<core::num> #t3 = c in #t3.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<core::Object>} #t3.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                   ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : null;
+  self::B<core::Object> z = let final self::C<core::num> #t4 = c in let final self::B<(core::num) → void>? #t5 = #t4.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t5 == null ?{self::B<core::Object>} #t4.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                           ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : #t5{self::B<(core::num) → void>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.outline.expect
new file mode 100644
index 0000000..1048571
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.outline.expect
@@ -0,0 +1,27 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
+    ;
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    ;
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    ;
+  get x() → self::B<(self::C::T%) → void>
+    ;
+  set x(self::B<(self::C::T%) → void> value) → void
+    ;
+  get x2() → self::B<(self::C::T%) → void>?
+    ;
+  set x2(self::B<(self::C::T%) → void>? value) → void
+    ;
+}
+static method test(self::C<core::num> c) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4eb28a0
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart.weak.transformed.expect
@@ -0,0 +1,65 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                 ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+//                                                         ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                    ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+//   var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+//                                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get x() → self::B<(self::C::T%) → void>
+    return throw "";
+  set x(self::B<(self::C::T%) → void> value) → void {}
+  get x2() → self::B<(self::C::T%) → void>?
+    return null;
+  set x2(self::B<(self::C::T%) → void>? value) → void {}
+}
+static method test(self::C<core::num> c) → void {
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:22:49: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  self::B<(core::num) → void> y = let final self::C<core::num> #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:23:57: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                        ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>){(self::B<(core::num) → void>) → self::B<(core::num) → void>};
+  let final self::C<core::num> #t3 = c in #t3.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<core::Object>} #t3.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:24:52: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                   ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : null;
+  self::B<core::Object> z = let final self::C<core::num> #t4 = c in let final self::B<(core::num) → void>? #t5 = #t4.{self::C::x2}{self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t5 == null ?{self::B<core::Object>} #t4.{self::C::x2} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart:25:60: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>?'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign2.dart'.
+  var z = c. /*@checkReturn=B<(num) -> void>?*/ x2 ??= new B<num>();
+                                                           ^" in new self::B::•<core::num>() as{TypeError,ForNonNullableByDefault} self::B<(core::num) → void>? : #t5{self::B<(core::num) → void>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart
index e935be9..b3a63a8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart
@@ -1,27 +1,33 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class B<T> {
-  B<T> operator +(B<T> other) => null;
+  B<T> operator +(B<T> other) => throw '';
 }
 
 class C<T> {
-  B<F<T>> operator [](int i) => null;
+  B<F<T>> operator [](int i) => throw '';
   void operator []=(int i, B<F<T>> x) {}
 }
 
-void test(C<num> c) {
+class C2<T> {
+  B<F<T>>? operator [](int i) => throw '';
+  void operator []=(int i, B<F<T>>? x) {}
+}
+
+void test(C<num> c, C2<num> c2) {
   c[0] = new B<F<num>>();
-  c /*@ checkReturn=B<(num*) ->* void>* */ [0] += new B<F<num>>();
-  var x = c /*@ checkReturn=B<(num*) ->* void>* */ [0] += new B<F<num>>();
-  c /*@ checkReturn=B<(num*) ->* void>* */ [0] ??= new B<F<num>>();
-  var y = c /*@ checkReturn=B<(num*) ->* void>* */ [0] ??= new B<F<num>>();
+  c2[0] = new B<F<num>>();
+  c /*@checkReturn=B<(num) -> void>*/ [0] += new B<F<num>>();
+  var x = c /*@checkReturn=B<(num) -> void>*/ [0] += new B<F<num>>();
+  c2 /*@checkReturn=B<(num) -> void>?*/ [0] ??= new B<F<num>>();
+  var y = c2 /*@checkReturn=B<(num) -> void>?*/ [0] ??= new B<F<num>>();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline.expect
index 25e6f2f..9a51abc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline.expect
@@ -1,16 +1,20 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class B<T> {
-  B<T> operator +(B<T> other) => null;
+  B<T> operator +(B<T> other) => throw '';
 }
 
 class C<T> {
-  B<F<T>> operator [](int i) => null;
+  B<F<T>> operator [](int i) => throw '';
   void operator []=(int i, B<F<T>> x) {}
 }
 
-void test(C<num> c) {}
+class C2<T> {
+  B<F<T>>? operator [](int i) => throw '';
+  void operator []=(int i, B<F<T>>? x) {}
+}
+
+void test(C<num> c, C2<num> c2) {}
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline_modelled.expect
index c7d6555..00281b6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.textual_outline_modelled.expect
@@ -1,15 +1,19 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  B<T> operator +(B<T> other) => null;
+  B<T> operator +(B<T> other) => throw '';
 }
 
 class C<T> {
-  B<F<T>> operator [](int i) => null;
+  B<F<T>> operator [](int i) => throw '';
   void operator []=(int i, B<F<T>> x) {}
 }
 
+class C2<T> {
+  B<F<T>>? operator [](int i) => throw '';
+  void operator []=(int i, B<F<T>>? x) {}
+}
+
 main() {}
 typedef void F<T>(T x);
-void test(C<num> c) {}
+void test(C<num> c, C2<num> c2) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
index 3769315..266a5d7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
@@ -1,48 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<(self::C::T*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<(self::C::T*) →* void>* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<(self::C::T%) → void>
+    return throw "";
+  operator []=(core::int i, self::B<(self::C::T%) → void> x) → void {}
 }
-static method test(self::C<core::num*>* c) → void {
-  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
+class C2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::T%>
+    : super core::Object::•()
+    ;
+  operator [](core::int i) → self::B<(self::C2::T%) → void>?
+    return throw "";
+  operator []=(core::int i, self::B<(self::C2::T%) → void>? x) → void {}
+}
+static method test(self::C<core::num> c, self::C2<core::num> c2) → void {
+  c.{self::C::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>) → void};
+  c2.{self::C2::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void};
+  let final self::C<core::num> #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>}){(core::int, self::B<(core::num) → void>) → void};
+  self::B<(core::num) → void> x = let final self::C<core::num> #t3 = c in let final core::int #t4 = 0 in let final self::B<(core::num) → void> #t5 = (#t3.{self::C::[]}(#t4){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<(core::num) → void>) → void} in #t5;
+  let final self::C2<core::num> #t7 = c2 in let final core::int #t8 = 0 in #t7.{self::C2::[]}(#t8){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<(core::num) → void>} #t7.{self::C2::[]=}(#t8, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void} : null;
+  self::B<(core::num) → void> y = let final self::C2<core::num> #t9 = c2 in let final core::int #t10 = 0 in let final self::B<(core::num) → void>? #t11 = #t9.{self::C2::[]}(#t10){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t11 == null ?{self::B<(core::num) → void>} let final self::B<(core::num) → void> #t12 = new self::B::•<(core::num) → void>() in let final void #t13 = #t9.{self::C2::[]=}(#t10, #t12){(core::int, self::B<(core::num) → void>?) → void} in #t12 : #t11{self::B<(core::num) → void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect
index 3769315..266a5d7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect
@@ -1,48 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<(self::C::T*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<(self::C::T*) →* void>* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<(self::C::T%) → void>
+    return throw "";
+  operator []=(core::int i, self::B<(self::C::T%) → void> x) → void {}
 }
-static method test(self::C<core::num*>* c) → void {
-  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
+class C2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::T%>
+    : super core::Object::•()
+    ;
+  operator [](core::int i) → self::B<(self::C2::T%) → void>?
+    return throw "";
+  operator []=(core::int i, self::B<(self::C2::T%) → void>? x) → void {}
+}
+static method test(self::C<core::num> c, self::C2<core::num> c2) → void {
+  c.{self::C::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>) → void};
+  c2.{self::C2::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void};
+  let final self::C<core::num> #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>}){(core::int, self::B<(core::num) → void>) → void};
+  self::B<(core::num) → void> x = let final self::C<core::num> #t3 = c in let final core::int #t4 = 0 in let final self::B<(core::num) → void> #t5 = (#t3.{self::C::[]}(#t4){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<(core::num) → void>) → void} in #t5;
+  let final self::C2<core::num> #t7 = c2 in let final core::int #t8 = 0 in #t7.{self::C2::[]}(#t8){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<(core::num) → void>} #t7.{self::C2::[]=}(#t8, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void} : null;
+  self::B<(core::num) → void> y = let final self::C2<core::num> #t9 = c2 in let final core::int #t10 = 0 in let final self::B<(core::num) → void>? #t11 = #t9.{self::C2::[]}(#t10){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t11 == null ?{self::B<(core::num) → void>} let final self::B<(core::num) → void> #t12 = new self::B::•<(core::num) → void>() in let final void #t13 = #t9.{self::C2::[]=}(#t10, #t12){(core::int, self::B<(core::num) → void>?) → void} in #t12 : #t11{self::B<(core::num) → void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
index d74cdc8..36c8715 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
@@ -1,43 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  operator [](core::int* i) → self::B<(self::C::T*) →* void>*
+  operator [](core::int i) → self::B<(self::C::T%) → void>
     ;
-  operator []=(core::int* i, self::B<(self::C::T*) →* void>* x) → void
+  operator []=(core::int i, self::B<(self::C::T%) → void> x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C<core::num*>* c) → void
+class C2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::T%>
+    ;
+  operator [](core::int i) → self::B<(self::C2::T%) → void>?
+    ;
+  operator []=(core::int i, self::B<(self::C2::T%) → void>? x) → void
+    ;
+}
+static method test(self::C<core::num> c, self::C2<core::num> c2) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
index 6e2827f..9cbbc0b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
@@ -1,60 +1,49 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(covariant-by-class self::B<self::B::T%> other) → self::B<self::B::T%>
+    return throw "";
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::B<(self::C::T*) →* void>*
-    return null;
-  operator []=(core::int* i, self::B<(self::C::T*) →* void>* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::B<(self::C::T%) → void>
+    return throw "";
+  operator []=(core::int i, self::B<(self::C::T%) → void> x) → void {}
 }
-static method test(self::C<core::num*>* c) → void {
-  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
+class C2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::T%>
+    : super core::Object::•()
+    ;
+  operator [](core::int i) → self::B<(self::C2::T%) → void>?
+    return throw "";
+  operator []=(core::int i, self::B<(self::C2::T%) → void>? x) → void {}
+}
+static method test(self::C<core::num> c, self::C2<core::num> c2) → void {
+  c.{self::C::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>) → void};
+  c2.{self::C2::[]=}(0, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void};
+  let final self::C<core::num> #t1 = c in let final core::int #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>}){(core::int, self::B<(core::num) → void>) → void};
+  self::B<(core::num) → void> x = let final self::C<core::num> #t3 = c in let final core::int #t4 = 0 in let final self::B<(core::num) → void> #t5 = (#t3.{self::C::[]}(#t4){(core::int) → self::B<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>).{self::B::+}(new self::B::•<(core::num) → void>()){(self::B<(core::num) → void>) → self::B<(core::num) → void>} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int, self::B<(core::num) → void>) → void} in #t5;
+  let final self::C2<core::num> #t7 = c2 in let final core::int #t8 = 0 in #t7.{self::C2::[]}(#t8){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? == null ?{self::B<(core::num) → void>} #t7.{self::C2::[]=}(#t8, new self::B::•<(core::num) → void>()){(core::int, self::B<(core::num) → void>?) → void} : null;
+  self::B<(core::num) → void> y = let final self::C2<core::num> #t9 = c2 in let final core::int #t10 = 0 in let final self::B<(core::num) → void>? #t11 = #t9.{self::C2::[]}(#t10){(core::int) → self::B<(core::num) → void>?} as{TypeError,CovarianceCheck,ForNonNullableByDefault} self::B<(core::num) → void>? in #t11 == null ?{self::B<(core::num) → void>} let final self::B<(core::num) → void> #t12 = new self::B::•<(core::num) → void>() in let final void #t13 = #t9.{self::C2::[]=}(#t10, #t12){(core::int, self::B<(core::num) → void>?) → void} in #t12 : #t11{self::B<(core::num) → void>};
 }
 static method main() → dynamic {}
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:21:45 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:21:45 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:22:53 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:22:53 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:23:45 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:23:45 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:24:53 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:24:53 -> IntConstant(0)
-Extra constant evaluation: evaluated: 64, effectively constant: 8
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:27:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:27:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:28:48 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:28:48 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:29:42 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:29:42 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:30:50 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///contravariant_index_assign.dart:30:50 -> IntConstant(0)
+Extra constant evaluation: evaluated: 70, effectively constant: 8
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart
index dfab294..7c3ebc8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart
@@ -1,18 +1,18 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> operator [](int i) => null;
+  F<T> operator [](int i) => throw '';
 }
 
 F<num> test(C<num> c) {
-  return c /*@ checkReturn=(num*) ->* void */ [0];
+  return c /*@checkReturn=(num) -> void*/ [0];
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline.expect
index 800ea5e..69e660e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T x);
 
 class C<T> {
-  F<T> operator [](int i) => null;
+  F<T> operator [](int i) => throw '';
 }
 
 F<num> test(C<num> c) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline_modelled.expect
index ee7266a..f3b356a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 F<num> test(C<num> c) {}
 
 class C<T> {
-  F<T> operator [](int i) => null;
+  F<T> operator [](int i) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
index 906d2cb..d10e5c2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → (self::C::T*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → (self::C::T%) → void
+    return throw "";
 }
-static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method test(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::[]}(0){(core::int) → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect
index 906d2cb..d10e5c2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → (self::C::T*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → (self::C::T%) → void
+    return throw "";
 }
-static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method test(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::[]}(0){(core::int) → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.outline.expect
index 305e8fb..93eab98 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  operator [](core::int* i) → (self::C::T*) →* void
+  operator [](core::int i) → (self::C::T%) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C<core::num*>* c) → (core::num*) →* void
+static method test(self::C<core::num> c) → (core::num) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
index 906d2cb..d10e5c2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator [](core::int* i) → (self::C::T*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → (self::C::T%) → void
+    return throw "";
 }
-static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+static method test(self::C<core::num> c) → (core::num) → void {
+  return c.{self::C::[]}(0){(core::int) → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart
index b194037..e859580 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B<T> {
   void f(T x) {}
-  void g({T x}) {}
+  void g({required T x}) {}
   void h<U extends T>() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline.expect
index 17a00a3..68bef4a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
   void f(T x) {}
-  void g({T x}) {}
+  void g({required T x}) {}
   void h<U extends T>() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline_modelled.expect
index fc92324..aff3c3f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
   void f(T x) {}
-  void g({T x}) {}
+  void g({required T x}) {}
   void h<U extends T>() {}
 }
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
index 80e45ff..e03c9a3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x) → void {}
-  method g({covariant-by-class self::B::T* x = #C1}) → void {}
-  method h<covariant-by-class U extends self::B::T*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x) → void {}
+  method g({required covariant-by-class self::B::T% x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T%>() → void {}
 }
-class C extends self::B<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
-static method g1(self::B<core::num*>* b) → void {
-  b.{self::B::f}(1.5){(core::num*) →* void};
+static method g1(self::B<core::num> b) → void {
+  b.{self::B::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → void {
-  c.{self::B::f}(1){(core::int*) →* void};
+static method g2(self::C c) → void {
+  c.{self::B::f}(1){(core::int) → void};
 }
 static method test() → void {
   self::g1(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect
index 80e45ff..e03c9a3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x) → void {}
-  method g({covariant-by-class self::B::T* x = #C1}) → void {}
-  method h<covariant-by-class U extends self::B::T*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x) → void {}
+  method g({required covariant-by-class self::B::T% x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T%>() → void {}
 }
-class C extends self::B<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
-static method g1(self::B<core::num*>* b) → void {
-  b.{self::B::f}(1.5){(core::num*) →* void};
+static method g1(self::B<core::num> b) → void {
+  b.{self::B::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → void {
-  c.{self::B::f}(1){(core::int*) →* void};
+static method g2(self::C c) → void {
+  c.{self::B::f}(1){(core::int) → void};
 }
 static method test() → void {
   self::g1(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
index 3139116..22337b5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method f(covariant-by-class self::B::T* x) → void
+  method f(covariant-by-class self::B::T% x) → void
     ;
-  method g({covariant-by-class self::B::T* x = null}) → void
+  method g({required covariant-by-class self::B::T% x = null}) → void
     ;
-  method h<covariant-by-class U extends self::B::T*>() → void
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class C extends self::B<core::int*> {
-  synthetic constructor •() → self::C*
+  method h<covariant-by-class U extends self::B::T%>() → void
     ;
 }
-static method g1(self::B<core::num*>* b) → void
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    ;
+}
+static method g1(self::B<core::num> b) → void
   ;
-static method g2(self::C* c) → void
+static method g2(self::C c) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
index 80e45ff..e03c9a3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x) → void {}
-  method g({covariant-by-class self::B::T* x = #C1}) → void {}
-  method h<covariant-by-class U extends self::B::T*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x) → void {}
+  method g({required covariant-by-class self::B::T% x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T%>() → void {}
 }
-class C extends self::B<core::int*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
-static method g1(self::B<core::num*>* b) → void {
-  b.{self::B::f}(1.5){(core::num*) →* void};
+static method g1(self::B<core::num> b) → void {
+  b.{self::B::f}(1.5){(core::num) → void};
 }
-static method g2(self::C* c) → void {
-  c.{self::B::f}(1){(core::int*) →* void};
+static method g2(self::C c) → void {
+  c.{self::B::f}(1){(core::int) → void};
 }
 static method test() → void {
   self::g1(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart
index 73be4e2..0ca96ab 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B<T> {
-  T x;
+  T x = throw '';
 }
 
 class C extends B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline.expect
index c2a9e1e..9b3ed2f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  T x;
+  T x = throw '';
 }
 
 class C extends B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline_modelled.expect
index c2a9e1e..9b3ed2f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  T x;
+  T x = throw '';
 }
 
 class C extends B<num> {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
index 985b00d..a85121e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect
index 985b00d..a85121e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
index 07175fc..c34aba7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::num> {
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
index 985b00d..a85121e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B<core::num*> {
-  synthetic constructor •() → self::C*
+class C extends self::B<core::num> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart
index de25e30..f3c119d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B {
-  covariant num x;
+  covariant num x = 0;
 }
 
 class C {
-  int x;
+  int x = 0;
 }
 
 class D extends C implements B {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline.expect
index 84550a3..e4c7222 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class B {
-  covariant num x;
+  covariant num x = 0;
 }
 
 class C {
-  int x;
+  int x = 0;
 }
 
 class D extends C implements B {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline_modelled.expect
index 84550a3..e4c7222 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class B {
-  covariant num x;
+  covariant num x = 0;
 }
 
 class C {
-  int x;
+  int x = 0;
 }
 
 class D extends C implements B {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
index ec01d37..f775d70 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,7 +6,7 @@
 // class D extends C implements B {}
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
-//   int x;
+//   int x = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
 // class D extends C implements B {}
@@ -16,42 +16,22 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant-by-declaration field core::num* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-declaration core::num* value) → void
-    return super.{self::C::x} = value as core::int*;
+  forwarding-stub set x(covariant-by-declaration core::num value) → void
+    return super.{self::C::x} = value as core::int;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect
index ec01d37..f775d70 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,7 +6,7 @@
 // class D extends C implements B {}
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
-//   int x;
+//   int x = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
 // class D extends C implements B {}
@@ -16,42 +16,22 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant-by-declaration field core::num* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-declaration core::num* value) → void
-    return super.{self::C::x} = value as core::int*;
+  forwarding-stub set x(covariant-by-declaration core::num value) → void
+    return super.{self::C::x} = value as core::int;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
index 64b0707..9aebbf6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,7 +6,7 @@
 // class D extends C implements B {}
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
-//   int x;
+//   int x = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
 // class D extends C implements B {}
@@ -16,40 +16,20 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant-by-declaration field core::num* x;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num x;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  forwarding-stub set x(covariant-by-declaration core::num* value) → void
-    return super.{self::C::x} = value as core::int*;
+  forwarding-stub set x(covariant-by-declaration core::num value) → void
+    return super.{self::C::x} = value as core::int;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
index ec01d37..f775d70 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,7 +6,7 @@
 // class D extends C implements B {}
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
-//   int x;
+//   int x = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
 // class D extends C implements B {}
@@ -16,42 +16,22 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant-by-declaration field core::num* x = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant-by-declaration core::num* value) → void
-    return super.{self::C::x} = value as core::int*;
+  forwarding-stub set x(covariant-by-declaration core::num value) → void
+    return super.{self::C::x} = value as core::int;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart
index e3b91c9..fcb5d83 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline.expect
index cc05471..f3282d1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var topLevel;
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline_modelled.expect
index 755828d..5b85754 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.expect
index 05fc7de..42e8443 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   static field dynamic staticField = null;
   field dynamic instanceField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set staticSetter(dynamic x) → void {}
@@ -34,16 +34,6 @@
       localVar = #t7;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic topLevel;
 static set topLevelSetter(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect
index 05fc7de..42e8443 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   static field dynamic staticField = null;
   field dynamic instanceField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set staticSetter(dynamic x) → void {}
@@ -34,16 +34,6 @@
       localVar = #t7;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic topLevel;
 static set topLevelSetter(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.outline.expect
index 5e578da..06bd1ff 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   static field dynamic staticField;
   field dynamic instanceField;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   static set staticSetter(dynamic x) → void
     ;
@@ -13,16 +13,6 @@
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic topLevel;
 static set topLevelSetter(dynamic x) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.transformed.expect
index db63c41..14be1ca 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   static field dynamic staticField = null;
   field dynamic instanceField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static set staticSetter(dynamic x) → void {}
@@ -13,7 +13,7 @@
   method test() → void {
     dynamic localVar;
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -22,7 +22,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -31,7 +31,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -40,7 +40,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -49,7 +49,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t5 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -58,7 +58,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t6 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -67,7 +67,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -76,16 +76,6 @@
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic topLevel;
 static set topLevelSetter(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart
index d082c68..b2204f1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
 class B<T> {
-  T x;
-  T y;
+  T x = throw '';
+  T y = throw '';
 }
 
 // This class inherits genericImpl annotations from its superclass, but doesn't
 // have any members marked genericInterface because the inferred types of x and
 // y do not depend on the type parameter T.
 abstract class C<T> implements B<num> {
-  var x;
+  var x = throw '';
   get y;
   set y(value);
 }
@@ -22,7 +22,7 @@
 // This class also has members marked genericInterface, since the inferred types
 // of x and y *do* depend on the type parameter T.
 abstract class D<T> implements B<T> {
-  var x;
+  var x = throw '';
   get y;
   set y(value);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline.expect
index 672a0499..8fa0688 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline.expect
@@ -1,19 +1,18 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
-  T x;
-  T y;
+  T x = throw '';
+  T y = throw '';
 }
 
 abstract class C<T> implements B<num> {
-  var x;
+  var x = throw '';
   get y;
   set y(value);
 }
 
 abstract class D<T> implements B<T> {
-  var x;
+  var x = throw '';
   get y;
   set y(value);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline_modelled.expect
index 4497bc5..07f880e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.textual_outline_modelled.expect
@@ -1,21 +1,20 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> implements B<num> {
   get y;
   set y(value);
-  var x;
+  var x = throw '';
 }
 
 abstract class D<T> implements B<T> {
   get y;
   set y(value);
-  var x;
+  var x = throw '';
 }
 
 class B<T> {
-  T x;
-  T y;
+  T x = throw '';
+  T y = throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
index 7bfe030..96749f6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  covariant-by-class field self::B::T* y = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  covariant-by-class field self::B::T% y = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  covariant-by-class field core::num* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object implements self::B<core::num> {
+  covariant-by-class field core::num x = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract get y() → core::num*;
-  abstract set y(covariant-by-class core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → core::num;
+  abstract set y(covariant-by-class core::num value) → void;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  covariant-by-class field self::D::T* x = null;
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object implements self::B<self::D::T%> {
+  covariant-by-class field self::D::T% x = throw "";
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract get y() → self::D::T*;
-  abstract set y(covariant-by-class self::D::T* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → self::D::T%;
+  abstract set y(covariant-by-class self::D::T% value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect
index 7bfe030..96749f6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  covariant-by-class field self::B::T* y = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  covariant-by-class field self::B::T% y = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  covariant-by-class field core::num* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object implements self::B<core::num> {
+  covariant-by-class field core::num x = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract get y() → core::num*;
-  abstract set y(covariant-by-class core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → core::num;
+  abstract set y(covariant-by-class core::num value) → void;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  covariant-by-class field self::D::T* x = null;
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object implements self::B<self::D::T%> {
+  covariant-by-class field self::D::T% x = throw "";
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract get y() → self::D::T*;
-  abstract set y(covariant-by-class self::D::T* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → self::D::T%;
+  abstract set y(covariant-by-class self::D::T% value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
index 6e07a6c..29cc1f7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
@@ -1,56 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x;
-  covariant-by-class field self::B::T* y;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x;
+  covariant-by-class field self::B::T% y;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  covariant-by-class field core::num* x;
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object implements self::B<core::num> {
+  covariant-by-class field core::num x;
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract get y() → core::num*;
-  abstract set y(covariant-by-class core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → core::num;
+  abstract set y(covariant-by-class core::num value) → void;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  covariant-by-class field self::D::T* x;
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object implements self::B<self::D::T%> {
+  covariant-by-class field self::D::T% x;
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract get y() → self::D::T*;
-  abstract set y(covariant-by-class self::D::T* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → self::D::T%;
+  abstract set y(covariant-by-class self::D::T% value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
index 7bfe030..96749f6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::B::T* x = null;
-  covariant-by-class field self::B::T* y = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T% x = throw "";
+  covariant-by-class field self::B::T% y = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  covariant-by-class field core::num* x = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract class C<T extends core::Object? = dynamic> extends core::Object implements self::B<core::num> {
+  covariant-by-class field core::num x = throw "";
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract get y() → core::num*;
-  abstract set y(covariant-by-class core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → core::num;
+  abstract set y(covariant-by-class core::num value) → void;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  covariant-by-class field self::D::T* x = null;
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object implements self::B<self::D::T%> {
+  covariant-by-class field self::D::T% x = throw "";
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract get y() → self::D::T*;
-  abstract set y(covariant-by-class self::D::T* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get y() → self::D::T%;
+  abstract set y(covariant-by-class self::D::T% value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart
index 2a1a47e..0da29312c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart
index c13bc20..bfda104 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
@@ -44,8 +44,8 @@
 }
 
 class M {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 class C = B with M implements I<int>;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline.expect
index 0765c2b..80b1933 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void expectTypeError(void callback()) {}
@@ -19,8 +18,8 @@
 }
 
 class M {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 class C = B with M implements I<int>;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline_modelled.expect
index 5cec6be..204e623 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
@@ -18,8 +17,8 @@
 class C = B with M implements I<int>;
 
 class M {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 void expect(Object value, Object expected) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
index 99c30ab..4313fc3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Context: The field 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'I.y'.
 //  - 'Object' is from 'dart:core'.
-//   int y;
+//   int y = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
 //   void set y(covariant Object value);
@@ -17,105 +17,75 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::M*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 1;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 2;
-  self::expect(i.{self::I::y}{core::Object*}, 2);
+  self::expect(i.{self::I::y}{core::Object}, 2);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect
index 99c30ab..4313fc3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Context: The field 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'I.y'.
 //  - 'Object' is from 'dart:core'.
-//   int y;
+//   int y = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
 //   void set y(covariant Object value);
@@ -17,105 +17,75 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::M*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 1;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 2;
-  self::expect(i.{self::I::y}{core::Object*}, 2);
+  self::expect(i.{self::I::y}{core::Object}, 2);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
index 637dc58..2840136 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Context: The field 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'I.y'.
 //  - 'Object' is from 'dart:core'.
-//   int y;
+//   int y = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
 //   void set y(covariant Object value);
@@ -17,79 +17,49 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  set y(core::int* value) → void
+  set y(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  field core::int* x;
-  field core::int* y;
-  synthetic constructor •() → self::M*
+  field core::int x;
+  field core::int y;
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void
+static method expectTypeError(() → void callback) → void
   ;
-static method expect(core::Object* value, core::Object* expected) → void
+static method expect(core::Object value, core::Object expected) → void
   ;
-static method test(self::I<core::Object*>* i) → void
+static method test(self::I<core::Object> i) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
index b49f3d7..40e6994 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Context: The field 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'I.y'.
 //  - 'Object' is from 'dart:core'.
-//   int y;
+//   int y = 0;
 //       ^
 // pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
 //   void set y(covariant Object value);
@@ -17,99 +17,69 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::M*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B implements self::I<core::int*>, self::M /*isEliminatedMixin*/  {
-  covariant-by-class field core::int* x = null;
-  covariant-by-declaration field core::int* y = null;
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int>, self::M /*isEliminatedMixin*/  {
+  covariant-by-class field core::int x = 0;
+  covariant-by-declaration field core::int y = 0;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 1;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 2;
-  self::expect(i.{self::I::y}{core::Object*}, 2);
+  self::expect(i.{self::I::y}{core::Object}, 2);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart
index 479bc2b..574153f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline.expect
index c5e0532..7b50e59 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void expectTypeError(void callback()) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline_modelled.expect
index fe4e746..7bcde01 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
index 83a8031..69135ff 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,113 +18,83 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 1;
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     self::expect(value, 2);
   }
-  get y() → core::int*
+  get y() → core::int
     return 3;
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     self::expect(value, 4);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 2;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 4;
-  self::expect(i.{self::I::y}{core::Object*}, 3);
+  self::expect(i.{self::I::y}{core::Object}, 3);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect
index 83a8031..69135ff 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,113 +18,83 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 1;
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     self::expect(value, 2);
   }
-  get y() → core::int*
+  get y() → core::int
     return 3;
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     self::expect(value, 4);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 2;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 4;
-  self::expect(i.{self::I::y}{core::Object*}, 3);
+  self::expect(i.{self::I::y}{core::Object}, 3);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
index 349493c..640d9af 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,85 +18,55 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  set y(core::int* value) → void
+  set y(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  set y(core::int* value) → void
+  set y(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C = self::B with self::M implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+class C = self::B with self::M implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int
     return super.{self::M::x};
-  forwarding-stub set x(covariant-by-class core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int value) → void
     return super.{self::M::x} = value;
-  mixin-super-stub get y() → core::int*
+  mixin-super-stub get y() → core::int
     return super.{self::M::y};
-  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int value) → void
     return super.{self::M::y} = value;
 }
-static method expectTypeError(() →* void callback) → void
+static method expectTypeError(() → void callback) → void
   ;
-static method expect(core::Object* value, core::Object* expected) → void
+static method expect(core::Object value, core::Object expected) → void
   ;
-static method test(self::I<core::Object*>* i) → void
+static method test(self::I<core::Object> i) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
index 894f787..fea9c96 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,115 +18,85 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int* {
+  get x() → core::int {
     throw "Should not be reached";
   }
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     throw "Should not be reached";
   }
-  get y() → core::int* {
+  get y() → core::int {
     throw "Should not be reached";
   }
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     throw "Should not be reached";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract get x() → self::I::T*;
-  abstract set x(covariant-by-class self::I::T* value) → void;
-  abstract get y() → core::Object*;
-  abstract set y(covariant-by-declaration core::Object* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::I::T%;
+  abstract set x(covariant-by-class self::I::T% value) → void;
+  abstract get y() → core::Object;
+  abstract set y(covariant-by-declaration core::Object value) → void;
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 1;
-  set x(core::int* value) → void {
+  set x(core::int value) → void {
     self::expect(value, 2);
   }
-  get y() → core::int*
+  get y() → core::int
     return 3;
-  set y(core::int* value) → void {
+  set y(core::int value) → void {
     self::expect(value, 4);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends self::B implements self::I<core::int*>, self::M /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::C*
+class C extends self::B implements self::I<core::int>, self::M /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 1;
-  set x(covariant-by-class core::int* value) → void {
+  set x(covariant-by-class core::int value) → void {
     self::expect(value, 2);
   }
-  get y() → core::int*
+  get y() → core::int
     return 3;
-  set y(covariant-by-declaration core::int* value) → void {
+  set y(covariant-by-declaration core::int value) → void {
     self::expect(value, 4);
   }
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method test(self::I<core::Object*>* i) → void {
-  self::expectTypeError(() → Null {
+static method test(self::I<core::Object> i) → void {
+  self::expectTypeError(() → void {
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 2;
-  self::expect(i.{self::I::x}{core::Object*}, 1);
-  self::expectTypeError(() → Null {
+  self::expect(i.{self::I::x}{core::Object}, 1);
+  self::expectTypeError(() → void {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 4;
-  self::expect(i.{self::I::y}{core::Object*}, 3);
+  self::expect(i.{self::I::y}{core::Object}, 3);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart
index 71c3912..a4fc889 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline.expect
index 26c3afd..c474b44 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void expectTypeError(void callback()) {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline_modelled.expect
index 1b0c9b8..d49ed63 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
index 0fc6d13..a6fa707 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
@@ -1,76 +1,56 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → core::int* {
+  method f(core::int x) → core::int {
     self::expect(x, 1);
     return 2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
-    return super.{self::B::f}(x as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::Object x) → core::int
+    return super.{self::B::f}(x as core::int);
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method g(self::C* c) → void {
-  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+static method g(self::C c) → void {
+  c.{self::C::f}("hello"){(core::Object) → core::int};
 }
-static method test(self::C* c, self::I* i) → void {
-  self::expectTypeError(() → Null {
-    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
+static method test(self::C c, self::I i) → void {
+  self::expectTypeError(() → void {
+    i.{self::I::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
-  self::expectTypeError(() → Null {
-    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+  self::expect(i.{self::I::f}(1){(core::Object) → core::int}, 2);
+  self::expectTypeError(() → void {
+    c.{self::C::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
+  self::expect(c.{self::C::f}(1){(core::Object) → core::int}, 2);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   self::test(c, c);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect
index 0fc6d13..a6fa707 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect
@@ -1,76 +1,56 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → core::int* {
+  method f(core::int x) → core::int {
     self::expect(x, 1);
     return 2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
-    return super.{self::B::f}(x as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::Object x) → core::int
+    return super.{self::B::f}(x as core::int);
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method g(self::C* c) → void {
-  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+static method g(self::C c) → void {
+  c.{self::C::f}("hello"){(core::Object) → core::int};
 }
-static method test(self::C* c, self::I* i) → void {
-  self::expectTypeError(() → Null {
-    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
+static method test(self::C c, self::I i) → void {
+  self::expectTypeError(() → void {
+    i.{self::I::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
-  self::expectTypeError(() → Null {
-    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+  self::expect(i.{self::I::f}(1){(core::Object) → core::int}, 2);
+  self::expectTypeError(() → void {
+    c.{self::C::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
+  self::expect(c.{self::C::f}(1){(core::Object) → core::int}, 2);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   self::test(c, c);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
index 7b52144..516c6bd 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
@@ -1,51 +1,31 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x) → core::int*
+  method f(core::int x) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
-    return super.{self::B::f}(x as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::Object x) → core::int
+    return super.{self::B::f}(x as core::int);
 }
-static method expectTypeError(() →* void callback) → void
+static method expectTypeError(() → void callback) → void
   ;
-static method expect(core::Object* value, core::Object* expected) → void
+static method expect(core::Object value, core::Object expected) → void
   ;
-static method g(self::C* c) → void
+static method g(self::C c) → void
   ;
-static method test(self::C* c, self::I* i) → void
+static method test(self::C c, self::I i) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
index 0fc6d13..a6fa707 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
@@ -1,76 +1,56 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x) → core::int* {
+  method f(core::int x) → core::int {
     self::expect(x, 1);
     return 2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
-    return super.{self::B::f}(x as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::Object x) → core::int
+    return super.{self::B::f}(x as core::int);
 }
-static method expectTypeError(() →* void callback) → void {
+static method expectTypeError(() → void callback) → void {
   try {
-    callback(){() →* void};
+    callback(){() → void};
     throw "Expected TypeError, did not occur";
   }
-  on core::TypeError* catch(no-exception-var) {
+  on core::TypeError catch(no-exception-var) {
   }
 }
-static method expect(core::Object* value, core::Object* expected) → void {
-  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+static method expect(core::Object value, core::Object expected) → void {
+  if(!(value =={core::Object::==}{(core::Object) → core::bool} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
-static method g(self::C* c) → void {
-  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+static method g(self::C c) → void {
+  c.{self::C::f}("hello"){(core::Object) → core::int};
 }
-static method test(self::C* c, self::I* i) → void {
-  self::expectTypeError(() → Null {
-    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
+static method test(self::C c, self::I i) → void {
+  self::expectTypeError(() → void {
+    i.{self::I::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
-  self::expectTypeError(() → Null {
-    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+  self::expect(i.{self::I::f}(1){(core::Object) → core::int}, 2);
+  self::expectTypeError(() → void {
+    c.{self::C::f}("hello"){(core::Object) → core::int};
   });
-  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
+  self::expect(c.{self::C::f}(1){(core::Object) → core::int}, 2);
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
+  self::C c = new self::C::•();
   self::test(c, c);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart
index f08c5bf..ef67155 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline.expect
index c2382d9..83b6b0f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline_modelled.expect
index aba7ead..90a097c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C extends B implements I<int> {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
index 9aacb53..721f671 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::Object y) → void;
 }
-abstract class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect
index 9aacb53..721f671 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::Object y) → void;
 }
-abstract class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
index 97cd268..0780aea 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x, core::int* y) → void
+  method f(core::int x, core::int y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::Object y) → void;
 }
-abstract class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
index 9aacb53..721f671 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-class self::I::T% x, core::Object y) → void;
 }
-abstract class C extends self::B implements self::I<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B implements self::I<core::int> {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart
index 543f895..4d1e82d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline.expect
index 84472ae..ac08d82 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B<T> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline_modelled.expect
index bf8a304..22c5f69 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C extends B<int> implements I {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
index f0e4b8e..aeb82fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
-abstract class C extends self::B<core::int*> implements self::I {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B<core::int> implements self::I {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect
index f0e4b8e..aeb82fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
-abstract class C extends self::B<core::int*> implements self::I {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B<core::int> implements self::I {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
index 6ea1a07..5b96560 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method f(covariant-by-class self::B::T* x, core::int* y) → void
+  method f(covariant-by-class self::B::T% x, core::int y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
-abstract class C extends self::B<core::int*> implements self::I {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B<core::int> implements self::I {
+  synthetic constructor •() → self::C
     ;
-  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
index f0e4b8e..aeb82fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-class self::B::T% x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
-abstract class C extends self::B<core::int*> implements self::I {
-  synthetic constructor •() → self::C*
+abstract class C extends self::B<core::int> implements self::I {
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart
index a782521..57a9f99 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline.expect
index 6905d9d..d453753 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline_modelled.expect
index 1eb2ff4..f722096 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C extends B implements I {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
index 8f7a060..821c346 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect
index 8f7a060..821c346 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
index b2910572..1f1becf 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(core::int* x, core::int* y) → void
+  method f(core::int x, core::int y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
index 8f7a060..821c346 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
-    return super.{self::B::f}(x, y as core::int*);
+  forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void
+    return super.{self::B::f}(x, y as core::int);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart
index 7a96d67..3daf251 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline.expect
index b63fd0c..e101817 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline_modelled.expect
index 11118cd..5bade16 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C extends B implements I {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
index d4b9b44..d57d598 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect
index d4b9b44..d57d598 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
index 156233f..12160f9 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method f(covariant-by-declaration core::int* x, core::int* y) → void
+  method f(covariant-by-declaration core::int x, core::int y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
index d4b9b44..d57d598 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(covariant-by-declaration core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::Object y) → void;
 }
 abstract class C extends self::B implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int x, core::Object y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart
index eede9ad..09b3b86 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for 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.9
+
 import 'dart:async' show FutureOr;
 
 import 'dart:collection' show LinkedHashMap, LinkedHashSet;
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
index 358bace..a5d89cf 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // Change the type of the set literal or the context in which it is used.
 //   LinkedHashSet<int> lhs = {};
 //                            ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // Change the type of the map literal or the context in which it is used.
 //   LinkedHashMap<int, bool> lhm = {};
 //                                  ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
@@ -24,7 +24,7 @@
 // Future<LinkedHashSet<int>> lhsfun() async => {};
 //                                              ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
@@ -32,13 +32,13 @@
 // Future<LinkedHashMap<int, bool>> lhmfun() async => {};
 //                                                    ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // FutureOr<LinkedHashSet<int>> lhsfun2() => {};
 //                                           ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
@@ -60,7 +60,7 @@
   core::Iterable<core::int*>* i = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
   } =>#t2;
-  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
@@ -68,7 +68,7 @@
                            ^" in block {
     final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
   } =>#t3;
-  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
@@ -96,7 +96,7 @@
     final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
   } =>#t5;
 static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async /* futureValueType= col::LinkedHashSet<core::int*>* */ 
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
@@ -106,7 +106,7 @@
     final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
   } =>#t6;
 static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ 
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
@@ -124,7 +124,7 @@
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
   } =>#t8;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
@@ -132,7 +132,7 @@
     final core::Set<dynamic>* #t9 = col::LinkedHashSet::•<dynamic>();
   } =>#t9) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
index 358bace..a5d89cf 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // Change the type of the set literal or the context in which it is used.
 //   LinkedHashSet<int> lhs = {};
 //                            ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // Change the type of the map literal or the context in which it is used.
 //   LinkedHashMap<int, bool> lhm = {};
 //                                  ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
@@ -24,7 +24,7 @@
 // Future<LinkedHashSet<int>> lhsfun() async => {};
 //                                              ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
@@ -32,13 +32,13 @@
 // Future<LinkedHashMap<int, bool>> lhmfun() async => {};
 //                                                    ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // FutureOr<LinkedHashSet<int>> lhsfun2() => {};
 //                                           ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
@@ -60,7 +60,7 @@
   core::Iterable<core::int*>* i = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
   } =>#t2;
-  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
@@ -68,7 +68,7 @@
                            ^" in block {
     final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
   } =>#t3;
-  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
@@ -96,7 +96,7 @@
     final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
   } =>#t5;
 static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async /* futureValueType= col::LinkedHashSet<core::int*>* */ 
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
@@ -106,7 +106,7 @@
     final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
   } =>#t6;
 static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ 
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
@@ -124,7 +124,7 @@
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
   } =>#t8;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
@@ -132,7 +132,7 @@
     final core::Set<dynamic>* #t9 = col::LinkedHashSet::•<dynamic>();
   } =>#t9) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
index b7585e0..4e4dd22 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // Change the type of the set literal or the context in which it is used.
 //   LinkedHashSet<int> lhs = {};
 //                            ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // Change the type of the map literal or the context in which it is used.
 //   LinkedHashMap<int, bool> lhm = {};
 //                                  ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
@@ -24,7 +24,7 @@
 // Future<LinkedHashSet<int>> lhsfun() async => {};
 //                                              ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
@@ -32,13 +32,13 @@
 // Future<LinkedHashMap<int, bool>> lhmfun() async => {};
 //                                                    ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'LinkedHashSet' is from 'dart:collection'.
 // FutureOr<LinkedHashSet<int>> lhsfun2() => {};
 //                                           ^
 //
-// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
 //  - 'Map' is from 'dart:core'.
 //  - 'LinkedHashMap' is from 'dart:collection'.
 // FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
@@ -73,7 +73,7 @@
         core::Iterable<core::int*>* i = block {
           final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
         } =>#t2;
-        col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+        col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
@@ -81,7 +81,7 @@
                            ^" in block {
           final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
         } =>#t3;
-        col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+        col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
@@ -217,7 +217,7 @@
     try {
       #L5:
       {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
@@ -252,7 +252,7 @@
     try {
       #L6:
       {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
@@ -284,7 +284,7 @@
     final core::Set<core::int*>* #t18 = new col::_CompactLinkedHashSet::•<core::int*>();
   } =>#t18;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
@@ -292,7 +292,7 @@
     final core::Set<dynamic>* #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
   } =>#t19) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
-  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart
new file mode 100644
index 0000000..15f76e8
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async' show FutureOr;
+
+import 'dart:collection' show LinkedHashMap, LinkedHashSet;
+
+main() async {
+  Map<int, bool> m = {};
+  Set<int> s = {};
+  Iterable<int> i = {};
+  LinkedHashSet<int> lhs = {};
+  LinkedHashMap<int, bool> lhm = {};
+
+  Map<int, bool> fm = await mapfun();
+  Set<int> fs = await setfun();
+  Iterable<int> fi = await iterablefun();
+  LinkedHashSet<int> flhs = await lhsfun();
+  LinkedHashMap<int, bool> flhm = await lhmfun();
+
+  Map<int, bool> fm2 = await mapfun2();
+  Set<int> fs2 = await setfun2();
+  Iterable<int> fi2 = await iterablefun2();
+  LinkedHashSet<int> flhs2 = await lhsfun2();
+  LinkedHashMap<int, bool> flhm2 = await lhmfun2();
+}
+
+Future<Map<int, bool>> mapfun() async => {};
+Future<Set<int>> setfun() async => {};
+Future<Iterable<int>> iterablefun() async => {};
+Future<LinkedHashSet<int>> lhsfun() async => {};
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+
+FutureOr<Map<int, bool>> mapfun2() => {};
+FutureOr<Set<int>> setfun2() => {};
+FutureOr<Iterable<int>> iterablefun2() => {};
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline.expect
new file mode 100644
index 0000000..183ae0c
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+import 'dart:async' show FutureOr;
+import 'dart:collection' show LinkedHashMap, LinkedHashSet;
+
+main() async {}
+Future<Map<int, bool>> mapfun() async => {};
+Future<Set<int>> setfun() async => {};
+Future<Iterable<int>> iterablefun() async => {};
+Future<LinkedHashSet<int>> lhsfun() async => {};
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+FutureOr<Map<int, bool>> mapfun2() => {};
+FutureOr<Set<int>> setfun2() => {};
+FutureOr<Iterable<int>> iterablefun2() => {};
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cd5d4f6
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+import 'dart:async' show FutureOr;
+import 'dart:collection' show LinkedHashMap, LinkedHashSet;
+
+Future<Iterable<int>> iterablefun() async => {};
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+Future<LinkedHashSet<int>> lhsfun() async => {};
+Future<Map<int, bool>> mapfun() async => {};
+Future<Set<int>> setfun() async => {};
+FutureOr<Iterable<int>> iterablefun2() => {};
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+FutureOr<Map<int, bool>> mapfun2() => {};
+FutureOr<Set<int>> setfun2() => {};
+main() async {}
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.expect
new file mode 100644
index 0000000..c167af0
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+//   LinkedHashSet<int> lhs = {};
+//                            ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+//   LinkedHashMap<int, bool> lhm = {};
+//                                  ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// Future<LinkedHashSet<int>> lhsfun() async => {};
+//                                              ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+//                                                    ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+//                                           ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+import "dart:async" show FutureOr;
+import "dart:collection" show LinkedHashMap, LinkedHashSet;
+
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::Map<core::int, core::bool> m = <core::int, core::bool>{};
+  core::Set<core::int> s = block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+  } =>#t1;
+  core::Iterable<core::int> i = block {
+    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
+  } =>#t2;
+  col::LinkedHashSet<core::int> lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+  LinkedHashSet<int> lhs = {};
+                           ^" in ( block {
+    final core::Set<dynamic> #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+  col::LinkedHashMap<core::int, core::bool> lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+  LinkedHashMap<int, bool> lhm = {};
+                                 ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+  core::Map<core::int, core::bool> fm = await self::mapfun();
+  core::Set<core::int> fs = await self::setfun();
+  core::Iterable<core::int> fi = await self::iterablefun();
+  col::LinkedHashSet<core::int> flhs = await self::lhsfun();
+  col::LinkedHashMap<core::int, core::bool> flhm = await self::lhmfun();
+  core::Map<core::int, core::bool> fm2 = await self::mapfun2();
+  core::Set<core::int> fs2 = await self::setfun2();
+  core::Iterable<core::int> fi2 = await self::iterablefun2();
+  col::LinkedHashSet<core::int> flhs2 = await self::lhsfun2();
+  col::LinkedHashMap<core::int, core::bool> flhm2 = await self::lhmfun2();
+}
+static method mapfun() → asy::Future<core::Map<core::int, core::bool>> async /* futureValueType= core::Map<core::int, core::bool> */ 
+  return <core::int, core::bool>{};
+static method setfun() → asy::Future<core::Set<core::int>> async /* futureValueType= core::Set<core::int> */ 
+  return block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+  } =>#t4;
+static method iterablefun() → asy::Future<core::Iterable<core::int>> async /* futureValueType= core::Iterable<core::int> */ 
+  return block {
+    final core::Set<core::int> #t5 = col::LinkedHashSet::•<core::int>();
+  } =>#t5;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> async /* futureValueType= col::LinkedHashSet<core::int> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+Future<LinkedHashSet<int>> lhsfun() async => {};
+                                             ^" in ( block {
+    final core::Set<dynamic> #t6 = col::LinkedHashSet::•<dynamic>();
+  } =>#t6) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> async /* futureValueType= col::LinkedHashMap<core::int, core::bool> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+                                                   ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+static method mapfun2() → FutureOr<core::Map<core::int, core::bool>>
+  return <core::int, core::bool>{};
+static method setfun2() → FutureOr<core::Set<core::int>>
+  return block {
+    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
+  } =>#t7;
+static method iterablefun2() → FutureOr<core::Iterable<core::int>>
+  return block {
+    final core::Set<core::int> #t8 = col::LinkedHashSet::•<core::int>();
+  } =>#t8;
+static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+                                          ^" in ( block {
+    final core::Set<dynamic> #t9 = col::LinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashSet<core::int>>;
+static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int, core::bool>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+                                                ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashMap<core::int, core::bool>>;
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.modular.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.modular.expect
new file mode 100644
index 0000000..c167af0
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+//   LinkedHashSet<int> lhs = {};
+//                            ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+//   LinkedHashMap<int, bool> lhm = {};
+//                                  ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// Future<LinkedHashSet<int>> lhsfun() async => {};
+//                                              ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+//                                                    ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+//                                           ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+import "dart:async" show FutureOr;
+import "dart:collection" show LinkedHashMap, LinkedHashSet;
+
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::Map<core::int, core::bool> m = <core::int, core::bool>{};
+  core::Set<core::int> s = block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+  } =>#t1;
+  core::Iterable<core::int> i = block {
+    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
+  } =>#t2;
+  col::LinkedHashSet<core::int> lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+  LinkedHashSet<int> lhs = {};
+                           ^" in ( block {
+    final core::Set<dynamic> #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+  col::LinkedHashMap<core::int, core::bool> lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+  LinkedHashMap<int, bool> lhm = {};
+                                 ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+  core::Map<core::int, core::bool> fm = await self::mapfun();
+  core::Set<core::int> fs = await self::setfun();
+  core::Iterable<core::int> fi = await self::iterablefun();
+  col::LinkedHashSet<core::int> flhs = await self::lhsfun();
+  col::LinkedHashMap<core::int, core::bool> flhm = await self::lhmfun();
+  core::Map<core::int, core::bool> fm2 = await self::mapfun2();
+  core::Set<core::int> fs2 = await self::setfun2();
+  core::Iterable<core::int> fi2 = await self::iterablefun2();
+  col::LinkedHashSet<core::int> flhs2 = await self::lhsfun2();
+  col::LinkedHashMap<core::int, core::bool> flhm2 = await self::lhmfun2();
+}
+static method mapfun() → asy::Future<core::Map<core::int, core::bool>> async /* futureValueType= core::Map<core::int, core::bool> */ 
+  return <core::int, core::bool>{};
+static method setfun() → asy::Future<core::Set<core::int>> async /* futureValueType= core::Set<core::int> */ 
+  return block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+  } =>#t4;
+static method iterablefun() → asy::Future<core::Iterable<core::int>> async /* futureValueType= core::Iterable<core::int> */ 
+  return block {
+    final core::Set<core::int> #t5 = col::LinkedHashSet::•<core::int>();
+  } =>#t5;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> async /* futureValueType= col::LinkedHashSet<core::int> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+Future<LinkedHashSet<int>> lhsfun() async => {};
+                                             ^" in ( block {
+    final core::Set<dynamic> #t6 = col::LinkedHashSet::•<dynamic>();
+  } =>#t6) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> async /* futureValueType= col::LinkedHashMap<core::int, core::bool> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+                                                   ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+static method mapfun2() → FutureOr<core::Map<core::int, core::bool>>
+  return <core::int, core::bool>{};
+static method setfun2() → FutureOr<core::Set<core::int>>
+  return block {
+    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
+  } =>#t7;
+static method iterablefun2() → FutureOr<core::Iterable<core::int>>
+  return block {
+    final core::Set<core::int> #t8 = col::LinkedHashSet::•<core::int>();
+  } =>#t8;
+static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+                                          ^" in ( block {
+    final core::Set<dynamic> #t9 = col::LinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashSet<core::int>>;
+static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int, core::bool>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+                                                ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashMap<core::int, core::bool>>;
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.outline.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.outline.expect
new file mode 100644
index 0000000..132e0ad
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+import "dart:async" show FutureOr;
+import "dart:collection" show LinkedHashMap, LinkedHashSet;
+
+static method main() → dynamic async 
+  ;
+static method mapfun() → asy::Future<core::Map<core::int, core::bool>> async 
+  ;
+static method setfun() → asy::Future<core::Set<core::int>> async 
+  ;
+static method iterablefun() → asy::Future<core::Iterable<core::int>> async 
+  ;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> async 
+  ;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> async 
+  ;
+static method mapfun2() → FutureOr<core::Map<core::int, core::bool>>
+  ;
+static method setfun2() → FutureOr<core::Set<core::int>>
+  ;
+static method iterablefun2() → FutureOr<core::Iterable<core::int>>
+  ;
+static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int>>
+  ;
+static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int, core::bool>>
+  ;
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect
new file mode 100644
index 0000000..621dcc5
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect
@@ -0,0 +1,291 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+//   LinkedHashSet<int> lhs = {};
+//                            ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+//   LinkedHashMap<int, bool> lhm = {};
+//                                  ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// Future<LinkedHashSet<int>> lhsfun() async => {};
+//                                              ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+//                                                    ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+//                                           ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+//                                                 ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:_internal" as _in;
+
+import "dart:async" show FutureOr;
+import "dart:collection" show LinkedHashMap, LinkedHashSet;
+
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  dynamic :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        core::Map<core::int, core::bool> m = <core::int, core::bool>{};
+        core::Set<core::int> s = block {
+          final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
+        } =>#t1;
+        core::Iterable<core::int> i = block {
+          final core::Set<core::int> #t2 = new col::_CompactLinkedHashSet::•<core::int>();
+        } =>#t2;
+        col::LinkedHashSet<core::int> lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+  LinkedHashSet<int> lhs = {};
+                           ^" in ( block {
+          final core::Set<dynamic> #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+        } =>#t3) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+        col::LinkedHashMap<core::int, core::bool> lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+  LinkedHashMap<int, bool> lhm = {};
+                                 ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int, core::bool> fm = _in::unsafeCast<core::Map<core::int, core::bool>>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int> fs = _in::unsafeCast<core::Set<core::int>>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int> fi = _in::unsafeCast<core::Iterable<core::int>>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int> flhs = _in::unsafeCast<col::LinkedHashSet<core::int>>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int, core::bool> flhm = _in::unsafeCast<col::LinkedHashMap<core::int, core::bool>>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int, core::bool> fm2 = _in::unsafeCast<core::Map<core::int, core::bool>>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int> fs2 = _in::unsafeCast<core::Set<core::int>>(:result_or_exception);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int> fi2 = _in::unsafeCast<core::Iterable<core::int>>(:result_or_exception);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int> flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int>>(:result_or_exception);
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int, core::bool> flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int, core::bool>>(:result_or_exception);
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method mapfun() → asy::Future<core::Map<core::int, core::bool>> /* futureValueType= core::Map<core::int, core::bool> */ /* originally async */ {
+  final asy::_Future<core::Map<core::int, core::bool>> :async_future = new asy::_Future::•<core::Map<core::int, core::bool>>();
+  core::bool* :is_sync = false;
+  core::Map<core::int, core::bool>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L2:
+      {
+        :return_value = <core::int, core::bool>{};
+        break #L2;
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method setfun() → asy::Future<core::Set<core::int>> /* futureValueType= core::Set<core::int> */ /* originally async */ {
+  final asy::_Future<core::Set<core::int>> :async_future = new asy::_Future::•<core::Set<core::int>>();
+  core::bool* :is_sync = false;
+  core::Set<core::int>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L3:
+      {
+        :return_value = block {
+          final core::Set<core::int> #t14 = new col::_CompactLinkedHashSet::•<core::int>();
+        } =>#t14;
+        break #L3;
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method iterablefun() → asy::Future<core::Iterable<core::int>> /* futureValueType= core::Iterable<core::int> */ /* originally async */ {
+  final asy::_Future<core::Iterable<core::int>> :async_future = new asy::_Future::•<core::Iterable<core::int>>();
+  core::bool* :is_sync = false;
+  core::Iterable<core::int>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L4:
+      {
+        :return_value = block {
+          final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
+        } =>#t15;
+        break #L4;
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> /* futureValueType= col::LinkedHashSet<core::int> */ /* originally async */ {
+  final asy::_Future<col::LinkedHashSet<core::int>> :async_future = new asy::_Future::•<col::LinkedHashSet<core::int>>();
+  core::bool* :is_sync = false;
+  FutureOr<col::LinkedHashSet<core::int>>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L5:
+      {
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+Future<LinkedHashSet<int>> lhsfun() async => {};
+                                             ^" in ( block {
+          final core::Set<dynamic> #t16 = new col::_CompactLinkedHashSet::•<dynamic>();
+        } =>#t16) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+        break #L5;
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> /* futureValueType= col::LinkedHashMap<core::int, core::bool> */ /* originally async */ {
+  final asy::_Future<col::LinkedHashMap<core::int, core::bool>> :async_future = new asy::_Future::•<col::LinkedHashMap<core::int, core::bool>>();
+  core::bool* :is_sync = false;
+  FutureOr<col::LinkedHashMap<core::int, core::bool>>? :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L6:
+      {
+        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+                                                   ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
+        break #L6;
+      }
+      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method mapfun2() → FutureOr<core::Map<core::int, core::bool>>
+  return <core::int, core::bool>{};
+static method setfun2() → FutureOr<core::Set<core::int>>
+  return block {
+    final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t17;
+static method iterablefun2() → FutureOr<core::Iterable<core::int>>
+  return block {
+    final core::Set<core::int> #t18 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t18;
+static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+                                          ^" in ( block {
+    final core::Set<dynamic> #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t19) as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashSet<core::int>>;
+static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int, core::bool>>
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+                                                ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashMap<core::int, core::bool>>;
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 889ec70..93f5cae 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -152,7 +152,6 @@
 rasta/issue_000041: RuntimeError
 rasta/issue_000042: RuntimeError
 rasta/issue_000044: RuntimeError
-rasta/issue_000081: RuntimeError
 rasta/malformed_const_constructor: RuntimeError
 rasta/malformed_function: RuntimeError
 rasta/mixin_library: TypeCheckError
@@ -170,11 +169,11 @@
 regress/issue_29976: RuntimeError
 regress/issue_29982: RuntimeError
 regress/issue_31180: TypeCheckError
+regress/issue_31180_2: TypeCheckError
 regress/issue_32972: RuntimeError
 regress/issue_33452: RuntimeError
 regress/issue_34225: RuntimeError
 regress/issue_34563: RuntimeError
-regress/issue_35177: RuntimeError
 regress/issue_35258: RuntimeError
 regress/issue_35259: RuntimeError
 regress/issue_35260: RuntimeError
@@ -183,6 +182,7 @@
 regress/issue_39091_2: RuntimeError
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
 set_literals/disambiguation_rule: RuntimeError
+set_literals/disambiguation_rule2: RuntimeError
 value_class/copy_with_call_sites: RuntimeError # Expected
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart b/pkg/front_end/testcases/unified_collections/fold_initial2.dart
new file mode 100644
index 0000000..034f35d
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart
@@ -0,0 +1,113 @@
+// 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.
+
+void foldInitialElements() {
+  dynamic element0 = 0;
+  int? element1 = 1;
+  int element2 = 2;
+  var list = <int?>[element0, element1, element2, if (true) 3, 4, 5, 6];
+
+  expect(new List<int?>.generate(7, (int? i) => i), list);
+
+  var set = <int?>{element0, element1, element2, if (true) 3, 4, 5, 6};
+
+  expect(new List<int?>.generate(7, (int? i) => i), set.toList());
+}
+
+void foldInitialSpread1() {
+  dynamic initial = [0, 1, 2];
+  var list = <int>[...initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int>.generate(7, (int i) => i), list);
+
+  var set = <int>{...initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int>.generate(7, (int i) => i), set.toList());
+}
+
+void foldInitialSpread2([bool c = false]) {
+  Iterable<int?> initial = [0, 1, 2];
+  if (c) {
+    initial = [null];
+  }
+  var list = <int?>[...initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int?>.generate(7, (int? i) => i), list);
+
+  var set = <int?>{...initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int?>.generate(7, (int? i) => i), set.toList());
+}
+
+void foldInitialSpread3([bool c = false]) {
+  List<int?> initial = [0, 1, 2];
+  if (c) {
+    initial = [null];
+  }
+  var list = <int?>[...initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int?>.generate(7, (int? i) => i), list);
+
+  var set = <int?>{...initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int?>.generate(7, (int? i) => i), set.toList());
+}
+
+void foldInitialSpread4([bool c = false]) {
+  Iterable<int> initial = [0, 1, 2];
+  var list = <int>[...initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int>.generate(7, (int i) => i), list);
+
+  var set = <int>{...initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int>.generate(7, (int i) => i), set.toList());
+}
+
+void foldInitialSpread5([bool c = false]) {
+  List<int> initial = [0, 1, 2];
+  var list = <int>[...initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int>.generate(7, (int i) => i), list);
+
+  var set = <int>{...initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int>.generate(7, (int i) => i), set.toList());
+}
+
+void foldInitialSpread6([bool c = false]) {
+  List<int>? initial = [0, 1, 2];
+  if (c) {
+    initial = null;
+  }
+  var list = <int>[...?initial, if (true) 3, 4, 5, 6];
+
+  expect(new List<int>.generate(7, (int i) => i), list);
+
+  var set = <int>{...?initial, if (true) 3, 4, 5, 6};
+
+  expect(new List<int>.generate(7, (int i) => i), set.toList());
+}
+
+main() {
+  foldInitialElements();
+  foldInitialSpread1();
+  foldInitialSpread2();
+  foldInitialSpread3();
+  foldInitialSpread4();
+  foldInitialSpread5();
+  foldInitialSpread6();
+}
+
+void expect(List list1, List list2) {
+  if (list1.length != list2.length) {
+    throw 'Unexpected length. Expected ${list1.length}, actual ${list2.length}.';
+  }
+  for (int i = 0; i < list1.length; i++) {
+    if (list1[i] != list2[i]) {
+      throw 'Unexpected element at index $i. '
+          'Expected ${list1[i]}, actual ${list2[i]}.';
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline.expect
new file mode 100644
index 0000000..9615248
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+void foldInitialElements() {}
+void foldInitialSpread1() {}
+void foldInitialSpread2([bool c = false]) {}
+void foldInitialSpread3([bool c = false]) {}
+void foldInitialSpread4([bool c = false]) {}
+void foldInitialSpread5([bool c = false]) {}
+void foldInitialSpread6([bool c = false]) {}
+main() {}
+void expect(List list1, List list2) {}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..61f14e7
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+main() {}
+void expect(List list1, List list2) {}
+void foldInitialElements() {}
+void foldInitialSpread1() {}
+void foldInitialSpread2([bool c = false]) {}
+void foldInitialSpread3([bool c = false]) {}
+void foldInitialSpread4([bool c = false]) {}
+void foldInitialSpread5([bool c = false]) {}
+void foldInitialSpread6([bool c = false]) {}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.expect
new file mode 100644
index 0000000..8bf896b
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foldInitialElements() → void {
+  dynamic element0 = 0;
+  core::int? element1 = 1;
+  core::int element2 = 2;
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = <core::int?>[element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?, element1{core::int}, element2];
+    if(true)
+      #t1.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t1;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t2 = col::LinkedHashSet::•<core::int?>();
+    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element1{core::int}){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element2){(core::int?) → core::bool};
+    if(true)
+      #t2.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t2;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread1() → void {
+  dynamic initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t3 = <core::int>[];
+    for (final has-declared-initializer dynamic #t4 in initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
+      #t3.{core::List::add}{Invariant}(#t5){(core::int) → void};
+    }
+    if(true)
+      #t3.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t3;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+    for (final has-declared-initializer dynamic #t7 in initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+      #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
+    }
+    if(true)
+      #t6.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t6;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread2([core::bool c = #C1]) → void {
+  core::Iterable<core::int?> initial = <core::int?>[0, 1, 2];
+  if(c) {
+    initial = <core::int?>[null];
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t9 = core::List::of<core::int?>(initial);
+    if(true)
+      #t9.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t9;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t10 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t10.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t10;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread3([core::bool c = #C1]) → void {
+  core::List<core::int?> initial = <core::int?>[0, 1, 2];
+  if(c) {
+    initial = <core::int?>[null];
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t11 = core::List::of<core::int?>(initial);
+    if(true)
+      #t11.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t11;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t12 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t12.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t12;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread4([core::bool c = #C1]) → void {
+  core::Iterable<core::int> initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t13 = core::List::of<core::int>(initial);
+    if(true)
+      #t13.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t13;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t14 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t14.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t14;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread5([core::bool c = #C1]) → void {
+  core::List<core::int> initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t15 = core::List::of<core::int>(initial);
+    if(true)
+      #t15.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t15;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t16 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t16.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t16;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread6([core::bool c = #C1]) → void {
+  core::List<core::int>? initial = <core::int>[0, 1, 2];
+  if(c) {
+    initial = null;
+  }
+  core::List<core::int> list = block {
+    final core::List<core::int> #t17 = <core::int>[];
+    final core::Iterable<core::int>? #t18 = initial;
+    if(!(#t18 == null))
+      #t17.{core::List::addAll}{Invariant}(#t18{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t17.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t17;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t19 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t20 = initial;
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t19.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t19;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method main() → dynamic {
+  self::foldInitialElements();
+  self::foldInitialSpread1();
+  self::foldInitialSpread2();
+  self::foldInitialSpread3();
+  self::foldInitialSpread4();
+  self::foldInitialSpread5();
+  self::foldInitialSpread6();
+}
+static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
+  }
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
+    }
+  }
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.modular.expect
new file mode 100644
index 0000000..8bf896b
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.modular.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foldInitialElements() → void {
+  dynamic element0 = 0;
+  core::int? element1 = 1;
+  core::int element2 = 2;
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = <core::int?>[element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?, element1{core::int}, element2];
+    if(true)
+      #t1.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t1;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t2 = col::LinkedHashSet::•<core::int?>();
+    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element1{core::int}){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element2){(core::int?) → core::bool};
+    if(true)
+      #t2.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t2;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread1() → void {
+  dynamic initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t3 = <core::int>[];
+    for (final has-declared-initializer dynamic #t4 in initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
+      #t3.{core::List::add}{Invariant}(#t5){(core::int) → void};
+    }
+    if(true)
+      #t3.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t3;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+    for (final has-declared-initializer dynamic #t7 in initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+      #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
+    }
+    if(true)
+      #t6.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t6;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread2([core::bool c = #C1]) → void {
+  core::Iterable<core::int?> initial = <core::int?>[0, 1, 2];
+  if(c) {
+    initial = <core::int?>[null];
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t9 = core::List::of<core::int?>(initial);
+    if(true)
+      #t9.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t9;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t10 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t10.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t10;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread3([core::bool c = #C1]) → void {
+  core::List<core::int?> initial = <core::int?>[0, 1, 2];
+  if(c) {
+    initial = <core::int?>[null];
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t11 = core::List::of<core::int?>(initial);
+    if(true)
+      #t11.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t11;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t12 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t12.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t12;
+  self::expect(core::List::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread4([core::bool c = #C1]) → void {
+  core::Iterable<core::int> initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t13 = core::List::of<core::int>(initial);
+    if(true)
+      #t13.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t13;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t14 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t14.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t14;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread5([core::bool c = #C1]) → void {
+  core::List<core::int> initial = <core::int>[0, 1, 2];
+  core::List<core::int> list = block {
+    final core::List<core::int> #t15 = core::List::of<core::int>(initial);
+    if(true)
+      #t15.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t15;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t16 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t16.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t16;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread6([core::bool c = #C1]) → void {
+  core::List<core::int>? initial = <core::int>[0, 1, 2];
+  if(c) {
+    initial = null;
+  }
+  core::List<core::int> list = block {
+    final core::List<core::int> #t17 = <core::int>[];
+    final core::Iterable<core::int>? #t18 = initial;
+    if(!(#t18 == null))
+      #t17.{core::List::addAll}{Invariant}(#t18{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t17.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t17;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t19 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t20 = initial;
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t19.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t19;
+  self::expect(core::List::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method main() → dynamic {
+  self::foldInitialElements();
+  self::foldInitialSpread1();
+  self::foldInitialSpread2();
+  self::foldInitialSpread3();
+  self::foldInitialSpread4();
+  self::foldInitialSpread5();
+  self::foldInitialSpread6();
+}
+static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
+  }
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
+    }
+  }
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.outline.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.outline.expect
new file mode 100644
index 0000000..39dbeec
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foldInitialElements() → void
+  ;
+static method foldInitialSpread1() → void
+  ;
+static method foldInitialSpread2([has-declared-initializer core::bool c]) → void
+  ;
+static method foldInitialSpread3([has-declared-initializer core::bool c]) → void
+  ;
+static method foldInitialSpread4([has-declared-initializer core::bool c]) → void
+  ;
+static method foldInitialSpread5([has-declared-initializer core::bool c]) → void
+  ;
+static method foldInitialSpread6([has-declared-initializer core::bool c]) → void
+  ;
+static method main() → dynamic
+  ;
+static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void
+  ;
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a52dccb
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial2.dart.weak.transformed.expect
@@ -0,0 +1,215 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foldInitialElements() → void {
+  dynamic element0 = 0;
+  core::int? element1 = 1;
+  core::int element2 = 2;
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = core::_GrowableList::_literal3<core::int?>(element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?, element1{core::int}, element2);
+    if(true)
+      #t1.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t1.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t1;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t2 = new col::_CompactLinkedHashSet::•<core::int?>();
+    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element1{core::int}){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(element2){(core::int?) → core::bool};
+    if(true)
+      #t2.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t2;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread1() → void {
+  dynamic initial = core::_GrowableList::_literal3<core::int>(0, 1, 2);
+  core::List<core::int> list = block {
+    final core::List<core::int> #t3 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = (initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
+          #t3.{core::List::add}{Invariant}(#t5){(core::int) → void};
+        }
+      }
+    }
+    if(true)
+      #t3.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t3.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t3;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t6 = new col::_CompactLinkedHashSet::•<core::int>();
+    {
+      core::Iterator<dynamic> :sync-for-iterator = (initial as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t7 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+          #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
+        }
+      }
+    }
+    if(true)
+      #t6.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t6.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t6;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread2([core::bool c = #C1]) → void {
+  core::Iterable<core::int?> initial = core::_GrowableList::_literal3<core::int?>(0, 1, 2);
+  if(c) {
+    initial = core::_GrowableList::_literal1<core::int?>(null);
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t9 = core::List::of<core::int?>(initial);
+    if(true)
+      #t9.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t9.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t9;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t10 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t10.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t10.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t10;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread3([core::bool c = #C1]) → void {
+  core::List<core::int?> initial = core::_GrowableList::_literal3<core::int?>(0, 1, 2);
+  if(c) {
+    initial = core::_GrowableList::_literal1<core::int?>(null);
+  }
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t11 = core::List::of<core::int?>(initial);
+    if(true)
+      #t11.{core::List::add}{Invariant}(3){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(4){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(5){(core::int?) → void};
+    #t11.{core::List::add}{Invariant}(6){(core::int?) → void};
+  } =>#t11;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), list);
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t12 = col::LinkedHashSet::of<core::int?>(initial);
+    if(true)
+      #t12.{core::Set::add}{Invariant}(3){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(4){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(5){(core::int?) → core::bool};
+    #t12.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+  } =>#t12;
+  self::expect(core::_GrowableList::generate<core::int?>(7, (core::int? i) → core::int? => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int?>});
+}
+static method foldInitialSpread4([core::bool c = #C1]) → void {
+  core::Iterable<core::int> initial = core::_GrowableList::_literal3<core::int>(0, 1, 2);
+  core::List<core::int> list = block {
+    final core::List<core::int> #t13 = core::List::of<core::int>(initial);
+    if(true)
+      #t13.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t13.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t13;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t14 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t14.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t14.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t14;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread5([core::bool c = #C1]) → void {
+  core::List<core::int> initial = core::_GrowableList::_literal3<core::int>(0, 1, 2);
+  core::List<core::int> list = block {
+    final core::List<core::int> #t15 = core::List::of<core::int>(initial);
+    if(true)
+      #t15.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t15.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t15;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t16 = col::LinkedHashSet::of<core::int>(initial);
+    if(true)
+      #t16.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t16.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t16;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method foldInitialSpread6([core::bool c = #C1]) → void {
+  core::List<core::int>? initial = core::_GrowableList::_literal3<core::int>(0, 1, 2);
+  if(c) {
+    initial = null;
+  }
+  core::List<core::int> list = block {
+    final core::List<core::int> #t17 = core::_GrowableList::•<core::int>(0);
+    final core::Iterable<core::int>? #t18 = initial;
+    if(!(#t18 == null))
+      #t17.{core::List::addAll}{Invariant}(#t18{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t17.{core::List::add}{Invariant}(3){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(4){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(5){(core::int) → void};
+    #t17.{core::List::add}{Invariant}(6){(core::int) → void};
+  } =>#t17;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), list);
+  core::Set<core::int> set = block {
+    final core::Set<core::int> #t19 = new col::_CompactLinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t20 = initial;
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    if(true)
+      #t19.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(5){(core::int) → core::bool};
+    #t19.{core::Set::add}{Invariant}(6){(core::int) → core::bool};
+  } =>#t19;
+  self::expect(core::_GrowableList::generate<core::int>(7, (core::int i) → core::int => i), set.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::int>});
+}
+static method main() → dynamic {
+  self::foldInitialElements();
+  self::foldInitialSpread1();
+  self::foldInitialSpread2();
+  self::foldInitialSpread3();
+  self::foldInitialSpread4();
+  self::foldInitialSpread5();
+  self::foldInitialSpread6();
+}
+static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
+  }
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
+    }
+  }
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart b/pkg/front_end/testcases/unified_collections/invariance2.dart
new file mode 100644
index 0000000..a4c812f
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart
@@ -0,0 +1,26 @@
+// 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.
+
+main() {
+  var list1 = <int>[0];
+  var list2 = <int?>[0];
+  dynamic list3 = <int>[0];
+  var list = <int?>[0, ...list1, ...list2, ...list3, if (true) 2];
+
+  var set1 = <int>{0};
+  var set2 = <int?>{0};
+  dynamic set3 = <int>{0};
+  var set = <int?>{0, ...set1, ...set2, ...set3, if (true) 2};
+
+  var map1 = <int, String>{0: 'foo'};
+  var map2 = <int?, String?>{0: 'bar'};
+  dynamic map3 = <int, String>{0: 'baz'};
+  var map = <int?, String?>{
+    0: 'foo',
+    ...map1,
+    ...map2,
+    ...map3,
+    if (true) 2: 'baz'
+  };
+}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline.expect
new file mode 100644
index 0000000..bae895a
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline.expect
@@ -0,0 +1 @@
+main() {}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bae895a
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.textual_outline_modelled.expect
@@ -0,0 +1 @@
+main() {}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.expect
new file mode 100644
index 0000000..010c0de
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::List<core::int> list1 = <core::int>[0];
+  core::List<core::int?> list2 = <core::int?>[0];
+  dynamic list3 = <core::int>[0];
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = <core::int?>[0];
+    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int?>) → void};
+    #t1.{core::List::addAll}{Invariant}(list2){(core::Iterable<core::int?>) → void};
+    for (final has-declared-initializer dynamic #t2 in list3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int? #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int?;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int?) → void};
+    }
+    if(true)
+      #t1.{core::List::add}{Invariant}(2){(core::int?) → void};
+  } =>#t1;
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+    #t4.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t4;
+  core::Set<core::int?> set2 = block {
+    final core::Set<core::int?> #t5 = col::LinkedHashSet::•<core::int?>();
+    #t5.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+  } =>#t5;
+  dynamic set3 = block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+    #t6.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t6;
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t7 = col::LinkedHashSet::•<core::int?>();
+    #t7.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int?>) → void};
+    #t7.{core::Set::addAll}{Invariant}(set2){(core::Iterable<core::int?>) → void};
+    for (final has-declared-initializer dynamic #t8 in set3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int? #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int?;
+      #t7.{core::Set::add}{Invariant}(#t9){(core::int?) → core::bool};
+    }
+    if(true)
+      #t7.{core::Set::add}{Invariant}(2){(core::int?) → core::bool};
+  } =>#t7;
+  core::Map<core::int, core::String> map1 = <core::int, core::String>{0: "foo"};
+  core::Map<core::int?, core::String?> map2 = <core::int?, core::String?>{0: "bar"};
+  dynamic map3 = <core::int, core::String>{0: "baz"};
+  core::Map<core::int?, core::String?> map = block {
+    final core::Map<core::int?, core::String?> #t10 = <core::int?, core::String?>{};
+    #t10.{core::Map::[]=}{Invariant}(0, "foo"){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<core::int?, core::String?> #t11 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>})
+      #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{core::int?}, #t11.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<core::int?, core::String?> #t12 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>})
+      #t10.{core::Map::[]=}{Invariant}(#t12.{core::MapEntry::key}{core::int?}, #t12.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t13 in (map3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}) {
+      final core::int? #t14 = #t13.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+      final core::String? #t15 = #t13.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::String?;
+      #t10.{core::Map::[]=}{Invariant}(#t14, #t15){(core::int?, core::String?) → void};
+    }
+    if(true)
+      #t10.{core::Map::[]=}{Invariant}(2, "baz"){(core::int?, core::String?) → void};
+  } =>#t10;
+}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.modular.expect
new file mode 100644
index 0000000..010c0de
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.modular.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::List<core::int> list1 = <core::int>[0];
+  core::List<core::int?> list2 = <core::int?>[0];
+  dynamic list3 = <core::int>[0];
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = <core::int?>[0];
+    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int?>) → void};
+    #t1.{core::List::addAll}{Invariant}(list2){(core::Iterable<core::int?>) → void};
+    for (final has-declared-initializer dynamic #t2 in list3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int? #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int?;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int?) → void};
+    }
+    if(true)
+      #t1.{core::List::add}{Invariant}(2){(core::int?) → void};
+  } =>#t1;
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+    #t4.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t4;
+  core::Set<core::int?> set2 = block {
+    final core::Set<core::int?> #t5 = col::LinkedHashSet::•<core::int?>();
+    #t5.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+  } =>#t5;
+  dynamic set3 = block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+    #t6.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t6;
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t7 = col::LinkedHashSet::•<core::int?>();
+    #t7.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int?>) → void};
+    #t7.{core::Set::addAll}{Invariant}(set2){(core::Iterable<core::int?>) → void};
+    for (final has-declared-initializer dynamic #t8 in set3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int? #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int?;
+      #t7.{core::Set::add}{Invariant}(#t9){(core::int?) → core::bool};
+    }
+    if(true)
+      #t7.{core::Set::add}{Invariant}(2){(core::int?) → core::bool};
+  } =>#t7;
+  core::Map<core::int, core::String> map1 = <core::int, core::String>{0: "foo"};
+  core::Map<core::int?, core::String?> map2 = <core::int?, core::String?>{0: "bar"};
+  dynamic map3 = <core::int, core::String>{0: "baz"};
+  core::Map<core::int?, core::String?> map = block {
+    final core::Map<core::int?, core::String?> #t10 = <core::int?, core::String?>{};
+    #t10.{core::Map::[]=}{Invariant}(0, "foo"){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<core::int?, core::String?> #t11 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>})
+      #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{core::int?}, #t11.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<core::int?, core::String?> #t12 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>})
+      #t10.{core::Map::[]=}{Invariant}(#t12.{core::MapEntry::key}{core::int?}, #t12.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t13 in (map3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}) {
+      final core::int? #t14 = #t13.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+      final core::String? #t15 = #t13.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::String?;
+      #t10.{core::Map::[]=}{Invariant}(#t14, #t15){(core::int?, core::String?) → void};
+    }
+    if(true)
+      #t10.{core::Map::[]=}{Invariant}(2, "baz"){(core::int?, core::String?) → void};
+  } =>#t10;
+}
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.outline.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.outline.expect
new file mode 100644
index 0000000..e2cba6b
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.transformed.expect
new file mode 100644
index 0000000..14be25b
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance2.dart.weak.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::List<core::int> list1 = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int?> list2 = core::_GrowableList::_literal1<core::int?>(0);
+  dynamic list3 = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int?> list = block {
+    final core::List<core::int?> #t1 = core::_GrowableList::_literal1<core::int?>(0);
+    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int?>) → void};
+    #t1.{core::List::addAll}{Invariant}(list2){(core::Iterable<core::int?>) → void};
+    {
+      core::Iterator<dynamic> :sync-for-iterator = (list3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int? #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int?;
+          #t1.{core::List::add}{Invariant}(#t3){(core::int?) → void};
+        }
+      }
+    }
+    if(true)
+      #t1.{core::List::add}{Invariant}(2){(core::int?) → void};
+  } =>#t1;
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
+    #t4.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t4;
+  core::Set<core::int?> set2 = block {
+    final core::Set<core::int?> #t5 = new col::_CompactLinkedHashSet::•<core::int?>();
+    #t5.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+  } =>#t5;
+  dynamic set3 = block {
+    final core::Set<core::int> #t6 = new col::_CompactLinkedHashSet::•<core::int>();
+    #t6.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+  } =>#t6;
+  core::Set<core::int?> set = block {
+    final core::Set<core::int?> #t7 = new col::_CompactLinkedHashSet::•<core::int?>();
+    #t7.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int?>) → void};
+    #t7.{core::Set::addAll}{Invariant}(set2){(core::Iterable<core::int?>) → void};
+    {
+      core::Iterator<dynamic> :sync-for-iterator = (set3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int? #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int?;
+          #t7.{core::Set::add}{Invariant}(#t9){(core::int?) → core::bool};
+        }
+      }
+    }
+    if(true)
+      #t7.{core::Set::add}{Invariant}(2){(core::int?) → core::bool};
+  } =>#t7;
+  core::Map<core::int, core::String> map1 = <core::int, core::String>{0: "foo"};
+  core::Map<core::int?, core::String?> map2 = <core::int?, core::String?>{0: "bar"};
+  dynamic map3 = <core::int, core::String>{0: "baz"};
+  core::Map<core::int?, core::String?> map = block {
+    final core::Map<core::int?, core::String?> #t10 = <core::int?, core::String?>{};
+    #t10.{core::Map::[]=}{Invariant}(0, "foo"){(core::int?, core::String?) → void};
+    {
+      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::int?, core::String?> #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
+        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{core::int?}, #t11.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+      }
+    }
+    {
+      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::int?, core::String?> #t12 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
+        #t10.{core::Map::[]=}{Invariant}(#t12.{core::MapEntry::key}{core::int?}, #t12.{core::MapEntry::value}{core::String?}){(core::int?, core::String?) → void};
+      }
+    }
+    {
+      core::Iterator<core::MapEntry<core::int?, core::String?>> :sync-for-iterator = (map3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int?, core::String?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<dynamic, dynamic> #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int?, core::String?>};
+        {
+          final core::int? #t14 = #t13.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+          final core::String? #t15 = #t13.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::String?;
+          #t10.{core::Map::[]=}{Invariant}(#t14, #t15){(core::int?, core::String?) → void};
+        }
+      }
+    }
+    if(true)
+      #t10.{core::Map::[]=}{Invariant}(2, "baz"){(core::int?, core::String?) → void};
+  } =>#t10;
+}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart b/pkg/front_end/testcases/unified_collections/mixed_entries.dart
index fa03bc7..55810a0 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.9
-
 bool b = false;
 
 var list = [];
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline.expect
index 147bb36..480a19e 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool b = false;
 var list = [];
 var map0 = {};
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline_modelled.expect
index 1f1b82d..1843b5c 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool b = false;
 main() {}
 var error10 = {
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
index 4389b70..a85bfed 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
@@ -1,176 +1,176 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error4 = {if (b) 0: 1 else for (var a in list) a};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error5 = {if (b) for (var a in list) a else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error6 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error7 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error10 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error11 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error12 = {
 //               ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = false;
-static field core::List<dynamic>* list = <dynamic>[];
-static field core::Map<dynamic, dynamic>* map0 = <dynamic, dynamic>{};
-static field core::Map<dynamic, dynamic>* map1 = block {
-  final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
+static field core::bool b = false;
+static field core::List<dynamic> list = <dynamic>[];
+static field core::Map<dynamic, dynamic> map0 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map1 = block {
+  final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
   if(self::b)
-    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
   else
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
-static field core::Map<dynamic, dynamic>* map2 = block {
-  final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map2 = block {
+  final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
   if(self::b)
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   else
-    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
 } =>#t3;
-static field core::Map<dynamic, dynamic>* map3 = block {
-  final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map3 = block {
+  final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
   if(self::b)
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   else
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t5;
-static field core::Map<dynamic, core::int*>* map4 = block {
-  final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map4 = block {
+  final core::Map<dynamic, core::int> #t8 = <dynamic, core::int>{};
   if(self::b)
-    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
     for (dynamic a in self::list)
-      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
 } =>#t8;
-static field core::Map<dynamic, core::int*>* map5 = block {
-  final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map5 = block {
+  final core::Map<dynamic, core::int> #t9 = <dynamic, core::int>{};
   if(self::b)
     for (dynamic a in self::list)
-      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
   else
-    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t9;
-static field core::Map<dynamic, core::int*>* map6 = block {
-  final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map6 = block {
+  final core::Map<dynamic, core::int> #t10 = <dynamic, core::int>{};
   if(self::b)
-    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
     for (dynamic a in self::list)
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t11 in <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
 } =>#t10;
-static field core::Map<dynamic, core::int*>* map7 = block {
-  final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map7 = block {
+  final core::Map<dynamic, core::int> #t12 = <dynamic, core::int>{};
   if(self::b)
     for (dynamic a in self::list)
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t13 in <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
   else
-    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t12;
-static field core::Map<dynamic, core::int*>* map8 = block {
-  final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map8 = block {
+  final core::Map<dynamic, core::int> #t14 = <dynamic, core::int>{};
   if(self::b)
-    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
 } =>#t14;
-static field core::Map<dynamic, core::int*>* map9 = block {
-  final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map9 = block {
+  final core::Map<dynamic, core::int> #t15 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
   else
-    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t15;
-static field core::Map<dynamic, core::int*>* map10 = block {
-  final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map10 = block {
+  final core::Map<dynamic, core::int> #t16 = <dynamic, core::int>{};
   if(self::b)
-    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t17 in <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
 } =>#t16;
-static field core::Map<dynamic, core::int*>* map11 = block {
-  final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map11 = block {
+  final core::Map<dynamic, core::int> #t18 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t19 in <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
   else
-    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t18;
-static field core::Map<core::int*, core::int*>* map12 = block {
-  final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
+static field core::Map<core::int, core::int> map12 = block {
+  final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
   if(self::b)
-    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
+    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int, core::int) → void};
   else
     if(self::b)
-      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t21 in <core::int, core::int>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int}, #t21.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
 } =>#t20;
-static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
                                ^": null};
-static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error5 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error5 = {if (b) for (var a in list) a else 0: 1};
                      ^": null};
-static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error6 = {
              ^";
-static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error7 = {
              ^";
-static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error8 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
                                ^": null};
-static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error9 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
                      ^": null};
-static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error10 = {
               ^";
-static field Null error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error11 = {
               ^";
-static field Null error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error12 = {
               ^";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
index 4389b70..a85bfed 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
@@ -1,176 +1,176 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error4 = {if (b) 0: 1 else for (var a in list) a};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error5 = {if (b) for (var a in list) a else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error6 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error7 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error10 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error11 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error12 = {
 //               ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = false;
-static field core::List<dynamic>* list = <dynamic>[];
-static field core::Map<dynamic, dynamic>* map0 = <dynamic, dynamic>{};
-static field core::Map<dynamic, dynamic>* map1 = block {
-  final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
+static field core::bool b = false;
+static field core::List<dynamic> list = <dynamic>[];
+static field core::Map<dynamic, dynamic> map0 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map1 = block {
+  final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
   if(self::b)
-    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
   else
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
-static field core::Map<dynamic, dynamic>* map2 = block {
-  final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map2 = block {
+  final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
   if(self::b)
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   else
-    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
 } =>#t3;
-static field core::Map<dynamic, dynamic>* map3 = block {
-  final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map3 = block {
+  final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
   if(self::b)
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   else
-    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
-      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t5;
-static field core::Map<dynamic, core::int*>* map4 = block {
-  final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map4 = block {
+  final core::Map<dynamic, core::int> #t8 = <dynamic, core::int>{};
   if(self::b)
-    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
     for (dynamic a in self::list)
-      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
 } =>#t8;
-static field core::Map<dynamic, core::int*>* map5 = block {
-  final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map5 = block {
+  final core::Map<dynamic, core::int> #t9 = <dynamic, core::int>{};
   if(self::b)
     for (dynamic a in self::list)
-      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
   else
-    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t9;
-static field core::Map<dynamic, core::int*>* map6 = block {
-  final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map6 = block {
+  final core::Map<dynamic, core::int> #t10 = <dynamic, core::int>{};
   if(self::b)
-    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
     for (dynamic a in self::list)
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t11 in <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
 } =>#t10;
-static field core::Map<dynamic, core::int*>* map7 = block {
-  final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map7 = block {
+  final core::Map<dynamic, core::int> #t12 = <dynamic, core::int>{};
   if(self::b)
     for (dynamic a in self::list)
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t13 in <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
   else
-    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t12;
-static field core::Map<dynamic, core::int*>* map8 = block {
-  final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map8 = block {
+  final core::Map<dynamic, core::int> #t14 = <dynamic, core::int>{};
   if(self::b)
-    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
 } =>#t14;
-static field core::Map<dynamic, core::int*>* map9 = block {
-  final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map9 = block {
+  final core::Map<dynamic, core::int> #t15 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
   else
-    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t15;
-static field core::Map<dynamic, core::int*>* map10 = block {
-  final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map10 = block {
+  final core::Map<dynamic, core::int> #t16 = <dynamic, core::int>{};
   if(self::b)
-    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t17 in <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
 } =>#t16;
-static field core::Map<dynamic, core::int*>* map11 = block {
-  final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map11 = block {
+  final core::Map<dynamic, core::int> #t18 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int> #t19 in <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>})
+        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
   else
-    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t18;
-static field core::Map<core::int*, core::int*>* map12 = block {
-  final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
+static field core::Map<core::int, core::int> map12 = block {
+  final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
   if(self::b)
-    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
+    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int, core::int) → void};
   else
     if(self::b)
-      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t21 in <core::int, core::int>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int}, #t21.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
 } =>#t20;
-static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
                                ^": null};
-static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error5 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error5 = {if (b) for (var a in list) a else 0: 1};
                      ^": null};
-static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error6 = {
              ^";
-static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error7 = {
              ^";
-static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error8 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
                                ^": null};
-static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error9 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
                      ^": null};
-static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error10 = {
               ^";
-static field Null error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error11 = {
               ^";
-static field Null error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error12 = {
               ^";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
index 142ef6b..9649040 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.outline.expect
@@ -1,49 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error4 = {if (b) 0: 1 else for (var a in list) a};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error5 = {if (b) for (var a in list) a else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
 //                      ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b;
-static field core::List<dynamic>* list;
-static field core::Map<dynamic, dynamic>* map0;
-static field core::Map<dynamic, dynamic>* map1;
-static field core::Map<dynamic, dynamic>* map2;
-static field core::Map<dynamic, dynamic>* map3;
-static field core::Map<dynamic, core::int*>* map4;
-static field core::Map<dynamic, core::int*>* map5;
-static field core::Map<dynamic, core::int*>* map6;
-static field core::Map<dynamic, core::int*>* map7;
-static field core::Map<dynamic, core::int*>* map8;
-static field core::Map<dynamic, core::int*>* map9;
-static field core::Map<dynamic, core::int*>* map10;
-static field core::Map<dynamic, core::int*>* map11;
-static field core::Map<core::int*, core::int*>* map12;
-static field core::Map<invalid-type, Null>* error4;
-static field core::Map<invalid-type, Null>* error5;
-static field Null error6;
-static field Null error7;
-static field core::Map<invalid-type, Null>* error8;
-static field core::Map<invalid-type, Null>* error9;
-static field Null error10;
-static field Null error11;
-static field Null error12;
+static field core::bool b;
+static field core::List<dynamic> list;
+static field core::Map<dynamic, dynamic> map0;
+static field core::Map<dynamic, dynamic> map1;
+static field core::Map<dynamic, dynamic> map2;
+static field core::Map<dynamic, dynamic> map3;
+static field core::Map<dynamic, core::int> map4;
+static field core::Map<dynamic, core::int> map5;
+static field core::Map<dynamic, core::int> map6;
+static field core::Map<dynamic, core::int> map7;
+static field core::Map<dynamic, core::int> map8;
+static field core::Map<dynamic, core::int> map9;
+static field core::Map<dynamic, core::int> map10;
+static field core::Map<dynamic, core::int> map11;
+static field core::Map<core::int, core::int> map12;
+static field core::Map<dynamic, Null> error4;
+static field core::Map<dynamic, Null> error5;
+static field Never error6;
+static field Never error7;
+static field core::Map<dynamic, Null> error8;
+static field core::Map<dynamic, Null> error9;
+static field Never error10;
+static field Never error11;
+static field Never error12;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
index c14132e..03bc08b 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
@@ -1,230 +1,230 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error4 = {if (b) 0: 1 else for (var a in list) a};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error5 = {if (b) for (var a in list) a else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
 //                                ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
 //                      ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error6 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error7 = {
 //              ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error10 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error11 = {
 //               ^
 //
-// pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 // var error12 = {
 //               ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = false;
-static field core::List<dynamic>* list = core::_GrowableList::•<dynamic>(0);
-static field core::Map<dynamic, dynamic>* map0 = <dynamic, dynamic>{};
-static field core::Map<dynamic, dynamic>* map1 = block {
-  final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
+static field core::bool b = false;
+static field core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
+static field core::Map<dynamic, dynamic> map0 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map1 = block {
+  final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
   if(self::b)
-    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
   else {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::MapEntry<dynamic, dynamic>* #t2 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+      final core::MapEntry<dynamic, dynamic> #t2 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
 } =>#t1;
-static field core::Map<dynamic, dynamic>* map2 = block {
-  final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map2 = block {
+  final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
   if(self::b) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::MapEntry<dynamic, dynamic>* #t4 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+      final core::MapEntry<dynamic, dynamic> #t4 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
   else
-    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) → void};
 } =>#t3;
-static field core::Map<dynamic, dynamic>* map3 = block {
-  final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic> map3 = block {
+  final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
   if(self::b) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+      final core::MapEntry<dynamic, dynamic> #t6 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
   else {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>*};
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::MapEntry<dynamic, dynamic>* #t7 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
-      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+      final core::MapEntry<dynamic, dynamic> #t7 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
 } =>#t5;
-static field core::Map<dynamic, core::int*>* map4 = block {
-  final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map4 = block {
+  final core::Map<dynamic, core::int> #t8 = <dynamic, core::int>{};
   if(self::b)
-    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else {
-    core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current}{dynamic};
-      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
     }
   }
 } =>#t8;
-static field core::Map<dynamic, core::int*>* map5 = block {
-  final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map5 = block {
+  final core::Map<dynamic, core::int> #t9 = <dynamic, core::int>{};
   if(self::b) {
-    core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current}{dynamic};
-      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int) → void};
     }
   }
   else
-    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t9;
-static field core::Map<dynamic, core::int*>* map6 = block {
-  final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map6 = block {
+  final core::Map<dynamic, core::int> #t10 = <dynamic, core::int>{};
   if(self::b)
-    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else {
-    core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int*>>*};
+        core::Iterator<core::MapEntry<dynamic, core::int>> :sync-for-iterator = <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int>>};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<dynamic, core::int*>* #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int*>};
-          #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+          final core::MapEntry<dynamic, core::int> #t11 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int>};
+          #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
         }
       }
     }
   }
 } =>#t10;
-static field core::Map<dynamic, core::int*>* map7 = block {
-  final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map7 = block {
+  final core::Map<dynamic, core::int> #t12 = <dynamic, core::int>{};
   if(self::b) {
-    core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = self::list.{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int*>>*};
+        core::Iterator<core::MapEntry<dynamic, core::int>> :sync-for-iterator = <dynamic, core::int>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int>>};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-          final core::MapEntry<dynamic, core::int*>* #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int*>};
-          #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+          final core::MapEntry<dynamic, core::int> #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int>};
+          #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
         }
       }
     }
   }
   else
-    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t12;
-static field core::Map<dynamic, core::int*>* map8 = block {
-  final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map8 = block {
+  final core::Map<dynamic, core::int> #t14 = <dynamic, core::int>{};
   if(self::b)
-    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
 } =>#t14;
-static field core::Map<dynamic, core::int*>* map9 = block {
-  final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map9 = block {
+  final core::Map<dynamic, core::int> #t15 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int) → dynamic}, 1){(dynamic, core::int) → void};
   else
-    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t15;
-static field core::Map<dynamic, core::int*>* map10 = block {
-  final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map10 = block {
+  final core::Map<dynamic, core::int> #t16 = <dynamic, core::int>{};
   if(self::b)
-    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int*>>*};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::Iterator<core::MapEntry<dynamic, core::int>> :sync-for-iterator = <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, core::int*>* #t17 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int*>};
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+        final core::MapEntry<dynamic, core::int> #t17 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int>};
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
       }
     }
 } =>#t16;
-static field core::Map<dynamic, core::int*>* map11 = block {
-  final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
+static field core::Map<dynamic, core::int> map11 = block {
+  final core::Map<dynamic, core::int> #t18 = <dynamic, core::int>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int*>>*};
+    for (core::int i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::Iterator<core::MapEntry<dynamic, core::int>> :sync-for-iterator = <dynamic, core::int>{self::list.{core::List::[]}(i){(core::int) → dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<dynamic, core::int*>* #t19 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int*>};
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+        final core::MapEntry<dynamic, core::int> #t19 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, core::int>};
+        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int}){(dynamic, core::int) → void};
       }
     }
   else
-    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int) → void};
 } =>#t18;
-static field core::Map<core::int*, core::int*>* map12 = block {
-  final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
+static field core::Map<core::int, core::int> map12 = block {
+  final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
   if(self::b)
-    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
+    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int, core::int) → void};
   else
     if(self::b) {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = <core::int, core::int>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::int*, core::int*>* #t21 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+        final core::MapEntry<core::int, core::int> #t21 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int}, #t21.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
 } =>#t20;
-static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
                                ^": null};
-static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error5 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:34:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error5 = {if (b) for (var a in list) a else 0: 1};
                      ^": null};
-static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error6 = {
              ^";
-static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:38:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error7 = {
              ^";
-static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error8 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:41:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
                                ^": null};
-static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field core::Map<dynamic, Null> error9 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:42:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
                      ^": null};
-static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error10 = {
               ^";
-static field Null error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:46:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error11 = {
               ^";
-static field Null error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static field Never error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:49:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error12 = {
               ^";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart b/pkg/front_end/testcases/unified_collections/string_concatenation.dart
index d1528c2..9d9d77c 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.9
-
 main() {
   bool b = false;
   ['a' 'b', if (b) 'c' 'd'];
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
index 2263773..2b3d8b4 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
   block {
-    final core::List<core::String*>* #t1 = <core::String*>["ab"];
+    final core::List<core::String> #t1 = <core::String>["ab"];
     if(b)
-      #t1.{core::List::add}{Invariant}("cd"){(core::String*) →* void};
+      #t1.{core::List::add}{Invariant}("cd"){(core::String) → void};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect
index 2263773..2b3d8b4 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
   block {
-    final core::List<core::String*>* #t1 = <core::String*>["ab"];
+    final core::List<core::String> #t1 = <core::String>["ab"];
     if(b)
-      #t1.{core::List::add}{Invariant}("cd"){(core::String*) →* void};
+      #t1.{core::List::add}{Invariant}("cd"){(core::String) → void};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.outline.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
index 30ae805..bcfe99d 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
   block {
-    final core::List<core::String*>* #t1 = core::_GrowableList::_literal1<core::String*>("ab");
+    final core::List<core::String> #t1 = core::_GrowableList::_literal1<core::String>("ab");
     if(b)
-      #t1.{core::List::add}{Invariant}("cd"){(core::String*) →* void};
+      #t1.{core::List::add}{Invariant}("cd"){(core::String) → void};
   } =>#t1;
 }
 
 
 Extra constant evaluation status:
-Evaluated: StringConcatenation @ org-dartlang-testcase:///string_concatenation.dart:9:3 -> StringConstant("ab")
-Evaluated: StringConcatenation @ org-dartlang-testcase:///string_concatenation.dart:9:18 -> StringConstant("cd")
+Evaluated: StringConcatenation @ org-dartlang-testcase:///string_concatenation.dart:7:3 -> StringConstant("ab")
+Evaluated: StringConcatenation @ org-dartlang-testcase:///string_concatenation.dart:7:18 -> StringConstant("cd")
 Extra constant evaluation: evaluated: 8, effectively constant: 2
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index a0bc52a4..5a91ed6 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -242,7 +242,6 @@
 rasta/issue_000041: RuntimeError
 rasta/issue_000042: RuntimeError
 rasta/issue_000044: RuntimeError
-rasta/issue_000081: RuntimeError
 rasta/malformed_const_constructor: RuntimeError
 rasta/malformed_function: RuntimeError
 rasta/mixin_library: TypeCheckError
@@ -260,11 +259,11 @@
 regress/issue_29976: RuntimeError # Tests runtime behavior of error recovery.
 regress/issue_29982: RuntimeError # Tests runtime behavior of error recovery.
 regress/issue_31180: TypeCheckError
+regress/issue_31180_2: TypeCheckError
 regress/issue_32972: RuntimeError
 regress/issue_33452: RuntimeError # Test has an intentional error
 regress/issue_34225: RuntimeError
 regress/issue_34563: RuntimeError # Test execution after recovery
-regress/issue_35177: RuntimeError
 regress/issue_35258: RuntimeError # Expected
 regress/issue_35259: RuntimeError # Expected
 regress/issue_35260: RuntimeError # Expected
@@ -274,6 +273,7 @@
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
 runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
 set_literals/disambiguation_rule: RuntimeError
+set_literals/disambiguation_rule2: RuntimeError
 value_class/copy_with_call_sites: RuntimeError # Expected
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 0b67866..2d92f0b 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -343,8 +343,10 @@
         "testcases/inference/overloaded_int_operators\\.dart$",
         "testcases/instantiate_to_bound/non_simple_many\\.dart$",
         "testcases/instantiate_to_bound/non_simple_suppress_consequence\\.dart$",
+        "testcases/rasta/switch_execution_case_t01\\.dart$",
         "testcases/rasta/switch_execution_case_t02\\.dart$",
         "testcases/set_literals/disambiguation_rule\\.dart$",
+        "testcases/set_literals/disambiguation_rule2\\.dart$",
         "tool/_fasta/abcompile\\.dart$"
       ]
     },
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 60d6899..f3bd2eb 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -224,6 +224,9 @@
   ///
   /// Returns a future which will complete with an [Isolate] instance if the
   /// spawning succeeded. It will complete with an error otherwise.
+  ///
+  /// One can expect the base memory overhead of an isolate to be in the order
+  /// of 30 kb.
   external static Future<Isolate> spawn<T>(
       void entryPoint(T message), T message,
       {bool paused = false,
diff --git a/tests/language/if_null/assignment_behavior_runtime_26_test.dart b/tests/language/if_null/assignment_behavior_runtime_26_test.dart
index afd709b..6fe8e95 100644
--- a/tests/language/if_null/assignment_behavior_runtime_26_test.dart
+++ b/tests/language/if_null/assignment_behavior_runtime_26_test.dart
@@ -204,6 +204,9 @@
 
   yGetValue = 1;
   check(1, () => C?.x ??= y, ['C.x', 'y', 'C.x=1']);
-
+  //             ^
+  // [cfe] The class 'C' cannot be null.
+  //              ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
 }
diff --git a/tests/language/if_null/assignment_behavior_runtime_27_test.dart b/tests/language/if_null/assignment_behavior_runtime_27_test.dart
index 97fa09c..d932daa 100644
--- a/tests/language/if_null/assignment_behavior_runtime_27_test.dart
+++ b/tests/language/if_null/assignment_behavior_runtime_27_test.dart
@@ -206,4 +206,8 @@
 
   yGetValue = 1;
   check(1, () => h.C?.x ??= y, ['h.C.x', 'y', 'h.C.x=1']);
+  //               ^
+  // [cfe] The class 'C' cannot be null.
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 }
diff --git a/tests/language/if_null/assignment_behavior_test.dart b/tests/language/if_null/assignment_behavior_test.dart
index ab3f20c..a0d6f11 100644
--- a/tests/language/if_null/assignment_behavior_test.dart
+++ b/tests/language/if_null/assignment_behavior_test.dart
@@ -257,6 +257,8 @@
   // C?.v ??= e2 is equivalent to C.v ??= e2.
   C.xGetValue = 1;
   check(1, () => C?.x ??= bad(), ['C.x']);
+  //              ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //             ^
   // [cfe] The class 'C' cannot be null.
   h.C.xgetValue = 1;
@@ -269,10 +271,14 @@
   // [cfe] Undefined name 'c'.
   yGetValue = 1;
   check(1, () => C?.x ??= y, ['C.x', 'y', 'C.x=1']);
+  //              ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //             ^
   // [cfe] The class 'C' cannot be null.
   yGetValue = 1;
   check(1, () => h.C?.x ??= y, ['h.C.x', 'y', 'h.C.x=1']);
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //               ^
   // [cfe] The class 'C' cannot be null.
 }
diff --git a/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart b/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
index a59bdd2..52d691c 100644
--- a/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
+++ b/tests/language/nnbd/flow_analysis/never_runtime_check_nnbd.dart
@@ -227,7 +227,8 @@
 }
 
 int ifNullAssignNullAwareStatic(int f()) {
-  return C?.staticField ??= f(); // ignore: dead_null_aware_expression
+  // ignore: dead_null_aware_expression, invalid_null_aware_operator
+  return C?.staticField ??= f();
 }
 
 void unnecessaryNullAwareAccess(int f()) {
diff --git a/tests/language/null_aware/access_runtime_test.dart b/tests/language/null_aware/access_runtime_test.dart
index 9495fef..49e606e 100644
--- a/tests/language/null_aware/access_runtime_test.dart
+++ b/tests/language/null_aware/access_runtime_test.dart
@@ -28,9 +28,17 @@
   // C?.id is equivalent to C.id.
   C.staticInt = 1;
   Expect.equals(1, C?.staticInt);
+  //               ^
+  // [cfe] The class 'C' cannot be null.
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
   h.C.staticInt = 1;
   Expect.equals(1, h.C?.staticInt);
+  //                 ^
+  // [cfe] The class 'C' cannot be null.
+  //                  ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
   // The static type of e1?.id is the static type of e1.id.
   {
@@ -41,12 +49,20 @@
   {
     C.staticInt = 1;
     int? i = C?.staticInt;
+    //       ^
+    // [cfe] The class 'C' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
 
   {
     h.C.staticInt = 1;
     int? i = h.C?.staticInt;
+    //         ^
+    // [cfe] The class 'C' cannot be null.
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
 }
diff --git a/tests/language/null_aware/access_test.dart b/tests/language/null_aware/access_test.dart
index 6fc1daa..61b4207 100644
--- a/tests/language/null_aware/access_test.dart
+++ b/tests/language/null_aware/access_test.dart
@@ -35,6 +35,8 @@
   {
     C.staticInt = 1;
     Expect.equals(1, C?.staticInt);
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //               ^
     // [cfe] The class 'C' cannot be null.
   }
@@ -43,6 +45,8 @@
     Expect.equals(1, h.C?.staticInt);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   }
 
   // The static type of e1?.d is the static type of e1.id.
@@ -70,6 +74,8 @@
     int? i = C?.staticInt;
     //       ^
     // [cfe] The class 'C' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
   {
@@ -77,6 +83,8 @@
     int? i = h.C?.staticInt;
     //         ^
     // [cfe] The class 'C' cannot be null.
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
   {
@@ -87,6 +95,8 @@
     // [cfe] The class 'C' cannot be null.
     //             ^
     // [cfe] A value of type 'int?' can't be assigned to a variable of type 'String?'.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(null, s);
   }
   {
@@ -94,6 +104,8 @@
     String? s = h.C?.staticNullable;
     //          ^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+    //             ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //            ^
     // [cfe] The class 'C' cannot be null.
     //               ^
@@ -125,10 +137,14 @@
 
   // Nor can it be used to access the hashCode getter on the class Type.
   Expect.throwsNoSuchMethodError(() => C?.hashCode);
+  //                                    ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //                                      ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
   // [cfe] Member not found: 'hashCode'.
   Expect.throwsNoSuchMethodError(() => h.C?.hashCode);
+  //                                      ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //                                        ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
   // [cfe] Member not found: 'hashCode'.
diff --git a/tests/language/null_aware/assignment_runtime_test.dart b/tests/language/null_aware/assignment_runtime_test.dart
index 6e73e75..69f1258 100644
--- a/tests/language/null_aware/assignment_runtime_test.dart
+++ b/tests/language/null_aware/assignment_runtime_test.dart
@@ -52,10 +52,18 @@
   // C?.v = e2 is equivalent to C.v = e2.
   C.staticInt = 1;
   Expect.equals(2, C?.staticInt = 2);
+  //               ^
+  // [cfe] The class 'C' cannot be null.
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.equals(2, C.staticInt);
 
   h.C.staticInt = 1;
   Expect.equals(2, h.C?.staticInt = 2);
+  //                 ^
+  // [cfe] The class 'C' cannot be null.
+  //                  ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.equals(2, h.C.staticInt);
 
   // The static type of e1?.v = e2 is the static type of e2.
@@ -70,12 +78,20 @@
     D.staticE = new E();
     G g = new G();
     F? f = (D?.staticE = g);
+    //      ^
+    // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(f, g);
   }
 
   h.D.staticE = new h.E();
   h.G g = new h.G();
   h.F? f = (h.D?.staticE = g);
+  //          ^
+  // [cfe] The class 'D' cannot be null.
+  //           ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.identical(f, g);
 
   // Exactly the same errors that would be caused by e1.v = e2 are
@@ -92,7 +108,15 @@
   // C?.v op= e2 is equivalent to C.v op= e2.
   C.staticInt = 1;
   Expect.equals(3, C?.staticInt += 2);
+  //               ^
+  // [cfe] The class 'C' cannot be null.
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.equals(3, C?.staticInt);
+  //               ^
+  // [cfe] The class 'C' cannot be null.
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
   // The static type of e1?.v op= e2 is the static type of e1.v op e2.
   {
@@ -104,12 +128,20 @@
   {
     D.staticE = new E();
     F? f = (D?.staticE += 1);
+    //      ^
+    // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(D.staticE, f);
   }
 
   {
     h.D.staticE = new h.E();
     h.F? f = (h.D?.staticE += 1);
+    //          ^
+    // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
 }
diff --git a/tests/language/null_aware/assignment_test.dart b/tests/language/null_aware/assignment_test.dart
index 59397b3..3fdb555 100644
--- a/tests/language/null_aware/assignment_test.dart
+++ b/tests/language/null_aware/assignment_test.dart
@@ -64,6 +64,8 @@
     Expect.equals(2, C?.staticInt = 2);
     //               ^
     // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, C.staticInt);
   }
   {
@@ -71,6 +73,8 @@
     Expect.equals(2, h.C?.staticInt = 2);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, h.C.staticInt);
   }
 
@@ -95,6 +99,8 @@
     F? f = (D?.staticE = g);
     //      ^
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(f, g);
   }
   {
@@ -103,6 +109,8 @@
     h.F? f = (h.D?.staticE = g);
     //          ^
     // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(f, g);
   }
   {
@@ -112,6 +120,8 @@
     //      ^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //         ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F?'.
   }
@@ -123,6 +133,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //         ^
     // [cfe] The class 'D' cannot be null.
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //            ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F'.
   }
@@ -163,9 +175,13 @@
     Expect.equals(3, C?.staticInt += 2);
     //               ^
     // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(3, C?.staticInt);
     //               ^
     // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   }
 
   // The static type of e1?.v op= e2 is the static type of e1.v op e2.
@@ -183,6 +199,8 @@
     F? f = (D?.staticE += 1);
     //      ^
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(D.staticE, f);
   }
   {
@@ -190,6 +208,8 @@
     h.F? f = (h.D?.staticE += 1);
     //          ^
     // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
 
@@ -239,6 +259,8 @@
     F? f = (D?.staticE += nullC());
     //      ^
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //                    ^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
     // [cfe] A value of type 'C?' can't be assigned to a variable of type 'int'.
@@ -248,6 +270,8 @@
     h.F? f = (h.D?.staticE += h.nullC());
     //          ^
     // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //                        ^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
     //                          ^
@@ -259,6 +283,8 @@
     //      ^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //         ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
   }
@@ -269,6 +295,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //           ^
     // [cfe] The class 'D' cannot be null.
+    //            ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //              ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
   }
diff --git a/tests/language/null_aware/increment_decrement_runtime_test.dart b/tests/language/null_aware/increment_decrement_runtime_test.dart
index 0229341..01c72da 100644
--- a/tests/language/null_aware/increment_decrement_runtime_test.dart
+++ b/tests/language/null_aware/increment_decrement_runtime_test.dart
@@ -55,11 +55,19 @@
   {
     C.staticInt = 1;
     Expect.equals(1, C?.staticInt++);
+    //               ^
+    // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, C.staticInt);
   }
   {
     h.C.staticInt = 1;
     Expect.equals(1, h.C?.staticInt++);
+    //                 ^
+    // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, h.C.staticInt);
   }
 
@@ -75,12 +83,20 @@
     E e1 = new E();
     D.staticE = e1;
     E? e2 = D?.staticE++;
+    //      ^
+    // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
     h.E e1 = new h.E();
     h.D.staticE = e1;
     h.E? e2 = h.D?.staticE++;
+    //          ^
+    // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
 
@@ -96,11 +112,19 @@
   {
     C.staticInt = 1;
     Expect.equals(1, C?.staticInt--);
+    //               ^
+    // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, C.staticInt);
   }
   {
     h.C.staticInt = 1;
     Expect.equals(1, h.C?.staticInt--);
+    //                 ^
+    // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, h.C.staticInt);
   }
 
@@ -116,12 +140,20 @@
     E e1 = new E();
     D.staticE = e1;
     E? e2 = D?.staticE--;
+    //      ^
+    // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
     h.E e1 = new h.E();
     h.D.staticE = e1;
     h.E? e2 = h.D?.staticE--;
+    //          ^
+    // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
 
@@ -137,11 +169,19 @@
   {
     C.staticInt = 1;
     Expect.equals(2, ++C?.staticInt);
+    //                 ^
+    // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, C.staticInt);
   }
   {
     h.C.staticInt = 1;
     Expect.equals(2, ++h.C?.staticInt);
+    //                   ^
+    // [cfe] The class 'C' cannot be null.
+    //                    ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, h.C.staticInt);
   }
 
@@ -160,6 +200,10 @@
   {
     h.D.staticE = new h.E();
     h.F? f = ++h.D?.staticE;
+    //           ^
+    // [cfe] The class 'D' cannot be null.
+    //            ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
 
@@ -175,11 +219,19 @@
   {
     C.staticInt = 1;
     Expect.equals(0, --C?.staticInt);
+    //                 ^
+    // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, C.staticInt);
   }
   {
     h.C.staticInt = 1;
     Expect.equals(0, --h.C?.staticInt);
+    //                   ^
+    // [cfe] The class 'C' cannot be null.
+    //                    ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, h.C.staticInt);
   }
 
@@ -193,12 +245,20 @@
   {
     D.staticE = new E();
     F? f = --D?.staticE;
+    //       ^
+    // [cfe] The class 'D' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(D.staticE, f);
   }
 
   {
     h.D.staticE = new h.E();
     h.F? f = --h.D?.staticE;
+    //           ^
+    // [cfe] The class 'D' cannot be null.
+    //            ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
 }
diff --git a/tests/language/null_aware/increment_decrement_test.dart b/tests/language/null_aware/increment_decrement_test.dart
index d1916b6..0e99f75 100644
--- a/tests/language/null_aware/increment_decrement_test.dart
+++ b/tests/language/null_aware/increment_decrement_test.dart
@@ -54,6 +54,8 @@
     Expect.equals(1, C?.staticInt++);
     //               ^
     // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, C.staticInt);
   }
   {
@@ -61,6 +63,8 @@
     Expect.equals(1, h.C?.staticInt++);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, h.C.staticInt);
   }
 
@@ -86,6 +90,8 @@
     E? e2 = D?.staticE++;
     //      ^
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
@@ -94,6 +100,8 @@
     h.E? e2 = h.D?.staticE++;
     //          ^
     // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
@@ -103,6 +111,8 @@
     //     ^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] The class 'D' cannot be null.
+    //      ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //               ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F?'.
     Expect.identical(f, g);
@@ -115,6 +125,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //         ^
     // [cfe] The class 'D' cannot be null.
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //                   ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F?'.
     Expect.identical(f, g);
@@ -134,6 +146,8 @@
     Expect.equals(1, C?.staticInt--);
     //               ^
     // [cfe] The class 'C' cannot be null.
+    //                ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, C.staticInt);
   }
   {
@@ -141,6 +155,8 @@
     Expect.equals(1, h.C?.staticInt--);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, h.C.staticInt);
   }
 
@@ -166,6 +182,8 @@
     E? e2 = D?.staticE--;
     //      ^
     // [cfe] The class 'D' cannot be null.
+    //       ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
@@ -174,6 +192,8 @@
     h.E? e2 = h.D?.staticE--;
     //          ^
     // [cfe] The class 'D' cannot be null.
+    //           ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(e1, e2);
   }
   {
@@ -183,6 +203,8 @@
     //     ^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] The class 'D' cannot be null.
+    //      ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //               ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F?'.
     Expect.identical(f, g);
@@ -195,6 +217,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //         ^
     // [cfe] The class 'D' cannot be null.
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //                   ^
     // [cfe] A value of type 'E' can't be assigned to a variable of type 'F?'.
     Expect.identical(f, g);
@@ -214,6 +238,8 @@
     Expect.equals(2, ++C?.staticInt);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, C.staticInt);
   }
   {
@@ -221,6 +247,8 @@
     Expect.equals(2, ++h.C?.staticInt);
     //                   ^
     // [cfe] The class 'C' cannot be null.
+    //                    ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(2, h.C.staticInt);
   }
 
@@ -244,6 +272,8 @@
     F? f = ++D?.staticE;
     //       ^
     // [cfe] The class 'D' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(D.staticE, f);
   }
   {
@@ -251,6 +281,8 @@
     h.F? f = ++h.D?.staticE;
     //           ^
     // [cfe] The class 'D' cannot be null.
+    //            ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
   {
@@ -260,6 +292,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //       ^
     // [cfe] The class 'D' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //          ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
     Expect.identical(D.staticE, h);
@@ -271,6 +305,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //            ^
     // [cfe] The class 'D' cannot be null.
+    //             ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //               ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
     Expect.identical(h.D.staticE, hh);
@@ -290,6 +326,8 @@
     Expect.equals(0, --C?.staticInt);
     //                 ^
     // [cfe] The class 'C' cannot be null.
+    //                  ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, C.staticInt);
   }
   {
@@ -297,6 +335,8 @@
     Expect.equals(0, --h.C?.staticInt);
     //                   ^
     // [cfe] The class 'C' cannot be null.
+    //                    ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(0, h.C.staticInt);
   }
 
@@ -320,6 +360,8 @@
     F? f = --D?.staticE;
     //       ^
     // [cfe] The class 'D' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(D.staticE, f);
   }
   {
@@ -327,6 +369,8 @@
     h.F? f = --h.D?.staticE;
     //           ^
     // [cfe] The class 'D' cannot be null.
+    //            ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.identical(h.D.staticE, f);
   }
   {
@@ -336,6 +380,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //       ^
     // [cfe] The class 'D' cannot be null.
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //          ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
     Expect.identical(D.staticE, h);
@@ -347,6 +393,8 @@
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     //            ^
     // [cfe] The class 'D' cannot be null.
+    //             ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     //               ^
     // [cfe] A value of type 'G' can't be assigned to a variable of type 'H?'.
     Expect.identical(h.D.staticE, hh);
diff --git a/tests/language/null_aware/invocation_runtime_test.dart b/tests/language/null_aware/invocation_runtime_test.dart
index a4bd1d5..72d6942 100644
--- a/tests/language/null_aware/invocation_runtime_test.dart
+++ b/tests/language/null_aware/invocation_runtime_test.dart
@@ -32,7 +32,11 @@
   Expect.equals(1, c?.f(() => 1));
   // C?.m(...) is equivalent to C.m(...).
   Expect.equals(1, C?.staticF(() => 1));
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.equals(1, h.C?.staticF(() => 1));
+  //                  ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
   // The static type of o?.m(...) is the same as the static type of
   // o.m(...).
@@ -46,10 +50,14 @@
   }
   {
     int? i = C?.staticG(() => 1);
+    //        ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
   {
     int? i = h.C?.staticG(() => 1);
+    //          ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
     Expect.equals(1, i);
   }
 }
diff --git a/tests/language/null_aware/invocation_test.dart b/tests/language/null_aware/invocation_test.dart
index b1f38e6..1eaf015 100644
--- a/tests/language/null_aware/invocation_test.dart
+++ b/tests/language/null_aware/invocation_test.dart
@@ -35,7 +35,11 @@
 
   // C?.m(...) is equivalent to C.m(...).
   Expect.equals(1, C?.staticF(() => 1));
+  //                ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   Expect.equals(1, h.C?.staticF(() => 1));
+  //                  ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
 
   // The static type of o?.m(...) is the same as the static type of
   // o.m(...).
@@ -51,15 +55,23 @@
   //            ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'String?'.
   { int? i = C?.staticG(() => 1); Expect.equals(1, i); }
+  //          ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   { int? i = h.C?.staticG(() => 1); Expect.equals(1, i); }
+  //            ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   { String? s = C?.staticG(() => null); Expect.equals(null, s); }
   //            ^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  //             ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //               ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'String?'.
   { String? s = h.C?.staticG(() => null); Expect.equals(null, s); }
   //            ^^^^^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
+  //               ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //                 ^
   // [cfe] A value of type 'int?' can't be assigned to a variable of type 'String?'.
 
@@ -84,10 +96,14 @@
 
   // Nor can it be used to access the toString method on the class Type.
   Expect.throwsNoSuchMethodError(() => C?.toString());
+  //                                    ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //                                      ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
   // [cfe] Method not found: 'C.toString'.
   Expect.throwsNoSuchMethodError(() => h.C?.toString());
+  //                                      ^^
+  // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
   //                                        ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
   // [cfe] Method not found: 'C.toString'.
diff --git a/tools/VERSION b/tools/VERSION
index 2690193..d5db85d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 151
+PRERELEASE 152
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 93003aa..4d758ec 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -137,8 +137,6 @@
     tar -czf linux-ia32.tar.gz \
       --exclude .git \
       --exclude .gitignore \
-      --exclude pkg/analysis_server/language_model \
-      --exclude out/ReleaseIA32/dart-sdk/bin/model \
       --exclude pkg/front_end/testcases \
       -- \
       out/ReleaseIA32/dart2js_platform.dill \
@@ -280,8 +278,6 @@
     tar -czf linux-x64.tar.gz \
       --exclude .git \
       --exclude .gitignore \
-      --exclude pkg/analysis_server/language_model \
-      --exclude out/ReleaseX64/dart-sdk/bin/model \
       --exclude pkg/front_end/testcases \
       -- \
       out/ReleaseX64/dart2js_platform.dill \
