diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index d95fe07..5b08de7 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -95,7 +95,7 @@
       "name": "analyzer_utilities",
       "rootUri": "../pkg/analyzer_utilities",
       "packageUri": "lib/",
-      "languageVersion": "2.1"
+      "languageVersion": "2.12"
     },
     {
       "name": "args",
diff --git a/DEPS b/DEPS
index 9f863d0..2e725ab 100644
--- a/DEPS
+++ b/DEPS
@@ -159,7 +159,7 @@
   "test_reflective_loader_rev": "b76ae201ab9c6f3b90643958965e7cc215a38e9b",
   "test_rev": "e37a93bbeae23b215972d1659ac865d71287ff6a",
   "typed_data_tag": "f94fc57b8e8c0e4fe4ff6cfd8290b94af52d3719",
-  "usage_tag": "16fbfd90c58f16e016a295a880bc722d2547d2c9",
+  "usage_rev": "6c64d9e7b6b3758d06d030efcb5afe20bfc04dde",
   "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
   "watcher_rev": "1fb0a84acd8d195103f10aba03ba6bd6fdb424e5",
   "webdriver_rev": "5a8d6805d9cf8a3cbb4fcd64849b538b7491e50e",
@@ -444,7 +444,7 @@
   Var("dart_root") + "/third_party/pkg/typed_data":
       Var("dart_git") + "typed_data.git" + "@" + Var("typed_data_tag"),
   Var("dart_root") + "/third_party/pkg/usage":
-      Var("dart_git") + "usage.git" + "@" + Var("usage_tag"),
+      Var("dart_git") + "usage.git" + "@" + Var("usage_rev"),
   Var("dart_root") + "/third_party/pkg/vector_math":
       Var("dart_git") + "external/github.com/google/vector_math.dart.git" +
       "@" + Var("vector_math_rev"),
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index 3efab8b..a0a5fe9 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -6,7 +6,6 @@
 /// entities.
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analyzer/dart/element/element.dart' as engine;
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:path/path.dart' as pathos;
 
 /// Return a protocol [Element] corresponding to the given [engine.Element].
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 9c33f83..8f1ec94 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -15,7 +15,6 @@
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:meta/meta.dart';
 
 /// The cache that can be reuse for across multiple completion request.
diff --git a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
index d83aa7c..dd01e3f 100644
--- a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/generated/source.dart';
 
 /// A computer for [CompilationUnit] closing labels.
 class DartUnitClosingLabelsComputer {
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index 9bf7c03..725ea9a 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 
 /// A computer for [CompilationUnit] folding.
diff --git a/pkg/analysis_server/lib/src/computer/computer_signature.dart b/pkg/analysis_server/lib/src/computer/computer_signature.dart
index 8da528f..c1e5764 100644
--- a/pkg/analysis_server/lib/src/computer/computer_signature.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_signature.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.
 
-import 'package:analysis_server/protocol/protocol_generated.dart'
-    show AnalysisGetSignatureResult;
 import 'package:analysis_server/src/computer/computer_hover.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/computer/new_notifications.dart b/pkg/analysis_server/lib/src/computer/new_notifications.dart
index e44abed..a30965d 100644
--- a/pkg/analysis_server/lib/src/computer/new_notifications.dart
+++ b/pkg/analysis_server/lib/src/computer/new_notifications.dart
@@ -2,7 +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.
 
-import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/analysis_server.dart' show AnalysisServer;
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 0f60e67..6fdd12d 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -16,7 +16,6 @@
 import 'package:analyzer/src/context/context_root.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 9d90b64..8f0c867 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -16,7 +16,6 @@
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/src/generated/engine.dart' as engine;
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
index 2e75ddd..db74f5f 100644
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ b/pkg/analysis_server/lib/src/domain_execution.dart
@@ -5,9 +5,7 @@
 import 'dart:collection';
 import 'dart:core';
 
-import 'package:analysis_server/protocol/protocol.dart';
 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/protocol_server.dart';
 import 'package:analyzer/file_system/file_system.dart';
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index 12a49cd..faad3f9 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 
 class RuntimeCompletionComputer {
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 30a2a3dd..6b15978 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -40,7 +40,6 @@
 import 'package:analyzer/error/error.dart' as engine;
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/src/dart/analysis/results.dart' as engine;
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 38ed011..7ec69da 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -8,7 +8,6 @@
 import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analysis_server_abstract.dart';
 import 'package:analysis_server/src/collections.dart';
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 5ab1bfa..0366e79 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -8,8 +8,6 @@
 import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart'
     as lsp;
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart' as lsp;
-import 'package:analysis_server/lsp_protocol/protocol_generated.dart'
-    show ResponseError;
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart' as lsp;
@@ -30,7 +28,6 @@
 import 'package:analyzer/error/error.dart' as server;
 import 'package:analyzer/source/line_info.dart' as server;
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/source.dart' as server;
 import 'package:analyzer/src/services/available_declarations.dart';
 import 'package:analyzer/src/services/available_declarations.dart' as dec;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
diff --git a/pkg/analysis_server/lib/src/lsp/notification_manager.dart b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
index 068b5ef..7752a79 100644
--- a/pkg/analysis_server/lib/src/lsp/notification_manager.dart
+++ b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
@@ -10,7 +10,6 @@
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analyzer_plugin/protocol/protocol.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:path/path.dart';
 
 class LspNotificationManager extends AbstractNotificationManager {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index b27b353..373bcee 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -42,7 +42,6 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_ranking_internal.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_ranking_internal.dart
index 5fa273e..0c53e90 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_ranking_internal.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_ranking_internal.dart
@@ -8,7 +8,6 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
 
 /// Fuzzy matching between static analysis and model-predicted lexemes
 /// that considers pairs like "main" and "main()" to be equal.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 127d348..0cb3b8b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -9,8 +9,6 @@
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/protocol_server.dart'
     hide Element, ElementKind;
-import 'package:analysis_server/src/protocol_server.dart'
-    show CompletionSuggestion;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index 2984122..2ff7dae 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/error.dart' as engine;
 import 'package:analyzer/src/dart/ast/utilities.dart';
-import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/java_core.dart';
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index 66bd219..93409b4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -12,7 +12,6 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
index f60d19e..c435c38 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
@@ -10,7 +10,6 @@
 import 'package:analysis_server/src/utilities/yaml_node_locator.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/analysis_options/error/option_codes.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/manifest/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/manifest/fix_generator.dart
index d073108..ebc7431 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/manifest/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/manifest/fix_generator.dart
@@ -8,7 +8,6 @@
 import 'package:analysis_server/src/utilities/strings.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/manifest/manifest_warning_code.dart';
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
index 7e66f79..d82b128 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/utilities/yaml_node_locator.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
diff --git a/pkg/analysis_server/lib/src/services/flutter/property.dart b/pkg/analysis_server/lib/src/services/flutter/property.dart
index ba6509a..25f01ab 100644
--- a/pkg/analysis_server/lib/src/services/flutter/property.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/property.dart
@@ -2,7 +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.
 
-import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/services/flutter/class_description.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
diff --git a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
index 7e66c3c..e24d8d5 100644
--- a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
@@ -2,7 +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.
 
-import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/services/flutter/class_description.dart';
 import 'package:analysis_server/src/services/flutter/property.dart';
diff --git a/pkg/analysis_server/test/analysis/get_signature_test.dart b/pkg/analysis_server/test/analysis/get_signature_test.dart
index da09214..3eb51ae 100644
--- a/pkg/analysis_server/test/analysis/get_signature_test.dart
+++ b/pkg/analysis_server/test/analysis/get_signature_test.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.
 
-import 'package:analysis_server/protocol/protocol.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index 892e2af..09a78a5 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -4,9 +4,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/linter/linter_test.dart b/pkg/analysis_server/test/services/linter/linter_test.dart
index 1cc5461..ec60e13 100644
--- a/pkg/analysis_server/test/services/linter/linter_test.dart
+++ b/pkg/analysis_server/test/services/linter/linter_test.dart
@@ -5,7 +5,6 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/options_rule_validator.dart';
 import 'package:linter/src/rules.dart';
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
index 3fac860..095ebcb 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
@@ -4,9 +4,7 @@
 
 import 'dart:convert';
 
-import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
index 156c4b4..7ed929c 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
@@ -2,7 +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.
 
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
index 4419e5d..4d1d0a8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
@@ -10,7 +10,6 @@
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
-import 'package:yaml/src/yaml_node.dart';
 import 'package:yaml/yaml.dart';
 
 /// A base class providing utility methods for tests of fixes associated with
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
index 2212ec0..9a8fdc2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/variable_scope.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:matcher/matcher.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
index 4a70221..e26e0061 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
@@ -10,7 +10,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/error/hint_codes.dart';
-import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 import '../fix_processor.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
index 3420914..c0f59db 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
-import 'package:matcher/matcher.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
index c36ea63..27d339c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
@@ -15,7 +15,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
-import 'package:matcher/matcher.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
index 38c113a..9e5a66a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../../services/refactoring/abstract_rename.dart';
 import 'fix_processor.dart';
 
 void main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
index 4eea061..6fc913e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
-import 'package:yaml/src/yaml_node.dart';
 import 'package:yaml/yaml.dart';
 
 /// A base class providing utility methods for tests of fixes associated with
diff --git a/pkg/analysis_server/test/utils/test_support.dart b/pkg/analysis_server/test/utils/test_support.dart
index 2d176d5..811d8ce 100644
--- a/pkg/analysis_server/test/utils/test_support.dart
+++ b/pkg/analysis_server/test/utils/test_support.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index 60fda8d..869d702 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.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.
 
-import 'dart:io';
-
 import 'package:analysis_server/src/services/correction/sort_members.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
diff --git a/pkg/analyzer_utilities/analysis_options.yaml b/pkg/analyzer_utilities/analysis_options.yaml
index 7b2fbe6..f848bc6 100644
--- a/pkg/analyzer_utilities/analysis_options.yaml
+++ b/pkg/analyzer_utilities/analysis_options.yaml
@@ -1,3 +1,5 @@
+include: package:pedantic/analysis_options.1.9.0.yaml
+
 analyzer:
   strong-mode:
     implicit-casts: false
diff --git a/pkg/analyzer_utilities/lib/html.dart b/pkg/analyzer_utilities/lib/html.dart
index 1cbce5f..859740f 100644
--- a/pkg/analyzer_utilities/lib/html.dart
+++ b/pkg/analyzer_utilities/lib/html.dart
@@ -2,23 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/**
- * Tools for manipulating HTML during code generation of analyzer and analysis
- * server.
- */
+/// Tools for manipulating HTML during code generation of analyzer and analysis
+/// server.
 import 'package:html/dom.dart' as dom;
 
-/**
- * Make a deep copy of the given HTML nodes.
- */
+/// Make a deep copy of the given HTML nodes.
 List<dom.Node> cloneHtmlNodes(List<dom.Node> nodes) =>
     nodes.map((dom.Node node) => node.clone(true)).toList();
 
-/**
- * Return true if the given iterable contains only whitespace text nodes.
- */
+/// Return true if the given iterable contains only whitespace text nodes.
 bool containsOnlyWhitespace(Iterable<dom.Node> nodes) {
-  for (dom.Node node in nodes) {
+  for (var node in nodes) {
     if (!isWhitespaceNode(node)) {
       return false;
     }
@@ -26,11 +20,9 @@
   return true;
 }
 
-/**
- * Get the text contents of the element, ignoring all markup.
- */
+/// Get the text contents of the element, ignoring all markup.
 String innerText(dom.Element parent) {
-  StringBuffer buffer = new StringBuffer();
+  var buffer = StringBuffer();
   void recurse(dom.Element parent) {
     for (dom.Node child in parent.nodes) {
       if (child is dom.Text) {
@@ -45,10 +37,8 @@
   return buffer.toString();
 }
 
-/**
- * Return true if the given node is a text node containing only whitespace, or
- * a comment.
- */
+/// Return true if the given node is a text node containing only whitespace, or
+/// a comment.
 bool isWhitespaceNode(dom.Node node) {
   if (node is dom.Element) {
     return false;
@@ -59,48 +49,38 @@
   return true;
 }
 
-/**
- * Create an HTML element with the given name, attributes, and child nodes.
- */
+/// Create an HTML element with the given name, attributes, and child nodes.
 dom.Element makeElement(
     String name, Map<dynamic, String> attributes, List<dom.Node> children) {
-  dom.Element result = new dom.Element.tag(name);
+  var result = dom.Element.tag(name);
   result.attributes.addAll(attributes);
-  for (dom.Node child in children) {
+  for (var child in children) {
     result.append(child);
   }
   return result;
 }
 
-/**
- * Mixin class for generating HTML.
- */
+/// Mixin class for generating HTML.
 mixin HtmlGenerator {
-  List<dom.Node> _html;
+  List<dom.Node> _html = [];
 
-  /**
-   * Add the given [node] to the HTML output.
-   */
+  /// Add the given [node] to the HTML output.
   void add(dom.Node node) {
     _html.add(node);
   }
 
-  /**
-   * Add the given [nodes] to the HTML output.
-   */
+  /// Add the given [nodes] to the HTML output.
   void addAll(Iterable<dom.Node> nodes) {
-    for (dom.Node node in nodes) {
+    for (var node in nodes) {
       add(node);
     }
   }
 
-  /**
-   * Execute [callback], collecting any code that is output using [write],
-   * [writeln], [add], [addAll] or [element], and return the result as a list
-   * of HTML nodes.
-   */
-  List<dom.Node> collectHtml(void callback()) {
-    List<dom.Node> oldHtml = _html;
+  /// Execute [callback], collecting any code that is output using [write],
+  /// [writeln], [add], [addAll] or [element], and return the result as a list
+  /// of HTML nodes.
+  List<dom.Node> collectHtml(void Function()? callback) {
+    var oldHtml = _html;
     try {
       _html = <dom.Node>[];
       if (callback != null) {
@@ -112,25 +92,19 @@
     }
   }
 
-  /**
-   * Execute [callback], wrapping its output in an element with the given
-   * [name] and [attributes].
-   */
+  /// Execute [callback], wrapping its output in an element with the given
+  /// [name] and [attributes].
   void element(String name, Map<dynamic, String> attributes,
-      [void callback()]) {
+      [void Function()? callback]) {
     add(makeElement(name, attributes, collectHtml(callback)));
   }
 
-  /**
-   * Output text without ending the current line.
-   */
+  /// Output text without ending the current line.
   void write(String text) {
-    _html.add(new dom.Text(text));
+    _html.add(dom.Text(text));
   }
 
-  /**
-   * Output text, ending the current line.
-   */
+  /// Output text, ending the current line.
   void writeln([Object obj = '']) {
     write('$obj\n');
   }
diff --git a/pkg/analyzer_utilities/lib/text_formatter.dart b/pkg/analyzer_utilities/lib/text_formatter.dart
index a35920b..79c92d2 100644
--- a/pkg/analyzer_utilities/lib/text_formatter.dart
+++ b/pkg/analyzer_utilities/lib/text_formatter.dart
@@ -2,80 +2,57 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/**
- * Code for converting HTML into text, for use during code generation of
- * analyzer and analysis server.
- */
-
+/// Code for converting HTML into text, for use during code generation of
+/// analyzer and analysis server.
 import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
-final RegExp whitespace = new RegExp(r'\s');
+final RegExp whitespace = RegExp(r'\s');
 
-/**
- * Convert the HTML in [desc] into text, word wrapping at width [width].
- *
- * If [javadocStyle] is true, then the output is compatible with Javadoc,
- * which understands certain HTML constructs.
- */
+/// Convert the HTML in [desc] into text, word wrapping at width [width].
+///
+/// If [javadocStyle] is true, then the output is compatible with Javadoc,
+/// which understands certain HTML constructs.
 String nodesToText(List<dom.Node> desc, int width, bool javadocStyle,
-    {bool removeTrailingNewLine: false}) {
-  _TextFormatter formatter = new _TextFormatter(width, javadocStyle);
+    {bool removeTrailingNewLine = false}) {
+  var formatter = _TextFormatter(width, javadocStyle);
   return formatter.collectCode(() {
     formatter.addAll(desc);
     formatter.lineBreak(false);
   }, removeTrailingNewLine: removeTrailingNewLine);
 }
 
-/**
- * Engine that transforms HTML to text.  The input HTML is processed one
- * character at a time, gathering characters into words and words into lines.
- */
+/// Engine that transforms HTML to text.  The input HTML is processed one
+/// character at a time, gathering characters into words and words into lines.
 class _TextFormatter extends CodeGenerator {
-  /**
-   * Word-wrapping width.
-   */
+  /// Word-wrapping width.
   final int width;
 
-  /**
-   * The word currently being gathered.
-   */
+  /// The word currently being gathered.
   String word = '';
 
-  /**
-   * The line currently being gathered.
-   */
+  /// The line currently being gathered.
   String line = '';
 
-  /**
-   * True if a blank line should be inserted before the next word.
-   */
+  /// True if a blank line should be inserted before the next word.
   bool verticalSpaceNeeded = false;
 
-  /**
-   * True if no text has been output yet.  This suppresses blank lines.
-   */
+  /// True if no text has been output yet.  This suppresses blank lines.
   bool atStart = true;
 
-  /**
-   * True if we are processing a <pre> element, thus whitespace should be
-   * preserved.
-   */
+  /// True if we are processing a <pre> element, thus whitespace should be
+  /// preserved.
   bool preserveSpaces = false;
 
-  /**
-   * True if the output should be Javadoc compatible.
-   */
+  /// True if the output should be Javadoc compatible.
   final bool javadocStyle;
 
   _TextFormatter(this.width, this.javadocStyle);
 
-  /**
-   * Process an HTML node.
-   */
+  /// Process an HTML node.
   void add(dom.Node node) {
     if (node is dom.Text) {
-      for (String char in node.text.split('')) {
+      for (var char in node.text.split('')) {
         if (preserveSpaces) {
           wordBreak();
           write(escape(char));
@@ -141,7 +118,7 @@
           if (javadocStyle) {
             writeln('<pre>');
           }
-          bool oldPreserveSpaces = preserveSpaces;
+          var oldPreserveSpaces = preserveSpaces;
           try {
             preserveSpaces = true;
             addAll(node.nodes);
@@ -166,25 +143,21 @@
         case 'head':
           break;
         default:
-          throw new Exception('Unexpected HTML element: ${node.localName}');
+          throw Exception('Unexpected HTML element: ${node.localName}');
       }
     } else {
-      throw new Exception('Unexpected HTML: $node');
+      throw Exception('Unexpected HTML: $node');
     }
   }
 
-  /**
-   * Process a list of HTML nodes.
-   */
+  /// Process a list of HTML nodes.
   void addAll(List<dom.Node> nodes) {
-    for (dom.Node node in nodes) {
+    for (var node in nodes) {
       add(node);
     }
   }
 
-  /**
-   * Escape the given character for HTML.
-   */
+  /// Escape the given character for HTML.
   String escape(String char) {
     if (javadocStyle) {
       switch (char) {
@@ -199,9 +172,7 @@
     return char;
   }
 
-  /**
-   * Terminate the current word and/or line, if either is in progress.
-   */
+  /// Terminate the current word and/or line, if either is in progress.
   void lineBreak(bool gap) {
     wordBreak();
     if (line.isNotEmpty) {
@@ -213,9 +184,7 @@
     }
   }
 
-  /**
-   * Insert vertical space if necessary.
-   */
+  /// Insert vertical space if necessary.
   void resolveVerticalSpace() {
     if (verticalSpaceNeeded) {
       writeln();
@@ -223,9 +192,7 @@
     }
   }
 
-  /**
-   * Terminate the current word, if a word is in progress.
-   */
+  /// Terminate the current word, if a word is in progress.
   void wordBreak() {
     if (word.isNotEmpty) {
       atStart = false;
diff --git a/pkg/analyzer_utilities/lib/tools.dart b/pkg/analyzer_utilities/lib/tools.dart
index c26e5a5..3ea8a6b 100644
--- a/pkg/analyzer_utilities/lib/tools.dart
+++ b/pkg/analyzer_utilities/lib/tools.dart
@@ -2,9 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/**
- * Tools for generating code in analyzer and analysis server.
- */
+/// Tools for generating code in analyzer and analysis server.
 import 'dart:async';
 import 'dart:io';
 
@@ -13,16 +11,14 @@
 import 'package:html/dom.dart' as dom;
 import 'package:path/path.dart';
 
-final RegExp trailingSpacesInLineRegExp = new RegExp(r' +$', multiLine: true);
-final RegExp trailingWhitespaceRegExp = new RegExp(r'[\n ]+$');
+final RegExp trailingSpacesInLineRegExp = RegExp(r' +$', multiLine: true);
+final RegExp trailingWhitespaceRegExp = RegExp(r'[\n ]+$');
 
-/**
- * Join the given strings using camelCase.  If [doCapitalize] is true, the first
- * part will be capitalized as well.
- */
-String camelJoin(List<String> parts, {bool doCapitalize: false}) {
-  List<String> upcasedParts = <String>[];
-  for (int i = 0; i < parts.length; i++) {
+/// Join the given strings using camelCase.  If [doCapitalize] is true, the first
+/// part will be capitalized as well.
+String camelJoin(List<String> parts, {bool doCapitalize = false}) {
+  var upcasedParts = <String>[];
+  for (var i = 0; i < parts.length; i++) {
     if (i == 0 && !doCapitalize) {
       upcasedParts.add(parts[i]);
     } else {
@@ -32,51 +28,38 @@
   return upcasedParts.join();
 }
 
-/**
- * Capitalize and return the passed String.
- */
+/// Capitalize and return the passed String.
 String capitalize(String string) {
   return string[0].toUpperCase() + string.substring(1);
 }
 
-/**
- * Type of functions used to compute the contents of a set of generated files.
- * [pkgPath] is the path to the current package.
- */
-typedef Map<String, FileContentsComputer> DirectoryContentsComputer(
+/// Type of functions used to compute the contents of a set of generated files.
+/// [pkgPath] is the path to the current package.
+typedef DirectoryContentsComputer = Map<String, FileContentsComputer> Function(
     String pkgPath);
 
-/**
- * Type of functions used to compute the contents of a generated file.
- * [pkgPath] is the path to the current package.
- */
-typedef Future<String> FileContentsComputer(String pkgPath);
+/// Type of functions used to compute the contents of a generated file.
+/// [pkgPath] is the path to the current package.
+typedef FileContentsComputer = Future<String> Function(String pkgPath);
 
-/**
- * Mixin class for generating code.
- */
+/// Mixin class for generating code.
 class CodeGenerator {
-  _CodeGeneratorState _state;
+  _CodeGeneratorState _state = _CodeGeneratorState();
 
-  /**
-   * Settings that specialize code generation behavior for a given
-   * programming language.
-   */
-  CodeGeneratorSettings codeGeneratorSettings = new CodeGeneratorSettings();
+  /// Settings that specialize code generation behavior for a given
+  /// programming language.
+  CodeGeneratorSettings codeGeneratorSettings = CodeGeneratorSettings();
 
-  /**
-   * Measure the width of the current indentation level.
-   */
+  /// Measure the width of the current indentation level.
   int get indentWidth => _state.nextIndent.length;
 
-  /**
-   * Execute [callback], collecting any code that is output using [write]
-   * or [writeln], and return the result as a string.
-   */
-  String collectCode(void callback(), {bool removeTrailingNewLine: false}) {
-    _CodeGeneratorState oldState = _state;
+  /// Execute [callback], collecting any code that is output using [write]
+  /// or [writeln], and return the result as a string.
+  String collectCode(void Function() callback,
+      {bool removeTrailingNewLine = false}) {
+    var oldState = _state;
     try {
-      _state = new _CodeGeneratorState();
+      _state = _CodeGeneratorState();
       callback();
       var text =
           _state.buffer.toString().replaceAll(trailingSpacesInLineRegExp, '');
@@ -90,49 +73,48 @@
     }
   }
 
-  /**
-   * Generate a doc comment based on the HTML in [docs].
-   *
-   * When generating java code, the output is compatible with Javadoc, which
-   * understands certain HTML constructs.
-   */
-  void docComment(List<dom.Node> docs, {bool removeTrailingNewLine: false}) {
+  /// Generate a doc comment based on the HTML in [docs].
+  ///
+  /// When generating java code, the output is compatible with Javadoc, which
+  /// understands certain HTML constructs.
+  void docComment(List<dom.Node> docs, {bool removeTrailingNewLine = false}) {
     if (containsOnlyWhitespace(docs)) return;
-    if (codeGeneratorSettings.docCommentStartMarker != null)
-      writeln(codeGeneratorSettings.docCommentStartMarker);
-    int width = codeGeneratorSettings.commentLineLength;
-    bool javadocStyle = codeGeneratorSettings.languageName == 'java';
+
+    var startMarker = codeGeneratorSettings.docCommentStartMarker;
+    if (startMarker != null) {
+      writeln(startMarker);
+    }
+
+    var width = codeGeneratorSettings.commentLineLength;
+    var javadocStyle = codeGeneratorSettings.languageName == 'java';
     indentBy(codeGeneratorSettings.docCommentLineLeader, () {
       write(nodesToText(docs, width - _state.indent.length, javadocStyle,
           removeTrailingNewLine: removeTrailingNewLine));
     });
-    if (codeGeneratorSettings.docCommentEndMarker != null)
-      writeln(codeGeneratorSettings.docCommentEndMarker);
+
+    var endMarker = codeGeneratorSettings.docCommentEndMarker;
+    if (endMarker != null) {
+      writeln(endMarker);
+    }
   }
 
-  /**
-   * Execute [callback], indenting any code it outputs.
-   */
-  void indent(void callback()) {
+  /// Execute [callback], indenting any code it outputs.
+  void indent(void Function() callback) {
     indentSpecial(
         codeGeneratorSettings.indent, codeGeneratorSettings.indent, callback);
   }
 
-  /**
-   * Execute [callback], using [additionalIndent] to indent any code it outputs.
-   */
-  void indentBy(String additionalIndent, void callback()) =>
+  /// Execute [callback], using [additionalIndent] to indent any code it outputs.
+  void indentBy(String additionalIndent, void Function() callback) =>
       indentSpecial(additionalIndent, additionalIndent, callback);
 
-  /**
-   * Execute [callback], using [additionalIndent] to indent any code it outputs.
-   * The first line of output is indented by [firstAdditionalIndent] instead of
-   * [additionalIndent].
-   */
-  void indentSpecial(
-      String firstAdditionalIndent, String additionalIndent, void callback()) {
-    String oldNextIndent = _state.nextIndent;
-    String oldIndent = _state.indent;
+  /// Execute [callback], using [additionalIndent] to indent any code it outputs.
+  /// The first line of output is indented by [firstAdditionalIndent] instead of
+  /// [additionalIndent].
+  void indentSpecial(String firstAdditionalIndent, String additionalIndent,
+      void Function() callback) {
+    var oldNextIndent = _state.nextIndent;
+    var oldIndent = _state.indent;
     try {
       _state.nextIndent += firstAdditionalIndent;
       _state.indent += additionalIndent;
@@ -148,13 +130,13 @@
       return;
     }
     write(codeGeneratorSettings.lineCommentLineLeader);
-    int width = codeGeneratorSettings.commentLineLength;
+    var width = codeGeneratorSettings.commentLineLength;
     indentBy(codeGeneratorSettings.lineCommentLineLeader, () {
       write(nodesToText(docs, width - _state.indent.length, false));
     });
   }
 
-  void outputHeader({bool javaStyle: false, String year = null}) {
+  void outputHeader({bool javaStyle = false, String? year}) {
     String header;
     if (codeGeneratorSettings.languageName == 'java') {
       header = '''
@@ -190,157 +172,129 @@
     writeln(header.trim());
   }
 
-  /**
-   * Output text without ending the current line.
-   */
+  /// Output text without ending the current line.
   void write(Object obj) {
     _state.write(obj.toString());
   }
 
-  /**
-   * Output text, ending the current line.
-   */
+  /// Output text, ending the current line.
   void writeln([Object obj = '']) {
     _state.write('$obj\n');
   }
 }
 
-/**
- * Controls several settings of [CodeGenerator].
- *
- * The default settings are valid for generating Java and Dart code.
- */
+/// Controls several settings of [CodeGenerator].
+///
+/// The default settings are valid for generating Java and Dart code.
 class CodeGeneratorSettings {
-  /**
-   * Name of the language being generated. Lowercase.
-   */
+  /// Name of the language being generated. Lowercase.
   String languageName;
 
-  /**
-   * Marker used in line comments.
-   */
+  /// Marker used in line comments.
   String lineCommentLineLeader;
 
-  /**
-   * Start marker for doc comments.
-   */
-  String docCommentStartMarker;
+  /// Start marker for doc comments.
+  String? docCommentStartMarker;
 
-  /**
-   * Line leader for body lines in doc comments.
-   */
+  /// Line leader for body lines in doc comments.
   String docCommentLineLeader;
 
-  /**
-   * End marker for doc comments.
-   */
-  String docCommentEndMarker;
+  /// End marker for doc comments.
+  String? docCommentEndMarker;
 
-  /**
-   * Line length for doc comment lines.
-   */
+  /// Line length for doc comment lines.
   int commentLineLength;
 
-  /**
-   * String used for indenting code.
-   */
+  /// String used for indenting code.
   String indent;
 
   CodeGeneratorSettings(
-      {this.languageName: 'java',
-      this.lineCommentLineLeader: '// ',
-      this.docCommentStartMarker: '/**',
-      this.docCommentLineLeader: ' * ',
-      this.docCommentEndMarker: ' */',
-      this.commentLineLength: 99,
-      this.indent: '  '});
+      {this.languageName = 'java',
+      this.lineCommentLineLeader = '// ',
+      this.docCommentStartMarker = '/**',
+      this.docCommentLineLeader = ' * ',
+      this.docCommentEndMarker = ' */',
+      this.commentLineLength = 99,
+      this.indent = '  '});
 }
 
-/**
- * A utility class for invoking dartfmt.
- */
+/// A utility class for invoking dartfmt.
 class DartFormat {
   static String get _dartfmtPath {
-    String binName = Platform.isWindows ? 'dartfmt.bat' : 'dartfmt';
+    var binName = Platform.isWindows ? 'dartfmt.bat' : 'dartfmt';
     for (var loc in [binName, join('dart-sdk', 'bin', binName)]) {
       var candidatePath = join(dirname(Platform.resolvedExecutable), loc);
-      if (new File(candidatePath).existsSync()) {
+      if (File(candidatePath).existsSync()) {
         return candidatePath;
       }
     }
-    throw new StateError('Could not find dartfmt executable');
+    throw StateError('Could not find dartfmt executable');
   }
 
   static void formatFile(File file) {
-    ProcessResult result = Process.runSync(_dartfmtPath, ['-w', file.path]);
-    if (result.exitCode != 0) throw result.stderr;
+    var result = Process.runSync(_dartfmtPath, ['-w', file.path]);
+    _throwIfExitCode(result);
   }
 
   static String formatText(String text) {
-    File file = new File(join(Directory.systemTemp.path, 'gen.dart'));
+    var file = File(join(Directory.systemTemp.path, 'gen.dart'));
     file.writeAsStringSync(text);
-    ProcessResult result = Process.runSync(_dartfmtPath, ['-w', file.path]);
-    if (result.exitCode != 0) throw result.stderr;
+    var result = Process.runSync(_dartfmtPath, ['-w', file.path]);
+    _throwIfExitCode(result);
     return file.readAsStringSync();
   }
+
+  static void _throwIfExitCode(ProcessResult result) {
+    if (result.exitCode != 0) throw result.stderr as Object;
+  }
 }
 
-/**
- * Abstract base class representing behaviors common to generated files and
- * generated directories.
- */
+/// Abstract base class representing behaviors common to generated files and
+/// generated directories.
 abstract class GeneratedContent {
-  /**
-   * Check whether the [output] has the correct contents, and return true if it
-   * does.  [pkgPath] is the path to the current package.
-   */
+  /// Check whether the [output] has the correct contents, and return true if it
+  /// does.  [pkgPath] is the path to the current package.
   Future<bool> check(String pkgPath);
 
-  /**
-   * Replace the [output] with the correct contents.  [pkgPath] is the path to
-   * the current package.
-   */
+  /// Replace the [output] with the correct contents.  [pkgPath] is the path to
+  /// the current package.
   Future<void> generate(String pkgPath);
 
-  /**
-   * Get a [FileSystemEntity] representing the output file or directory.
-   * [pkgPath] is the path to the current package.
-   */
+  /// Get a [FileSystemEntity] representing the output file or directory.
+  /// [pkgPath] is the path to the current package.
   FileSystemEntity output(String pkgPath);
 
-  /**
-   * Check that all of the [targets] are up to date.  If they are not, print
-   * out a message instructing the user to regenerate them, and exit with a
-   * nonzero error code.
-   *
-   * [pkgPath] is the path to the current package.  [generatorPath] is the path
-   * to a .dart script the user may use to regenerate the targets.
-   *
-   * To avoid mistakes when run on Windows, [generatorPath] always uses
-   * POSIX directory separators.
-   */
+  /// Check that all of the [targets] are up to date.  If they are not, print
+  /// out a message instructing the user to regenerate them, and exit with a
+  /// nonzero error code.
+  ///
+  /// [pkgPath] is the path to the current package.  [generatorPath] is the path
+  /// to a .dart script the user may use to regenerate the targets.
+  ///
+  /// To avoid mistakes when run on Windows, [generatorPath] always uses
+  /// POSIX directory separators.
   static Future<void> checkAll(
       String pkgPath, String generatorPath, Iterable<GeneratedContent> targets,
       {List<String> args = const []}) async {
-    bool generateNeeded = false;
-    for (GeneratedContent target in targets) {
-      bool ok = await target.check(pkgPath);
+    var generateNeeded = false;
+    for (var target in targets) {
+      var ok = await target.check(pkgPath);
       if (!ok) {
-        print("${target.output(pkgPath).absolute}"
+        print('${target.output(pkgPath).absolute}'
             " doesn't have expected contents.");
         generateNeeded = true;
       }
     }
     if (generateNeeded) {
       print('Please regenerate using:');
-      String executable = Platform.executable;
-      String packageRoot = '';
+      var executable = Platform.executable;
+      var packageRoot = '';
       // ignore: deprecated_member_use
       if (Platform.packageRoot != null) {
         // ignore: deprecated_member_use
         packageRoot = ' --package-root=${Platform.packageRoot}';
       }
-      String generateScript = normalize(joinAll(posix.split(generatorPath)));
+      var generateScript = normalize(joinAll(posix.split(generatorPath)));
       print('  $executable$packageRoot $generateScript ${args.join(" ")}');
       exit(1);
     } else {
@@ -348,46 +302,39 @@
     }
   }
 
-  /**
-   * Regenerate all of the [targets].  [pkgPath] is the path to the current
-   * package.
-   */
+  /// Regenerate all of the [targets].  [pkgPath] is the path to the current
+  /// package.
   static Future<void> generateAll(
       String pkgPath, Iterable<GeneratedContent> targets) async {
-    print("Generating...");
-    for (GeneratedContent target in targets) {
+    print('Generating...');
+    for (var target in targets) {
       await target.generate(pkgPath);
     }
   }
 }
 
-/**
- * Class representing a single output directory (either generated code or
- * generated HTML). No other content should exist in the directory.
- */
+/// Class representing a single output directory (either generated code or
+/// generated HTML). No other content should exist in the directory.
 class GeneratedDirectory extends GeneratedContent {
-  /**
-   * The path to the directory that will have the generated content.
-   */
+  /// The path to the directory that will have the generated content.
   final String outputDirPath;
 
-  /**
-   * Callback function that computes the directory contents.
-   */
+  /// Callback function that computes the directory contents.
   final DirectoryContentsComputer directoryContentsComputer;
 
   GeneratedDirectory(this.outputDirPath, this.directoryContentsComputer);
 
   @override
   Future<bool> check(String pkgPath) async {
-    Directory outputDirectory = output(pkgPath);
-    Map<String, FileContentsComputer> map = directoryContentsComputer(pkgPath);
+    var outputDirectory = output(pkgPath);
+    var map = directoryContentsComputer(pkgPath);
     try {
-      for (String file in map.keys) {
-        FileContentsComputer fileContentsComputer = map[file];
-        String expectedContents = await fileContentsComputer(pkgPath);
-        File outputFile = new File(posix.join(outputDirectory.path, file));
-        String actualContents = outputFile.readAsStringSync();
+      for (var entry in map.entries) {
+        var file = entry.key;
+        var fileContentsComputer = entry.value;
+        var expectedContents = await fileContentsComputer(pkgPath);
+        var outputFile = File(posix.join(outputDirectory.path, file));
+        var actualContents = outputFile.readAsStringSync();
         // Normalize Windows line endings to Unix line endings so that the
         // comparison doesn't fail on Windows.
         actualContents = actualContents.replaceAll('\r\n', '\n');
@@ -395,7 +342,7 @@
           return false;
         }
       }
-      int nonHiddenFileCount = 0;
+      var nonHiddenFileCount = 0;
       outputDirectory
           .listSync(recursive: false, followLinks: false)
           .forEach((FileSystemEntity fileSystemEntity) {
@@ -420,7 +367,7 @@
 
   @override
   Future<void> generate(String pkgPath) async {
-    Directory outputDirectory = output(pkgPath);
+    var outputDirectory = output(pkgPath);
     try {
       // delete the contents of the directory (and the directory itself)
       outputDirectory.deleteSync(recursive: true);
@@ -432,36 +379,31 @@
     outputDirectory.createSync(recursive: true);
 
     // generate all of the files in the directory
-    Map<String, FileContentsComputer> map = directoryContentsComputer(pkgPath);
-    for (String file in map.keys) {
-      FileContentsComputer fileContentsComputer = map[file];
-      File outputFile = new File(posix.join(outputDirectory.path, file));
+    var map = directoryContentsComputer(pkgPath);
+    for (var entry in map.entries) {
+      var file = entry.key;
+      var fileContentsComputer = entry.value;
+      var outputFile = File(posix.join(outputDirectory.path, file));
       print('  ${outputFile.path}');
-      String contents = await fileContentsComputer(pkgPath);
+      var contents = await fileContentsComputer(pkgPath);
       outputFile.writeAsStringSync(contents);
     }
   }
 
   @override
   Directory output(String pkgPath) =>
-      new Directory(join(pkgPath, joinAll(posix.split(outputDirPath))));
+      Directory(join(pkgPath, joinAll(posix.split(outputDirPath))));
 }
 
-/**
- * Class representing a single output file (either generated code or generated
- * HTML).
- */
+/// Class representing a single output file (either generated code or generated
+/// HTML).
 class GeneratedFile extends GeneratedContent {
-  /**
-   * The output file to which generated output should be written, relative to
-   * the "tool/spec" directory.  This filename uses the posix path separator
-   * ('/') regardless of the OS.
-   */
+  /// The output file to which generated output should be written, relative to
+  /// the "tool/spec" directory.  This filename uses the posix path separator
+  /// ('/') regardless of the OS.
   final String outputPath;
 
-  /**
-   * Callback function which computes the file.
-   */
+  /// Callback function which computes the file.
   final FileContentsComputer computeContents;
 
   GeneratedFile(this.outputPath, this.computeContents);
@@ -470,13 +412,13 @@
 
   @override
   Future<bool> check(String pkgPath) async {
-    File outputFile = output(pkgPath);
-    String expectedContents = await computeContents(pkgPath);
+    var outputFile = output(pkgPath);
+    var expectedContents = await computeContents(pkgPath);
     if (isDartFile) {
       expectedContents = DartFormat.formatText(expectedContents);
     }
     try {
-      String actualContents = outputFile.readAsStringSync();
+      var actualContents = outputFile.readAsStringSync();
       // Normalize Windows line endings to Unix line endings so that the
       // comparison doesn't fail on Windows.
       actualContents = actualContents.replaceAll('\r\n', '\n');
@@ -491,9 +433,9 @@
 
   @override
   Future<void> generate(String pkgPath) async {
-    File outputFile = output(pkgPath);
+    var outputFile = output(pkgPath);
     print('  ${outputFile.path}');
-    String contents = await computeContents(pkgPath);
+    var contents = await computeContents(pkgPath);
     outputFile.writeAsStringSync(contents);
     if (isDartFile) {
       DartFormat.formatFile(outputFile);
@@ -502,41 +444,33 @@
 
   @override
   File output(String pkgPath) =>
-      new File(join(pkgPath, joinAll(posix.split(outputPath))));
+      File(join(pkgPath, joinAll(posix.split(outputPath))));
 }
 
-/**
- * Mixin class for generating HTML representations of code that are suitable
- * for enclosing inside a <pre> element.
- */
+/// Mixin class for generating HTML representations of code that are suitable
+/// for enclosing inside a <pre> element.
 abstract class HtmlCodeGenerator {
-  _HtmlCodeGeneratorState _state;
+  _HtmlCodeGeneratorState _state = _HtmlCodeGeneratorState();
 
-  /**
-   * Add the given [node] to the HTML output.
-   */
+  /// Add the given [node] to the HTML output.
   void add(dom.Node node) {
     _state.add(node);
   }
 
-  /**
-   * Add the given [nodes] to the HTML output.
-   */
+  /// Add the given [nodes] to the HTML output.
   void addAll(Iterable<dom.Node> nodes) {
-    for (dom.Node node in nodes) {
+    for (var node in nodes) {
       _state.add(node);
     }
   }
 
-  /**
-   * Execute [callback], collecting any code that is output using [write],
-   * [writeln], [add], or [addAll], and return the result as a list of DOM
-   * nodes.
-   */
-  List<dom.Node> collectHtml(void callback()) {
-    _HtmlCodeGeneratorState oldState = _state;
+  /// Execute [callback], collecting any code that is output using [write],
+  /// [writeln], [add], or [addAll], and return the result as a list of DOM
+  /// nodes.
+  List<dom.Node> collectHtml(void Function()? callback) {
+    var oldState = _state;
     try {
-      _state = new _HtmlCodeGeneratorState();
+      _state = _HtmlCodeGeneratorState();
       if (callback != null) {
         callback();
       }
@@ -546,20 +480,16 @@
     }
   }
 
-  /**
-   * Execute [callback], wrapping its output in an element with the given
-   * [name] and [attributes].
-   */
+  /// Execute [callback], wrapping its output in an element with the given
+  /// [name] and [attributes].
   void element(String name, Map<dynamic, String> attributes,
-      [void callback()]) {
+      [void Function()? callback]) {
     add(makeElement(name, attributes, collectHtml(callback)));
   }
 
-  /**
-   * Execute [callback], indenting any code it outputs by two spaces.
-   */
-  void indent(void callback()) {
-    String oldIndent = _state.indent;
+  /// Execute [callback], indenting any code it outputs by two spaces.
+  void indent(void Function() callback) {
+    var oldIndent = _state.indent;
     try {
       _state.indent += '  ';
       callback();
@@ -568,33 +498,27 @@
     }
   }
 
-  /**
-   * Output text without ending the current line.
-   */
+  /// Output text without ending the current line.
   void write(Object obj) {
     _state.write(obj.toString());
   }
 
-  /**
-   * Output text, ending the current line.
-   */
+  /// Output text, ending the current line.
   void writeln([Object obj = '']) {
     _state.write('$obj\n');
   }
 }
 
-/**
- * State used by [CodeGenerator].
- */
+/// State used by [CodeGenerator].
 class _CodeGeneratorState {
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
   String nextIndent = '';
   String indent = '';
   bool indentNeeded = true;
 
   void write(String text) {
-    List<String> lines = text.split('\n');
-    for (int i = 0; i < lines.length; i++) {
+    var lines = text.split('\n');
+    for (var i = 0; i < lines.length; i++) {
       if (i == lines.length - 1 && lines[i].isEmpty) {
         break;
       }
@@ -612,9 +536,7 @@
   }
 }
 
-/**
- * State used by [HtmlCodeGenerator].
- */
+/// State used by [HtmlCodeGenerator].
 class _HtmlCodeGeneratorState {
   List<dom.Node> buffer = <dom.Node>[];
   String indent = '';
@@ -633,15 +555,15 @@
       return;
     }
     if (indentNeeded) {
-      buffer.add(new dom.Text(indent));
+      buffer.add(dom.Text(indent));
     }
-    List<String> lines = text.split('\n');
+    var lines = text.split('\n');
     if (lines.last.isEmpty) {
       lines.removeLast();
-      buffer.add(new dom.Text(lines.join('\n$indent') + '\n'));
+      buffer.add(dom.Text(lines.join('\n$indent') + '\n'));
       indentNeeded = true;
     } else {
-      buffer.add(new dom.Text(lines.join('\n$indent')));
+      buffer.add(dom.Text(lines.join('\n$indent')));
       indentNeeded = false;
     }
   }
diff --git a/pkg/analyzer_utilities/lib/verify_tests.dart b/pkg/analyzer_utilities/lib/verify_tests.dart
index ca6fe74..bfe5f35 100644
--- a/pkg/analyzer_utilities/lib/verify_tests.dart
+++ b/pkg/analyzer_utilities/lib/verify_tests.dart
@@ -18,7 +18,7 @@
   final String testDirPath;
 
   /// Paths to exclude from analysis completely.
-  final List<String> excludedPaths;
+  final List<String>? excludedPaths;
 
   VerifyTests(this.testDirPath, {this.excludedPaths});
 
@@ -66,7 +66,7 @@
   void _buildTestsIn(
       AnalysisSession session, String testDirPath, Folder directory) {
     var testFileNames = <String>[];
-    File testAllFile;
+    File? testAllFile;
     var children = directory.getChildren();
     children
         .sort((first, second) => first.shortName.compareTo(second.shortName));
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 0cb4190..ae898a3 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -2405,9 +2405,11 @@
   void forEachNestedClosure(
       MemberEntity member, void f(FunctionEntity closure));
 
-  /// Returns `true` if [cls] is a mixin application that mixes in methods with
-  /// super calls.
-  bool isSuperMixinApplication(ClassEntity cls);
+  /// Returns `true` if [cls] is a mixin application with its own members.
+  ///
+  /// This occurs when a mixin contains methods with super calls or when
+  /// the mixin application contains concrete forwarding stubs.
+  bool isMixinApplicationWithMembers(ClassEntity cls);
 
   /// The default type of the [typeVariable].
   ///
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 55d7ab6..9793cc5 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -1906,10 +1906,15 @@
     // are calling does not expose this.
     _state.markThisAsExposed();
 
-    MemberEntity member =
-        _elementMap.getSuperMember(_analyzedMember, node.name);
-    assert(member != null, "No member found for super property get: $node");
+    ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
     Selector selector = new Selector.getter(_elementMap.getName(node.name));
+    if (target == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
+      return handleSuperNoSuchMethod(node, selector, null);
+    }
+    MemberEntity member = _elementMap.getMember(target);
+    assert(member != null, "No member found for super property get: $node");
     TypeInformation type = handleStaticInvoke(node, selector, member, null);
     if (member.isGetter) {
       FunctionType functionType =
@@ -1937,11 +1942,16 @@
     _state.markThisAsExposed();
 
     TypeInformation rhsType = visit(node.value);
-    MemberEntity member =
-        _elementMap.getSuperMember(_analyzedMember, node.name, setter: true);
-    assert(member != null, "No member found for super property set: $node");
+    ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
     Selector selector = new Selector.setter(_elementMap.getName(node.name));
     ArgumentsTypes arguments = new ArgumentsTypes([rhsType], null);
+    if (target == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
+      return handleSuperNoSuchMethod(node, selector, arguments);
+    }
+    MemberEntity member = _elementMap.getMember(target);
+    assert(member != null, "No member found for super property set: $node");
     handleStaticInvoke(node, selector, member, arguments);
     return rhsType;
   }
@@ -1952,29 +1962,29 @@
     // are calling does not expose this.
     _state.markThisAsExposed();
 
-    MemberEntity member =
-        _elementMap.getSuperMember(_analyzedMember, node.name);
+    ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
     ArgumentsTypes arguments = analyzeArguments(node.arguments);
     Selector selector = _elementMap.getSelector(node);
-    if (member == null) {
-      // TODO(johnniwinther): This shouldn't be necessary.
+    if (target == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
+      return handleSuperNoSuchMethod(node, selector, arguments);
+    }
+    MemberEntity member = _elementMap.getMember(target);
+    assert(member.isFunction, "Unexpected super invocation target: $member");
+    if (isIncompatibleInvoke(member, arguments)) {
       return handleSuperNoSuchMethod(node, selector, arguments);
     } else {
-      assert(member.isFunction, "Unexpected super invocation target: $member");
-      if (isIncompatibleInvoke(member, arguments)) {
-        return handleSuperNoSuchMethod(node, selector, arguments);
-      } else {
-        TypeInformation type =
-            handleStaticInvoke(node, selector, member, arguments);
-        FunctionType functionType =
-            _elementMap.elementEnvironment.getFunctionType(member);
-        if (functionType.returnType.containsFreeTypeVariables) {
-          // The return type varies with the call site so we narrow the static
-          // return type.
-          type = _types.narrowType(type, _getStaticType(node));
-        }
-        return type;
+      TypeInformation type =
+          handleStaticInvoke(node, selector, member, arguments);
+      FunctionType functionType =
+          _elementMap.elementEnvironment.getFunctionType(member);
+      if (functionType.returnType.containsFreeTypeVariables) {
+        // The return type varies with the call site so we narrow the static
+        // return type.
+        type = _types.narrowType(type, _getStaticType(node));
       }
+      return type;
     }
   }
 
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index cedc8b2..0a7118a 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -167,12 +167,12 @@
   void registerInstanceSet(
       ir.DartType receiverType, ClassRelation relation, ir.Member target);
 
-  void registerSuperInvocation(ir.Name name, int positionalArguments,
+  void registerSuperInvocation(ir.Member target, int positionalArguments,
       List<String> namedArguments, List<ir.DartType> typeArguments);
 
-  void registerSuperGet(ir.Name name);
+  void registerSuperGet(ir.Member target);
 
-  void registerSuperSet(ir.Name name);
+  void registerSuperSet(ir.Member target);
 
   void registerSuperInitializer(
       ir.Constructor source,
@@ -590,19 +590,22 @@
   @override
   void handleSuperMethodInvocation(ir.SuperMethodInvocation node,
       ArgumentTypes argumentTypes, ir.DartType returnType) {
-    registerSuperInvocation(node.name, node.arguments.positional.length,
-        _getNamedArguments(node.arguments), node.arguments.types);
+    registerSuperInvocation(
+        getEffectiveSuperTarget(node.interfaceTarget),
+        node.arguments.positional.length,
+        _getNamedArguments(node.arguments),
+        node.arguments.types);
   }
 
   @override
   void handleSuperPropertyGet(
       ir.SuperPropertyGet node, ir.DartType resultType) {
-    registerSuperGet(node.name);
+    registerSuperGet(getEffectiveSuperTarget(node.interfaceTarget));
   }
 
   @override
   void handleSuperPropertySet(ir.SuperPropertySet node, ir.DartType valueType) {
-    registerSuperSet(node.name);
+    registerSuperSet(getEffectiveSuperTarget(node.interfaceTarget));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index 2dd1fcb..eecf083 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -43,23 +43,23 @@
   }
 
   @override
-  void registerSuperSet(ir.Name name) {
+  void registerSuperSet(ir.Member target) {
     _data._superSets ??= [];
-    _data._superSets.add(name);
+    _data._superSets.add(target);
   }
 
   @override
-  void registerSuperGet(ir.Name name) {
+  void registerSuperGet(ir.Member target) {
     _data._superGets ??= [];
-    _data._superGets.add(name);
+    _data._superGets.add(target);
   }
 
   @override
-  void registerSuperInvocation(ir.Name name, int positionalArguments,
+  void registerSuperInvocation(ir.Member target, int positionalArguments,
       List<String> namedArguments, List<ir.DartType> typeArguments) {
     _data._superInvocations ??= [];
     _data._superInvocations.add(new _SuperInvocation(
-        name,
+        target,
         new _CallStructure(
             positionalArguments, namedArguments, typeArguments)));
   }
@@ -478,8 +478,8 @@
   static const String tag = 'ImpactData';
 
   List<_SuperInitializer> _superInitializers;
-  List<ir.Name> _superSets;
-  List<ir.Name> _superGets;
+  List<ir.Member> _superSets;
+  List<ir.Member> _superGets;
   List<_SuperInvocation> _superInvocations;
   List<_InstanceAccess> _instanceSets;
   List<_DynamicAccess> _dynamicSets;
@@ -529,8 +529,10 @@
     _superInitializers = source.readList(
         () => new _SuperInitializer.fromDataSource(source),
         emptyAsNull: true);
-    _superSets = source.readList(() => source.readName(), emptyAsNull: true);
-    _superGets = source.readList(() => source.readName(), emptyAsNull: true);
+    _superSets =
+        source.readList(() => source.readMemberNode(), emptyAsNull: true);
+    _superGets =
+        source.readList(() => source.readMemberNode(), emptyAsNull: true);
     _superInvocations = source.readList(
         () => new _SuperInvocation.fromDataSource(source),
         emptyAsNull: true);
@@ -632,8 +634,8 @@
     sink.writeList(
         _superInitializers, (_SuperInitializer o) => o.toDataSink(sink),
         allowNull: true);
-    sink.writeList(_superSets, sink.writeName, allowNull: true);
-    sink.writeList(_superGets, sink.writeName, allowNull: true);
+    sink.writeList(_superSets, sink.writeMemberNode, allowNull: true);
+    sink.writeList(_superGets, sink.writeMemberNode, allowNull: true);
     sink.writeList(
         _superInvocations, (_SuperInvocation o) => o.toDataSink(sink),
         allowNull: true);
@@ -722,19 +724,19 @@
       }
     }
     if (_superSets != null) {
-      for (ir.Name data in _superSets) {
+      for (ir.Member data in _superSets) {
         registry.registerSuperSet(data);
       }
     }
     if (_superGets != null) {
-      for (ir.Name data in _superGets) {
+      for (ir.Member data in _superGets) {
         registry.registerSuperGet(data);
       }
     }
     if (_superInvocations != null) {
       for (_SuperInvocation data in _superInvocations) {
         registry.registerSuperInvocation(
-            data.name,
+            data.target,
             data.callStructure.positionalArguments,
             data.callStructure.namedArguments,
             data.callStructure.typeArguments);
@@ -1113,22 +1115,22 @@
 class _SuperInvocation {
   static const String tag = '_SuperInvocation';
 
-  final ir.Name name;
+  final ir.Member target;
   final _CallStructure callStructure;
 
-  _SuperInvocation(this.name, this.callStructure);
+  _SuperInvocation(this.target, this.callStructure);
 
   factory _SuperInvocation.fromDataSource(DataSource source) {
     source.begin(tag);
-    ir.Name name = source.readName();
+    ir.Member member = source.readMemberNode();
     _CallStructure callStructure = new _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _SuperInvocation(name, callStructure);
+    return new _SuperInvocation(member, callStructure);
   }
 
   void toDataSink(DataSink sink) {
     sink.begin(tag);
-    sink.writeName(name);
+    sink.writeMemberNode(target);
     callStructure.toDataSink(sink);
     sink.end(tag);
   }
diff --git a/pkg/compiler/lib/src/ir/util.dart b/pkg/compiler/lib/src/ir/util.dart
index 1db528a..455c612 100644
--- a/pkg/compiler/lib/src/ir/util.dart
+++ b/pkg/compiler/lib/src/ir/util.dart
@@ -268,3 +268,20 @@
   if (importUri == null) return false;
   return _isWebLibrary(importUri);
 }
+
+/// Returns the effective target of a super access of [target].
+///
+/// If [target] is a concrete mixin stub then the stub target is returned
+/// instead of the concrete mixin stub. This is done to avoid unnecessary
+/// indirections in super accesses.
+///
+/// See [ir.ProcedureStubKind.ConcreteMixinStub] for why concrete mixin stubs
+/// are inserted in the first place.
+ir.Member getEffectiveSuperTarget(ir.Member target) {
+  if (target is ir.Procedure) {
+    if (target.stubKind == ir.ProcedureStubKind.ConcreteMixinStub) {
+      return getEffectiveSuperTarget(target.stubTarget);
+    }
+  }
+  return target;
+}
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index fb2ffc6..2cdfb73 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -294,7 +294,7 @@
   /// A soft-deferred class is only fully initialized at first instantiation.
   final bool isSoftDeferred;
 
-  final bool isSuperMixinApplication;
+  final bool isMixinApplicationWithMembers;
 
   // If the class implements a function type, and the type is encoded in the
   // metatada table, then this field contains the index into that field.
@@ -332,7 +332,7 @@
       this.isNative,
       this.isClosureBaseClass,
       this.isSoftDeferred = false,
-      this.isSuperMixinApplication}) {
+      this.isMixinApplicationWithMembers}) {
     assert(onlyForRti != null);
     assert(onlyForConstructor != null);
     assert(isDirectlyInstantiated != null);
@@ -398,7 +398,7 @@
             isDirectlyInstantiated: isDirectlyInstantiated,
             isNative: false,
             isClosureBaseClass: false,
-            isSuperMixinApplication: false);
+            isMixinApplicationWithMembers: false);
 
   @override
   bool get isSimpleMixinApplication => true;
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 99e7544..0cd7059 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -221,7 +221,7 @@
                 "No Class for has been created for superclass "
                 "${superclass} of $c."));
       }
-      if (c.isSimpleMixinApplication || c.isSuperMixinApplication) {
+      if (c.isSimpleMixinApplication || c.isMixinApplicationWithMembers) {
         ClassEntity effectiveMixinClass =
             _elementEnvironment.getEffectiveMixinClass(cls);
         c.setMixinClass(_classes[effectiveMixinClass]);
@@ -725,14 +725,14 @@
 
     // MixinApplications run through the members of their mixin. Here, we are
     // only interested in direct members.
-    bool isSuperMixinApplication = false;
+    bool isMixinApplicationWithMembers = false;
     if (!onlyForConstructorOrRti) {
-      if (_elementEnvironment.isSuperMixinApplication(cls)) {
+      if (_elementEnvironment.isMixinApplicationWithMembers(cls)) {
         List<MemberEntity> members = <MemberEntity>[];
         void add(MemberEntity member) {
           if (member.enclosingClass == cls) {
             members.add(member);
-            isSuperMixinApplication = true;
+            isMixinApplicationWithMembers = true;
           }
         }
 
@@ -813,7 +813,7 @@
     Class result;
     if (_elementEnvironment.isMixinApplication(cls) &&
         !onlyForConstructorOrRti &&
-        !isSuperMixinApplication) {
+        !isMixinApplicationWithMembers) {
       assert(!_nativeData.isNativeClass(cls));
       assert(methods.isEmpty);
       assert(!isClosureBaseClass);
@@ -854,7 +854,7 @@
           isNative: _nativeData.isNativeClass(cls),
           isClosureBaseClass: isClosureBaseClass,
           isSoftDeferred: _isSoftDeferred(cls),
-          isSuperMixinApplication: isSuperMixinApplication);
+          isMixinApplicationWithMembers: isMixinApplicationWithMembers);
     }
     _classes[cls] = result;
     return result;
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index dd7bd3a..88d26a9 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -54,6 +54,16 @@
     to[key] = from[key];
   }
 }
+// Copies the own properties from [from] to [to] if not already present in [to].
+function mixinProperties(from, to) {
+  var keys = Object.keys(from);
+  for (var i = 0; i < keys.length; i++) {
+    var key = keys[i];
+    if (!to.hasOwnProperty(key)) {
+      to[key] = from[key];
+    }
+  }
+}
 
 // Only use direct proto access to construct the prototype chain (instead of
 // copying properties) on platforms where we know it works well (Chrome / d8).
@@ -111,7 +121,7 @@
 
 // Mixes in the properties of [mixin] into [cls].
 function mixin(cls, mixin) {
-  copyProperties(mixin.prototype, cls.prototype);
+  mixinProperties(mixin.prototype, cls.prototype);
   cls.prototype.constructor = cls;
 }
 
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index e0dd7a2..570da8a 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -481,7 +481,9 @@
         source.readLocalMap<Local, JRecordField>(() => source.readMember());
     Set<Local> freeVariables = source.readLocals().toSet();
     source.end(tag);
-    return new JsScopeInfo.internal(
+    if (boxedVariables.isEmpty) boxedVariables = const {};
+    if (freeVariables.isEmpty) freeVariables = const {};
+    return JsScopeInfo.internal(
         localsUsedInTryOrSync, thisLocal, boxedVariables, freeVariables);
   }
 
@@ -671,7 +673,10 @@
     Map<Local, JField> localToFieldMap =
         source.readLocalMap(() => source.readMember());
     source.end(tag);
-    return new KernelClosureClassInfo.internal(
+    if (boxedVariables.isEmpty) boxedVariables = const {};
+    if (freeVariables.isEmpty) freeVariables = const {};
+    if (localToFieldMap.isEmpty) localToFieldMap = const {};
+    return KernelClosureClassInfo.internal(
         localsUsedInTryOrSync,
         thisLocal,
         boxedVariables,
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index b26e902..622ee68 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -74,11 +74,6 @@
   /// Returns the [ClassEntity] corresponding to the class [node].
   ClassEntity getClass(ir.Class node);
 
-  /// Returns the super [MemberEntity] for a super invocation, get or set of
-  /// [name] from the member [context].
-  MemberEntity getSuperMember(MemberEntity context, ir.Name name,
-      {bool setter: false});
-
   /// Returns the `noSuchMethod` [FunctionEntity] call from a
   /// `super.noSuchMethod` invocation within [cls].
   FunctionEntity getSuperNoSuchMethod(ClassEntity cls);
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 4282ec2..ec6d67f 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -807,32 +807,6 @@
   }
 
   @override
-  MemberEntity getSuperMember(MemberEntity context, ir.Name name,
-      {bool setter: false}) {
-    // We can no longer trust the interface target of the super access since it
-    // might be a member that we have cloned.
-    ClassEntity cls = getMemberThisType(context).element;
-    assert(
-        cls != null,
-        failedAt(context,
-            "No enclosing class for super member access in $context."));
-    IndexedClass superclass = getSuperType(cls)?.element;
-    while (superclass != null) {
-      JClassEnv env = classes.getEnv(superclass);
-      MemberEntity superMember =
-          env.lookupMember(this, name.text, setter: setter);
-      if (superMember != null) {
-        if (!superMember.isInstanceMember) return null;
-        if (!superMember.isAbstract) {
-          return superMember;
-        }
-      }
-      superclass = getSuperType(superclass)?.element;
-    }
-    return null;
-  }
-
-  @override
   ConstructorEntity getConstructor(ir.Member node) =>
       getConstructorInternal(node);
 
@@ -1067,10 +1041,10 @@
     return env.isUnnamedMixinApplication;
   }
 
-  bool _isSuperMixinApplication(IndexedClass cls) {
+  bool _isMixinApplicationWithMembers(IndexedClass cls) {
     assert(checkFamily(cls));
     JClassEnv env = classes.getEnv(cls);
-    return env.isSuperMixinApplication;
+    return env.isMixinApplicationWithMembers;
   }
 
   void _forEachSupertype(IndexedClass cls, void f(InterfaceType supertype)) {
@@ -2242,8 +2216,8 @@
   }
 
   @override
-  bool isSuperMixinApplication(ClassEntity cls) {
-    return elementMap._isSuperMixinApplication(cls);
+  bool isMixinApplicationWithMembers(ClassEntity cls) {
+    return elementMap._isMixinApplicationWithMembers(cls);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index aedff40..2e408ee 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -197,9 +197,11 @@
   /// Whether the class is an unnamed mixin application.
   bool get isUnnamedMixinApplication;
 
-  /// Whether the class is a mixin application that mixes in methods with super
-  /// calls.
-  bool get isSuperMixinApplication;
+  /// Whether the class is a mixin application with its own members.
+  ///
+  /// This occurs when a mixin contains methods with super calls or when
+  /// the mixin application contains concrete forwarding stubs.
+  bool get isMixinApplicationWithMembers;
 
   /// Return the [MemberEntity] for the member [name] in the class. If [setter]
   /// is `true`, the setter or assignable field corresponding to [name] is
@@ -235,13 +237,13 @@
   final Map<String, ir.Member> _setterMap;
   final List<ir.Member> _members; // in declaration order.
   @override
-  final bool isSuperMixinApplication;
+  final bool isMixinApplicationWithMembers;
 
   /// Constructor bodies created for this class.
   List<ConstructorBodyEntity> _constructorBodyList;
 
   JClassEnvImpl(this.cls, this._constructorMap, this._memberMap,
-      this._setterMap, this._members, this.isSuperMixinApplication);
+      this._setterMap, this._members, this.isMixinApplicationWithMembers);
 
   factory JClassEnvImpl.readFromDataSource(DataSource source) {
     source.begin(tag);
@@ -268,7 +270,7 @@
     sink.writeStringMap(_memberMap, sink.writeMemberNode);
     sink.writeStringMap(_setterMap, sink.writeMemberNode);
     sink.writeMemberNodes(_members);
-    sink.writeBool(isSuperMixinApplication);
+    sink.writeBool(isMixinApplicationWithMembers);
     sink.end(tag);
   }
 
@@ -372,7 +374,7 @@
   bool get isUnnamedMixinApplication => false;
 
   @override
-  bool get isSuperMixinApplication => false;
+  bool get isMixinApplicationWithMembers => false;
 
   @override
   ir.Class get cls => null;
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 4b3917c8..dd59226 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -81,11 +81,6 @@
   /// Returns the [ClassEntity] corresponding to the class [node].
   ClassEntity getClass(ir.Class node);
 
-  /// Returns the super [MemberEntity] for a super invocation, get or set of
-  /// [name] from the member [context].
-  MemberEntity getSuperMember(MemberEntity context, ir.Name name,
-      {bool setter: false});
-
   /// Returns the `noSuchMethod` [FunctionEntity] call from a
   /// `super.noSuchMethod` invocation within [cls].
   FunctionEntity getSuperNoSuchMethod(ClassEntity cls);
@@ -190,26 +185,16 @@
 bool memberIsIgnorable(ir.Member node, {ir.Class cls}) {
   if (node is! ir.Procedure) return false;
   ir.Procedure member = node;
-  if ((member.isMemberSignature || member.isForwardingStub) &&
-      member.isAbstract) {
-    // Skip abstract forwarding stubs. These are never emitted but they
-    // might shadow the inclusion of a mixed in method in code like:
-    //
-    //     class Super {}
-    //     class Mixin<T> {
-    //       void method(T t) {}
-    //     }
-    //     class Class extends Super with Mixin<int> {}
-    //     main() => new Class().method();
-    //
-    // Here a stub is created for `Super&Mixin.method` hiding that
-    // `Mixin.method` is inherited by `Class`.
-    return true;
-  }
-  if (cls != null &&
-      (member.isMemberSignature || member.isForwardingStub) &&
-      cls.isAnonymousMixin) {
-    return true;
+  switch (member.stubKind) {
+    case ir.ProcedureStubKind.Regular:
+    case ir.ProcedureStubKind.ConcreteForwardingStub:
+    case ir.ProcedureStubKind.NoSuchMethodForwarder:
+      return false;
+    case ir.ProcedureStubKind.AbstractForwardingStub:
+    case ir.ProcedureStubKind.MemberSignature:
+    case ir.ProcedureStubKind.AbstractMixinStub:
+    case ir.ProcedureStubKind.ConcreteMixinStub:
+      return true;
   }
   return false;
 }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 580cc32..fe5ce5f 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -425,32 +425,6 @@
   }
 
   @override
-  MemberEntity getSuperMember(MemberEntity context, ir.Name name,
-      {bool setter: false}) {
-    // We can no longer trust the interface target of the super access since it
-    // might be a member that we have cloned.
-    ClassEntity cls = context.enclosingClass;
-    assert(
-        cls != null,
-        failedAt(context,
-            "No enclosing class for super member access in $context."));
-    IndexedClass superclass = getSuperType(cls)?.element;
-    while (superclass != null) {
-      KClassEnv env = classes.getEnv(superclass);
-      MemberEntity superMember =
-          env.lookupMember(this, name.text, setter: setter);
-      if (superMember != null) {
-        if (!superMember.isInstanceMember) return null;
-        if (!superMember.isAbstract) {
-          return superMember;
-        }
-      }
-      superclass = getSuperType(superclass)?.element;
-    }
-    return null;
-  }
-
-  @override
   ConstructorEntity getConstructor(ir.Member node) =>
       getConstructorInternal(node);
 
@@ -1368,7 +1342,7 @@
     bool isStatic = node.isStatic;
     IndexedField field = createField(library, enclosingClass, name,
         isStatic: isStatic,
-        isAssignable: node.isMutable,
+        isAssignable: node.hasSetter,
         isConst: node.isConst);
     return members.register<IndexedField, KFieldData>(
         field, new KFieldDataImpl(node));
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 3f042bd..bbad224 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -131,7 +131,7 @@
           }
         } else if (member is ir.Field) {
           _memberMap[member.name.text] = member;
-          if (member.isMutable) {
+          if (member.hasSetter) {
             _setterMap[member.name.text] = member;
           }
         } else {
@@ -242,9 +242,11 @@
   /// Whether the class is an unnamed mixin application.
   bool get isUnnamedMixinApplication;
 
-  /// Whether the class is a mixin application that mixes in methods with super
-  /// calls.
-  bool get isSuperMixinApplication;
+  /// Whether the class is a mixin application with its own members.
+  ///
+  /// This occurs when a mixin contains methods with super calls or when
+  /// the mixin application contains concrete forwarding stubs.
+  bool get isMixinApplicationWithMembers;
 
   /// Ensures that all members have been computed for [cls].
   void ensureMembers(KernelToElementMapImpl elementMap);
@@ -294,7 +296,7 @@
   Map<String, ir.Member> _memberMap;
   Map<String, ir.Member> _setterMap;
   List<ir.Member> _members; // in declaration order.
-  bool _isSuperMixinApplication;
+  bool _isMixinApplicationWithMembers;
 
   /// Constructor bodies created for this class.
   List<ConstructorBodyEntity> _constructorBodyList;
@@ -302,15 +304,15 @@
   KClassEnvImpl(this.cls);
 
   KClassEnvImpl.internal(this.cls, this._constructorMap, this._memberMap,
-      this._setterMap, this._members, this._isSuperMixinApplication);
+      this._setterMap, this._members, this._isMixinApplicationWithMembers);
 
   @override
   bool get isUnnamedMixinApplication => cls.isAnonymousMixin;
 
   @override
-  bool get isSuperMixinApplication {
-    assert(_isSuperMixinApplication != null);
-    return _isSuperMixinApplication;
+  bool get isMixinApplicationWithMembers {
+    assert(_isMixinApplicationWithMembers != null);
+    return _isMixinApplicationWithMembers;
   }
 
   @override
@@ -325,21 +327,23 @@
     _setterMap = <String, ir.Member>{};
     _constructorMap = <String, ir.Member>{};
     var members = <ir.Member>[];
-    _isSuperMixinApplication = false;
+    _isMixinApplicationWithMembers = false;
 
     void addField(ir.Field member, {bool includeStatic}) {
       if (!includeStatic && member.isStatic) return;
       if (isRedirectingFactoryField(member)) return;
       var name = member.name.text;
       _memberMap[name] = member;
-      if (member.isMutable) {
+      if (member.hasSetter) {
         _setterMap[name] = member;
       }
       members.add(member);
     }
 
     void addProcedure(ir.Procedure member,
-        {bool includeStatic, bool includeNoSuchMethodForwarders}) {
+        {bool includeStatic,
+        bool includeNoSuchMethodForwarders,
+        bool isFromMixinApplication: false}) {
       if (memberIsIgnorable(member, cls: cls)) return;
       if (!includeStatic && member.isStatic) return;
       if (member.isNoSuchMethodForwarder) {
@@ -360,12 +364,18 @@
       } else if (member.kind == ir.ProcedureKind.Setter) {
         _setterMap[name] = member;
         members.add(member);
+        if (isFromMixinApplication) {
+          _isMixinApplicationWithMembers = true;
+        }
       } else {
         assert(member.kind == ir.ProcedureKind.Method ||
             member.kind == ir.ProcedureKind.Getter ||
             member.kind == ir.ProcedureKind.Operator);
         _memberMap[name] = member;
         members.add(member);
+        if (isFromMixinApplication) {
+          _isMixinApplicationWithMembers = true;
+        }
       }
     }
 
@@ -379,27 +389,66 @@
     int mixinMemberCount = 0;
 
     if (cls.mixedInClass != null) {
+      Map<ir.Name, ir.Procedure> existingNonSetters;
+      Map<ir.Name, ir.Procedure> existingSetters;
+
+      void ensureExistingProcedureMaps() {
+        if (existingNonSetters == null) {
+          existingNonSetters = {};
+          existingSetters = {};
+          for (ir.Procedure procedure in cls.procedures) {
+            if (procedure.kind == ir.ProcedureKind.Setter) {
+              existingSetters[procedure.name] = procedure;
+            } else {
+              existingNonSetters[procedure.name] = procedure;
+            }
+          }
+        }
+      }
+
       CloneVisitorWithMembers cloneVisitor;
       for (ir.Field field in cls.mixedInClass.mixin.fields) {
         if (field.containsSuperCalls) {
-          _isSuperMixinApplication = true;
-          cloneVisitor ??= new CloneVisitorWithMembers(
+          _isMixinApplicationWithMembers = true;
+          cloneVisitor ??= new MixinApplicationCloner(cls,
               typeSubstitution: getSubstitutionMap(cls.mixedInType));
           // TODO(jensj): Provide a "referenceFrom" if we need to support
           // the incremental compiler.
-          cls.addField(cloneVisitor.cloneField(field, null));
+          ensureExistingProcedureMaps();
+          ir.Procedure existingGetter = existingNonSetters[field.name];
+          ir.Procedure existingSetter = existingSetters[field.name];
+          cls.addField(cloneVisitor.cloneField(
+              field, existingGetter?.reference, existingSetter?.reference));
+          if (existingGetter != null) {
+            existingGetter.reference.canonicalName?.unbind();
+            cls.procedures.remove(existingGetter);
+          }
+          if (existingSetter != null) {
+            existingSetter.reference.canonicalName?.unbind();
+            cls.procedures.remove(existingSetter);
+          }
           continue;
         }
         addField(field, includeStatic: false);
       }
       for (ir.Procedure procedure in cls.mixedInClass.mixin.procedures) {
         if (procedure.containsSuperCalls) {
-          _isSuperMixinApplication = true;
-          cloneVisitor ??= new CloneVisitorWithMembers(
+          _isMixinApplicationWithMembers = true;
+          cloneVisitor ??= new MixinApplicationCloner(cls,
               typeSubstitution: getSubstitutionMap(cls.mixedInType));
           // TODO(jensj): Provide a "referenceFrom" if we need to support
           // the incremental compiler.
-          cls.addProcedure(cloneVisitor.cloneProcedure(procedure, null));
+          ensureExistingProcedureMaps();
+          ir.Procedure existingProcedure =
+              procedure.kind == ir.ProcedureKind.Setter
+                  ? existingSetters[procedure.name]
+                  : existingNonSetters[procedure.name];
+          if (existingProcedure != null) {
+            existingProcedure.reference.canonicalName?.unbind();
+            cls.procedures.remove(existingProcedure);
+          }
+          cls.addProcedure(cloneVisitor.cloneProcedure(
+              procedure, existingProcedure?.reference));
           continue;
         }
         addProcedure(procedure,
@@ -415,7 +464,9 @@
     addConstructors(cls);
     for (ir.Procedure member in cls.procedures) {
       addProcedure(member,
-          includeStatic: true, includeNoSuchMethodForwarders: true);
+          includeStatic: true,
+          includeNoSuchMethodForwarders: true,
+          isFromMixinApplication: cls.mixedInClass != null);
     }
 
     mergeSort(members, start: mixinMemberCount, compare: orderByFileOffset);
@@ -516,7 +567,7 @@
       });
     }
     return new JClassEnvImpl(cls, constructorMap, memberMap, setterMap, members,
-        _isSuperMixinApplication ?? false);
+        _isMixinApplicationWithMembers ?? false);
   }
 }
 
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index d167042..f3df3a2 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -499,18 +499,19 @@
   }
 
   @override
-  void registerSuperInvocation(ir.Name name, int positionalArguments,
+  void registerSuperInvocation(ir.Member target, int positionalArguments,
       List<String> namedArguments, List<ir.DartType> typeArguments) {
-    FunctionEntity method =
-        elementMap.getSuperMember(currentMember, name, setter: false);
-    List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
-    if (method != null) {
+    if (target != null) {
+      FunctionEntity method = elementMap.getMember(target);
+      List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
       impactBuilder.registerStaticUse(new StaticUse.superInvoke(
           method,
           new CallStructure(positionalArguments + namedArguments.length,
               namedArguments, typeArguments.length),
           dartTypeArguments));
     } else {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       impactBuilder.registerStaticUse(new StaticUse.superInvoke(
           elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
           CallStructure.ONE_ARG));
@@ -519,16 +520,17 @@
   }
 
   @override
-  void registerSuperGet(ir.Name name) {
-    MemberEntity member =
-        elementMap.getSuperMember(currentMember, name, setter: false);
-    if (member != null) {
+  void registerSuperGet(ir.Member target) {
+    if (target != null) {
+      MemberEntity member = elementMap.getMember(target);
       if (member.isFunction) {
         impactBuilder.registerStaticUse(new StaticUse.superTearOff(member));
       } else {
         impactBuilder.registerStaticUse(new StaticUse.superGet(member));
       }
     } else {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       impactBuilder.registerStaticUse(new StaticUse.superInvoke(
           elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
           CallStructure.ONE_ARG));
@@ -537,16 +539,17 @@
   }
 
   @override
-  void registerSuperSet(ir.Name name) {
-    MemberEntity member =
-        elementMap.getSuperMember(currentMember, name, setter: true);
-    if (member != null) {
+  void registerSuperSet(ir.Member target) {
+    if (target != null) {
+      MemberEntity member = elementMap.getMember(target);
       if (member.isField) {
         impactBuilder.registerStaticUse(new StaticUse.superFieldSet(member));
       } else {
         impactBuilder.registerStaticUse(new StaticUse.superSetterSet(member));
       }
     } else {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       impactBuilder.registerStaticUse(new StaticUse.superInvoke(
           elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
           CallStructure.ONE_ARG));
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 7c66c12..7e0a3af 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3469,12 +3469,14 @@
     node.value.accept(this);
     HInstruction value = pop();
 
-    MemberEntity member = _elementMap
-        .getSuperMember(_currentFrame.member, node.name, setter: true);
-    if (member == null) {
+    ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
+    if (target == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       _generateSuperNoSuchMethod(node, _elementMap.getSelector(node).name + "=",
           <HInstruction>[value], const <DartType>[], sourceInformation);
     } else {
+      MemberEntity member = _elementMap.getMember(target);
       _buildInvokeSuper(
           _elementMap.getSelector(node),
           _elementMap.getClass(_containingClass(node)),
@@ -5291,13 +5293,15 @@
   void visitSuperPropertyGet(ir.SuperPropertyGet node) {
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildGet(node);
-    MemberEntity member =
-        _elementMap.getSuperMember(_currentFrame.member, node.name);
-    if (member == null) {
+    ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
+    if (target == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       _generateSuperNoSuchMethod(node, _elementMap.getSelector(node).name,
           const <HInstruction>[], const <DartType>[], sourceInformation);
       return;
     }
+    MemberEntity member = _elementMap.getMember(target);
     if (member.isField) {
       FieldAnalysisData fieldData = _fieldAnalysis.getFieldData(member);
       if (fieldData.isEffectivelyConstant) {
@@ -5320,9 +5324,10 @@
   void visitSuperMethodInvocation(ir.SuperMethodInvocation node) {
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildCall(node, node);
-    MemberEntity member =
-        _elementMap.getSuperMember(_currentFrame.member, node.name);
-    if (member == null) {
+    ir.Member superTarget = getEffectiveSuperTarget(node.interfaceTarget);
+    if (superTarget == null) {
+      // TODO(johnniwinther): Remove this when the CFE checks for missing
+      //  concrete super targets.
       Selector selector = _elementMap.getSelector(node);
       List<DartType> typeArguments = <DartType>[];
       selector =
@@ -5333,6 +5338,7 @@
           node, selector.name, arguments, typeArguments, sourceInformation);
       return;
     }
+    MemberEntity member = _elementMap.getMember(superTarget);
     List<DartType> typeArguments =
         _getStaticTypeArguments(member, node.arguments);
 
diff --git a/pkg/compiler/test/model/supermixin_test.dart b/pkg/compiler/test/model/supermixin_test.dart
index f1fed6e..e347d70 100644
--- a/pkg/compiler/test/model/supermixin_test.dart
+++ b/pkg/compiler/test/model/supermixin_test.dart
@@ -53,7 +53,7 @@
     ClassEntity superB = lookupClass(elementEnvironment, 'SuperB');
     ClassEntity superClass = elementEnvironment.getSuperClass(cls);
 
-    Expect.isTrue(elementEnvironment.isSuperMixinApplication(superClass));
+    Expect.isTrue(elementEnvironment.isMixinApplicationWithMembers(superClass));
     Expect.equals(mixin, elementEnvironment.getEffectiveMixinClass(superClass));
     Expect.equals(superA, elementEnvironment.getSuperClass(mixin));
     Expect.equals(superB, elementEnvironment.getSuperClass(superClass));
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index c88de17..aebaf89 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 1.7.0
+- Added `package:dds/vm_service_extensions.dart`, which adds DDS functionality to
+  `package:vm_service` when imported.
+- Added `getStreamHistory` RPC.
+
 # 1.6.1
 - Fixed unhandled `StateError` that could be thrown if the VM service disconnected
   while a request was outstanding.
diff --git a/pkg/dds/analysis_options.yaml b/pkg/dds/analysis_options.yaml
index b5e3320..413f412 100644
--- a/pkg/dds/analysis_options.yaml
+++ b/pkg/dds/analysis_options.yaml
@@ -1,4 +1,4 @@
-include: package:pedantic/analysis_options.1.7.0.yaml
+include: package:pedantic/analysis_options.1.8.0.yaml
 
 linter:
   rules:
diff --git a/pkg/dds/dds_protocol.md b/pkg/dds/dds_protocol.md
index 253ef99..b690c1a 100644
--- a/pkg/dds/dds_protocol.md
+++ b/pkg/dds/dds_protocol.md
@@ -1,6 +1,6 @@
-# Dart Development Service Protocol 1.1
+# Dart Development Service Protocol 1.2
 
-This document describes _version 1.1_ of the Dart Development Service Protocol.
+This document describes _version 1.2_ of the Dart Development Service Protocol.
 This protocol is an extension of the Dart VM Service Protocol and implements it
 in it's entirety. For details on the VM Service Protocol, see the [Dart VM Service Protocol Specification][service-protocol].
 
@@ -103,6 +103,19 @@
 
 See [Size](#size).
 
+
+### getStreamHistory
+
+```
+StreamHistory getStreamHistory(string streamId)
+```
+
+The _getStreamHistory_ RPC is used to retrieve historical events for streams
+which support event history (see [Streams](#streams) for a list of supported
+streams).
+
+See [StreamHistory](#streamhistory).
+
 ### requirePermissionToResume
 
 ```
@@ -189,12 +202,24 @@
 
 A simple object representing a size response.
 
+### StreamHistory
+
+```
+class StreamHistory extends Response {
+  // A list of historical Events for a stream.
+  List<Event> history;
+}
+```
+
+See [getStreamHistory](#getStreamHistory).
+
 ## Revision History
 
 version | comments
 ------- | --------
 1.0 | Initial revision
 1.1 | Added `getDartDevelopmentServiceVersion` RPC.
+1.2 | Added `getStreamHistory` RPC.
 
 [resume]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#resume
 [success]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#success
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
index 29cc288..a9024dd 100644
--- a/pkg/dds/lib/dds.dart
+++ b/pkg/dds/lib/dds.dart
@@ -7,35 +7,9 @@
 library dds;
 
 import 'dart:async';
-import 'dart:collection';
-import 'dart:convert';
 import 'dart:io';
-import 'dart:math';
-import 'dart:typed_data';
 
-import 'package:async/async.dart';
-import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
-import 'package:meta/meta.dart';
-import 'package:pedantic/pedantic.dart';
-import 'package:shelf/shelf.dart';
-import 'package:shelf/shelf_io.dart' as io;
-import 'package:shelf_proxy/shelf_proxy.dart';
-import 'package:shelf_web_socket/shelf_web_socket.dart';
-import 'package:sse/server/sse_handler.dart';
-import 'package:stream_channel/stream_channel.dart';
-import 'package:web_socket_channel/web_socket_channel.dart';
-
-part 'src/binary_compatible_peer.dart';
-part 'src/client.dart';
-part 'src/client_manager.dart';
-part 'src/constants.dart';
-part 'src/dds_impl.dart';
-part 'src/expression_evaluator.dart';
-part 'src/logging_repository.dart';
-part 'src/isolate_manager.dart';
-part 'src/named_lookup.dart';
-part 'src/rpc_error_codes.dart';
-part 'src/stream_manager.dart';
+import 'src/dds_impl.dart';
 
 /// An intermediary between a Dart VM service and its clients that offers
 /// additional functionality on top of the standard VM service protocol.
@@ -99,7 +73,7 @@
       }
     }
 
-    final service = _DartDevelopmentService(
+    final service = DartDevelopmentServiceImpl(
       remoteVmServiceUri,
       serviceUri,
       enableAuthCodes,
@@ -155,7 +129,7 @@
 
   /// The version of the DDS protocol supported by this [DartDevelopmentService]
   /// instance.
-  static const String protocolVersion = '1.1';
+  static const String protocolVersion = '1.2';
 }
 
 class DartDevelopmentServiceException implements Exception {
@@ -171,22 +145,22 @@
   /// Set when a connection error has occurred after startup.
   static const int connectionError = 3;
 
-  factory DartDevelopmentServiceException._existingDdsInstanceError(
-      String message) {
+  factory DartDevelopmentServiceException.existingDdsInstance(String message) {
     return DartDevelopmentServiceException._(existingDdsInstanceError, message);
   }
 
-  factory DartDevelopmentServiceException._failedToStartError() {
+  factory DartDevelopmentServiceException.failedToStart() {
     return DartDevelopmentServiceException._(
         failedToStartError, 'Failed to start Dart Development Service');
   }
 
-  factory DartDevelopmentServiceException._connectionError(String message) {
+  factory DartDevelopmentServiceException.connectionIssue(String message) {
     return DartDevelopmentServiceException._(connectionError, message);
   }
 
   DartDevelopmentServiceException._(this.errorCode, this.message);
 
+  @override
   String toString() => 'DartDevelopmentServiceException: $message';
 
   final int errorCode;
diff --git a/pkg/dds/lib/src/binary_compatible_peer.dart b/pkg/dds/lib/src/binary_compatible_peer.dart
index de0a182..b701f5e 100644
--- a/pkg/dds/lib/src/binary_compatible_peer.dart
+++ b/pkg/dds/lib/src/binary_compatible_peer.dart
@@ -2,7 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:typed_data';
+
+import 'package:async/async.dart';
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import 'package:stream_channel/stream_channel.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+import 'stream_manager.dart';
 
 /// Adds support for binary events send from the VM service, which are not part
 /// of the official JSON RPC 2.0 specification.
@@ -17,10 +26,10 @@
 /// ```
 /// where `metadata` is the JSON body of the event.
 ///
-/// [_BinaryCompatiblePeer] assumes that only stream events can contain a
+/// [BinaryCompatiblePeer] assumes that only stream events can contain a
 /// binary payload (e.g., clients cannot send a `BinaryEvent` to the VM service).
-class _BinaryCompatiblePeer extends json_rpc.Peer {
-  _BinaryCompatiblePeer(WebSocketChannel ws, _StreamManager streamManager)
+class BinaryCompatiblePeer extends json_rpc.Peer {
+  BinaryCompatiblePeer(WebSocketChannel ws, StreamManager streamManager)
       : super(
           ws.transform<String>(
             StreamChannelTransformer(
@@ -39,7 +48,7 @@
         );
 
   static void _transformStream(
-      _StreamManager streamManager, dynamic data, EventSink<String> sink) {
+      StreamManager streamManager, dynamic data, EventSink<String> sink) {
     if (data is String) {
       // Non-binary messages come in as Strings. Simply forward to the sink.
       sink.add(data);
diff --git a/pkg/dds/lib/src/client.dart b/pkg/dds/lib/src/client.dart
index 9637058..f8018f9 100644
--- a/pkg/dds/lib/src/client.dart
+++ b/pkg/dds/lib/src/client.dart
@@ -2,34 +2,46 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'dart:async';
+
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import 'package:meta/meta.dart';
+import 'package:sse/server/sse_handler.dart';
+import 'package:stream_channel/stream_channel.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+import '../dds.dart';
+import 'constants.dart';
+import 'dds_impl.dart';
+import 'rpc_error_codes.dart';
+import 'stream_manager.dart';
 
 /// Representation of a single DDS client which manages the connection and
 /// DDS request intercepting / forwarding.
-class _DartDevelopmentServiceClient {
-  factory _DartDevelopmentServiceClient.fromWebSocket(
+class DartDevelopmentServiceClient {
+  factory DartDevelopmentServiceClient.fromWebSocket(
     DartDevelopmentService dds,
     WebSocketChannel ws,
     json_rpc.Peer vmServicePeer,
   ) =>
-      _DartDevelopmentServiceClient._(
+      DartDevelopmentServiceClient._(
         dds,
         ws,
         vmServicePeer,
       );
 
-  factory _DartDevelopmentServiceClient.fromSSEConnection(
+  factory DartDevelopmentServiceClient.fromSSEConnection(
     DartDevelopmentService dds,
     SseConnection sse,
     json_rpc.Peer vmServicePeer,
   ) =>
-      _DartDevelopmentServiceClient._(
+      DartDevelopmentServiceClient._(
         dds,
         sse,
         vmServicePeer,
       );
 
-  _DartDevelopmentServiceClient._(
+  DartDevelopmentServiceClient._(
     this.dds,
     this.connection,
     json_rpc.Peer vmServicePeer,
@@ -39,7 +51,7 @@
       // .cast<String>() as cast() results in addStream() being called,
       // binding the underlying sink. This results in a StateError being thrown
       // if we try and add directly to the sink, which we do for binary events
-      // in _StreamManager's streamNotify().
+      // in StreamManager's streamNotify().
       StreamChannel<String>(
         connection.stream.cast(),
         StreamController(sync: true)
@@ -88,21 +100,21 @@
     _clientPeer.registerMethod('streamListen', (parameters) async {
       final streamId = parameters['streamId'].asString;
       await dds.streamManager.streamListen(this, streamId);
-      return _RPCResponses.success;
+      return RPCResponses.success;
     });
 
     _clientPeer.registerMethod('streamCancel', (parameters) async {
       final streamId = parameters['streamId'].asString;
       await dds.streamManager.streamCancel(this, streamId);
-      return _RPCResponses.success;
+      return RPCResponses.success;
     });
 
     _clientPeer.registerMethod('registerService', (parameters) async {
       final serviceId = parameters['service'].asString;
       final alias = parameters['alias'].asString;
       if (services.containsKey(serviceId)) {
-        throw _RpcErrorCodes.buildRpcException(
-          _RpcErrorCodes.kServiceAlreadyRegistered,
+        throw RpcErrorCodes.buildRpcException(
+          RpcErrorCodes.kServiceAlreadyRegistered,
         );
       }
       services[serviceId] = alias;
@@ -112,7 +124,7 @@
         serviceId,
         alias,
       );
-      return _RPCResponses.success;
+      return RPCResponses.success;
     });
 
     _clientPeer.registerMethod(
@@ -136,13 +148,26 @@
       (parameters) => dds.isolateManager.resumeIsolate(this, parameters),
     );
 
+    _clientPeer.registerMethod('getStreamHistory', (parameters) {
+      final stream = parameters['stream'].asString;
+      final events = dds.streamManager.getStreamHistory(stream);
+      if (events == null) {
+        throw json_rpc.RpcException.invalidParams(
+          "Event history is not collected for stream '$stream'",
+        );
+      }
+      return <String, dynamic>{
+        'type': 'StreamHistory',
+        'history': events,
+      };
+    });
+
     _clientPeer.registerMethod(
         'getLogHistorySize',
         (parameters) => {
               'type': 'Size',
-              'size': _StreamManager
-                  .loggingRepositories[_StreamManager.kLoggingStream]
-                  .bufferSize,
+              'size': StreamManager
+                  .loggingRepositories[StreamManager.kLoggingStream].bufferSize,
             });
 
     _clientPeer.registerMethod('setLogHistorySize', (parameters) {
@@ -152,9 +177,9 @@
           "'size' must be greater or equal to zero",
         );
       }
-      _StreamManager.loggingRepositories[_StreamManager.kLoggingStream]
+      StreamManager.loggingRepositories[StreamManager.kLoggingStream]
           .resize(size);
-      return _RPCResponses.success;
+      return RPCResponses.success;
     });
 
     _clientPeer.registerMethod('getDartDevelopmentServiceVersion',
@@ -219,21 +244,21 @@
           [
             // Forward the request to the service client or...
             serviceClient.sendRequest(method, parameters.asMap).catchError((_) {
-              throw _RpcErrorCodes.buildRpcException(
-                _RpcErrorCodes.kServiceDisappeared,
+              throw RpcErrorCodes.buildRpcException(
+                RpcErrorCodes.kServiceDisappeared,
               );
             }, test: (error) => error is StateError),
             // if the service client closes, return an error response.
             serviceClient._clientPeer.done.then(
-              (_) => throw _RpcErrorCodes.buildRpcException(
-                _RpcErrorCodes.kServiceDisappeared,
+              (_) => throw RpcErrorCodes.buildRpcException(
+                RpcErrorCodes.kServiceDisappeared,
               ),
             ),
           ],
         );
       }
       throw json_rpc.RpcException(
-        _RpcErrorCodes.kMethodNotFound,
+        RpcErrorCodes.kMethodNotFound,
         'Unknown service: ${parameters.method}',
       );
     });
@@ -260,12 +285,12 @@
   String get name => _name;
 
   // NOTE: this should not be called directly except from:
-  //   - `_ClientManager._clearClientName`
-  //   - `_ClientManager._setClientNameHelper`
+  //   - `ClientManager._clearClientName`
+  //   - `ClientManager._setClientNameHelper`
   set name(String n) => _name = n ?? defaultClientName;
   String _name;
 
-  final _DartDevelopmentService dds;
+  final DartDevelopmentServiceImpl dds;
   final StreamChannel connection;
   final Map<String, String> services = {};
   final json_rpc.Peer _vmServicePeer;
diff --git a/pkg/dds/lib/src/client_manager.dart b/pkg/dds/lib/src/client_manager.dart
index 4304000..b168978 100644
--- a/pkg/dds/lib/src/client_manager.dart
+++ b/pkg/dds/lib/src/client_manager.dart
@@ -2,28 +2,34 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+
+import 'client.dart';
+import 'constants.dart';
+import 'dds_impl.dart';
+import 'named_lookup.dart';
+import 'stream_manager.dart';
 
 /// [_ClientResumePermissions] associates a list of
-/// [_DartDevelopmentServiceClient]s, all of the same client name, with a
+/// [DartDevelopmentServiceClient]s, all of the same client name, with a
 /// permissions mask used to determine which pause event types require approval
 /// from one of the listed clients before resuming an isolate.
 class _ClientResumePermissions {
-  final List<_DartDevelopmentServiceClient> clients = [];
+  final List<DartDevelopmentServiceClient> clients = [];
   int permissionsMask = 0;
 }
 
-/// The [_ClientManager] has the responsibility of managing all state and
+/// The [ClientManager] has the responsibility of managing all state and
 /// requests related to client connections, including:
 ///   - A list of all currently connected clients
 ///   - Tracking client names and associated permissions for isolate resume
 ///     synchronization
 ///   - Handling RPC invocations which change client state
-class _ClientManager {
-  _ClientManager(this.dds);
+class ClientManager {
+  ClientManager(this.dds);
 
   /// Initialize state for a newly connected client.
-  void addClient(_DartDevelopmentServiceClient client) {
+  void addClient(DartDevelopmentServiceClient client) {
     _setClientNameHelper(
       client,
       client.defaultClientName,
@@ -34,20 +40,20 @@
       dds.isolateManager.initialize().then((_) {
         dds.streamManager.streamListen(
           null,
-          _StreamManager.kDebugStream,
+          StreamManager.kDebugStream,
         );
       });
     }
   }
 
   /// Cleanup state for a disconnected client.
-  void removeClient(_DartDevelopmentServiceClient client) {
+  void removeClient(DartDevelopmentServiceClient client) {
     _clearClientName(client);
     clients.remove(client);
     if (clients.isEmpty) {
       dds.streamManager.streamCancel(
         null,
-        _StreamManager.kDebugStream,
+        StreamManager.kDebugStream,
       );
     }
   }
@@ -67,37 +73,37 @@
   ///
   /// The provided client name is used to track isolate resume approvals.
   Map<String, dynamic> setClientName(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     json_rpc.Parameters parameters,
   ) {
     _setClientNameHelper(client, parameters['name'].asString);
-    return _RPCResponses.success;
+    return RPCResponses.success;
   }
 
   /// Require permission from this client before resuming an isolate.
   Map<String, dynamic> requirePermissionToResume(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     json_rpc.Parameters parameters,
   ) {
     int pauseTypeMask = 0;
     if (parameters['onPauseStart'].asBoolOr(false)) {
-      pauseTypeMask |= _PauseTypeMasks.pauseOnStartMask;
+      pauseTypeMask |= PauseTypeMasks.pauseOnStartMask;
     }
     if (parameters['onPauseReload'].asBoolOr(false)) {
-      pauseTypeMask |= _PauseTypeMasks.pauseOnReloadMask;
+      pauseTypeMask |= PauseTypeMasks.pauseOnReloadMask;
     }
     if (parameters['onPauseExit'].asBoolOr(false)) {
-      pauseTypeMask |= _PauseTypeMasks.pauseOnExitMask;
+      pauseTypeMask |= PauseTypeMasks.pauseOnExitMask;
     }
 
     clientResumePermissions[client.name].permissionsMask = pauseTypeMask;
-    return _RPCResponses.success;
+    return RPCResponses.success;
   }
 
   /// Changes `client`'s name to `name` while also updating resume permissions
   /// and approvals.
   void _setClientNameHelper(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     String name,
   ) {
     _clearClientName(client);
@@ -112,7 +118,7 @@
   /// Resets the client's name while also cleaning up resume permissions and
   /// approvals.
   void _clearClientName(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
   ) {
     final name = client.name;
     client.name = null;
@@ -147,7 +153,7 @@
     }
   }
 
-  _DartDevelopmentServiceClient findFirstClientThatHandlesService(
+  DartDevelopmentServiceClient findFirstClientThatHandlesService(
       String service) {
     for (final client in clients) {
       if (client.services.containsKey(service)) {
@@ -159,7 +165,7 @@
 
   // Handles namespace generation for service extensions.
   static const _kServicePrologue = 's';
-  final NamedLookup<_DartDevelopmentServiceClient> clients = NamedLookup(
+  final NamedLookup<DartDevelopmentServiceClient> clients = NamedLookup(
     prologue: _kServicePrologue,
   );
 
@@ -167,5 +173,5 @@
   /// permissions.
   final Map<String, _ClientResumePermissions> clientResumePermissions = {};
 
-  final _DartDevelopmentService dds;
+  final DartDevelopmentServiceImpl dds;
 }
diff --git a/pkg/dds/lib/src/constants.dart b/pkg/dds/lib/src/constants.dart
index 6a41e0b..c6450d5 100644
--- a/pkg/dds/lib/src/constants.dart
+++ b/pkg/dds/lib/src/constants.dart
@@ -2,9 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
-
-abstract class _RPCResponses {
+abstract class RPCResponses {
   static const success = <String, dynamic>{
     'type': 'Success',
   };
@@ -16,13 +14,13 @@
   };
 }
 
-abstract class _PauseTypeMasks {
+abstract class PauseTypeMasks {
   static const pauseOnStartMask = 1 << 0;
   static const pauseOnReloadMask = 1 << 1;
   static const pauseOnExitMask = 1 << 2;
 }
 
-abstract class _ServiceEvents {
+abstract class ServiceEvents {
   static const isolateExit = 'IsolateExit';
   static const isolateSpawn = 'IsolateSpawn';
   static const isolateStart = 'IsolateStart';
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
index ad0e46f..8fdc7a8 100644
--- a/pkg/dds/lib/src/dds_impl.dart
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -2,7 +2,29 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import 'package:meta/meta.dart';
+import 'package:pedantic/pedantic.dart';
+import 'package:shelf/shelf.dart';
+import 'package:shelf/shelf_io.dart' as io;
+import 'package:shelf_proxy/shelf_proxy.dart';
+import 'package:shelf_web_socket/shelf_web_socket.dart';
+import 'package:sse/server/sse_handler.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+import '../dds.dart';
+import 'binary_compatible_peer.dart';
+import 'client.dart';
+import 'client_manager.dart';
+import 'expression_evaluator.dart';
+import 'isolate_manager.dart';
+import 'stream_manager.dart';
 
 @visibleForTesting
 typedef PeerBuilder = Future<json_rpc.Peer> Function(WebSocketChannel, dynamic);
@@ -18,20 +40,20 @@
 
 Future<json_rpc.Peer> _defaultPeerBuilder(
     WebSocketChannel ws, dynamic streamManager) async {
-  return _BinaryCompatiblePeer(ws, streamManager);
+  return BinaryCompatiblePeer(ws, streamManager);
 }
 
 WebSocketChannel _defaultWebSocketBuilder(Uri uri) {
   return WebSocketChannel.connect(uri.replace(scheme: 'ws'));
 }
 
-class _DartDevelopmentService implements DartDevelopmentService {
-  _DartDevelopmentService(
+class DartDevelopmentServiceImpl implements DartDevelopmentService {
+  DartDevelopmentServiceImpl(
       this._remoteVmServiceUri, this._uri, this._authCodesEnabled, this._ipv6) {
-    _clientManager = _ClientManager(this);
-    _expressionEvaluator = _ExpressionEvaluator(this);
-    _isolateManager = _IsolateManager(this);
-    _streamManager = _StreamManager(this);
+    _clientManager = ClientManager(this);
+    _expressionEvaluator = ExpressionEvaluator(this);
+    _isolateManager = IsolateManager(this);
+    _streamManager = StreamManager(this);
     _authCode = _authCodesEnabled ? _makeAuthToken() : '';
   }
 
@@ -41,22 +63,22 @@
     // TODO(bkonyi): throw if we've already shutdown.
     // Establish the connection to the VM service.
     _vmServiceSocket = webSocketBuilder(remoteVmServiceWsUri);
-    _vmServiceClient = await peerBuilder(_vmServiceSocket, _streamManager);
+    vmServiceClient = await peerBuilder(_vmServiceSocket, _streamManager);
     // Setup the JSON RPC client with the VM service.
     unawaited(
-      _vmServiceClient.listen().then(
+      vmServiceClient.listen().then(
         (_) {
           shutdown();
           if (!started && !completer.isCompleted) {
-            completer.completeError(
-                DartDevelopmentServiceException._failedToStartError());
+            completer
+                .completeError(DartDevelopmentServiceException.failedToStart());
           }
         },
         onError: (e, st) {
           shutdown();
           if (!completer.isCompleted) {
             completer.completeError(
-              DartDevelopmentServiceException._connectionError(e.toString()),
+              DartDevelopmentServiceException.connectionIssue(e.toString()),
               st,
             );
           }
@@ -109,13 +131,13 @@
     // and refuse connections from other clients. DDS is now acting in place of
     // the VM service.
     try {
-      await _vmServiceClient.sendRequest('_yieldControlToDDS', {
+      await vmServiceClient.sendRequest('_yieldControlToDDS', {
         'uri': tmpUri.toString(),
       });
     } on json_rpc.RpcException catch (e) {
       await _server.close(force: true);
       // _yieldControlToDDS fails if DDS is not the only VM service client.
-      throw DartDevelopmentServiceException._existingDdsInstanceError(
+      throw DartDevelopmentServiceException.existingDdsInstance(
         e.data != null ? e.data['details'] : e.toString(),
       );
     }
@@ -124,6 +146,7 @@
   }
 
   /// Stop accepting requests after gracefully handling existing requests.
+  @override
   Future<void> shutdown() async {
     if (_done.isCompleted || _shuttingDown) {
       // Already shutdown.
@@ -197,10 +220,10 @@
   }
 
   Handler _webSocketHandler() => webSocketHandler((WebSocketChannel ws) {
-        final client = _DartDevelopmentServiceClient.fromWebSocket(
+        final client = DartDevelopmentServiceClient.fromWebSocket(
           this,
           ws,
-          _vmServiceClient,
+          vmServiceClient,
         );
         clientManager.addClient(client);
       });
@@ -211,10 +234,10 @@
         : SseHandler(Uri.parse('/$_kSseHandlerPath'));
 
     handler.connections.rest.listen((sseConnection) {
-      final client = _DartDevelopmentServiceClient.fromSSEConnection(
+      final client = DartDevelopmentServiceClient.fromSSEConnection(
         this,
         sseConnection,
-        _vmServiceClient,
+        vmServiceClient,
       );
       clientManager.addClient(client);
     });
@@ -260,19 +283,27 @@
     return uri.replace(scheme: 'sse', pathSegments: pathSegments);
   }
 
-  String _getNamespace(_DartDevelopmentServiceClient client) =>
+  String getNamespace(DartDevelopmentServiceClient client) =>
       clientManager.clients.keyOf(client);
 
+  @override
   bool get authCodesEnabled => _authCodesEnabled;
   final bool _authCodesEnabled;
   String _authCode;
 
+  @override
   Uri get remoteVmServiceUri => _remoteVmServiceUri;
+
+  @override
   Uri get remoteVmServiceWsUri => _toWebSocket(_remoteVmServiceUri);
   Uri _remoteVmServiceUri;
 
+  @override
   Uri get uri => _uri;
+
+  @override
   Uri get sseUri => _toSse(_uri);
+
   Uri get wsUri => _toWebSocket(_uri);
   Uri _uri;
 
@@ -284,21 +315,21 @@
   Completer _done = Completer<void>();
   bool _shuttingDown = false;
 
-  _ClientManager get clientManager => _clientManager;
-  _ClientManager _clientManager;
+  ClientManager get clientManager => _clientManager;
+  ClientManager _clientManager;
 
-  _ExpressionEvaluator get expressionEvaluator => _expressionEvaluator;
-  _ExpressionEvaluator _expressionEvaluator;
+  ExpressionEvaluator get expressionEvaluator => _expressionEvaluator;
+  ExpressionEvaluator _expressionEvaluator;
 
-  _IsolateManager get isolateManager => _isolateManager;
-  _IsolateManager _isolateManager;
+  IsolateManager get isolateManager => _isolateManager;
+  IsolateManager _isolateManager;
 
-  _StreamManager get streamManager => _streamManager;
-  _StreamManager _streamManager;
+  StreamManager get streamManager => _streamManager;
+  StreamManager _streamManager;
 
   static const _kSseHandlerPath = '\$debugHandler';
 
-  json_rpc.Peer _vmServiceClient;
+  json_rpc.Peer vmServiceClient;
   WebSocketChannel _vmServiceSocket;
   HttpServer _server;
 }
diff --git a/pkg/dds/lib/src/expression_evaluator.dart b/pkg/dds/lib/src/expression_evaluator.dart
index 348d8f4..bb69bb5 100644
--- a/pkg/dds/lib/src/expression_evaluator.dart
+++ b/pkg/dds/lib/src/expression_evaluator.dart
@@ -2,22 +2,26 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+
+import 'client.dart';
+import 'dds_impl.dart';
+import 'rpc_error_codes.dart';
 
 /// A helper class which handles `evaluate` and `evaluateInFrame` calls by
 /// potentially forwarding compilation requests to an external compilation
 /// service like Flutter Tools.
-class _ExpressionEvaluator {
-  _ExpressionEvaluator(this.dds);
+class ExpressionEvaluator {
+  ExpressionEvaluator(this.dds);
 
   Future<Map<String, dynamic>> execute(json_rpc.Parameters parameters) async {
-    _DartDevelopmentServiceClient externalClient =
+    DartDevelopmentServiceClient externalClient =
         dds.clientManager.findFirstClientThatHandlesService(
       'compileExpression',
     );
     // If no compilation service is registered, just forward to the VM service.
     if (externalClient == null) {
-      return await dds._vmServiceClient.sendRequest(
+      return await dds.vmServiceClient.sendRequest(
         parameters.method,
         parameters.value,
       );
@@ -30,8 +34,8 @@
     try {
       buildScopeResponse = await _buildScope(parameters);
     } on json_rpc.RpcException catch (e) {
-      throw _RpcErrorCodes.buildRpcException(
-        _RpcErrorCodes.kExpressionCompilationError,
+      throw RpcErrorCodes.buildRpcException(
+        RpcErrorCodes.kExpressionCompilationError,
         data: e.data,
       );
     }
@@ -40,8 +44,8 @@
       kernelBase64 =
           await _compileExpression(isolateId, expression, buildScopeResponse);
     } on json_rpc.RpcException catch (e) {
-      throw _RpcErrorCodes.buildRpcException(
-        _RpcErrorCodes.kExpressionCompilationError,
+      throw RpcErrorCodes.buildRpcException(
+        RpcErrorCodes.kExpressionCompilationError,
         data: e.data,
       );
     }
@@ -56,7 +60,7 @@
     if (parameters['scope'].asMapOr(null) != null) {
       params['scope'] = parameters['scope'].asMap;
     }
-    return await dds._vmServiceClient.sendRequest(
+    return await dds.vmServiceClient.sendRequest(
       '_buildExpressionEvaluationScope',
       params,
     );
@@ -64,13 +68,13 @@
 
   Future<String> _compileExpression(String isolateId, String expression,
       Map<String, dynamic> buildScopeResponseResult) async {
-    _DartDevelopmentServiceClient externalClient =
+    DartDevelopmentServiceClient externalClient =
         dds.clientManager.findFirstClientThatHandlesService(
       'compileExpression',
     );
     if (externalClient == null) {
-      throw _RpcErrorCodes.buildRpcException(
-          _RpcErrorCodes.kExpressionCompilationError,
+      throw RpcErrorCodes.buildRpcException(
+          RpcErrorCodes.kExpressionCompilationError,
           data: 'compileExpression service disappeared.');
     }
 
@@ -93,8 +97,8 @@
         compileParams,
       ))['kernelBytes'];
     } on json_rpc.RpcException catch (e) {
-      throw _RpcErrorCodes.buildRpcException(
-        _RpcErrorCodes.kExpressionCompilationError,
+      throw RpcErrorCodes.buildRpcException(
+        RpcErrorCodes.kExpressionCompilationError,
         data: e.data,
       );
     }
@@ -113,7 +117,7 @@
     if (parameters['scope'].asMapOr(null) != null) {
       params['scope'] = parameters['scope'].asMap;
     }
-    return await dds._vmServiceClient.sendRequest(
+    return await dds.vmServiceClient.sendRequest(
       '_evaluateCompiledExpression',
       params,
     );
@@ -132,5 +136,5 @@
     }
   }
 
-  final _DartDevelopmentService dds;
+  final DartDevelopmentServiceImpl dds;
 }
diff --git a/pkg/dds/lib/src/isolate_manager.dart b/pkg/dds/lib/src/isolate_manager.dart
index c94d4cd..2714021 100644
--- a/pkg/dds/lib/src/isolate_manager.dart
+++ b/pkg/dds/lib/src/isolate_manager.dart
@@ -2,7 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+
+import 'client.dart';
+import 'constants.dart';
+import 'dds_impl.dart';
 
 /// This file contains functionality used to track the running state of
 /// all isolates in a given Dart process.
@@ -12,13 +16,13 @@
 /// clients used to synchronize isolate resuming across multiple clients are
 /// tracked in this class.
 ///
-/// The [_IsolateManager] keeps track of all the isolates in the
+/// The [IsolateManager] keeps track of all the isolates in the
 /// target process and handles isolate lifecycle events including:
 ///   - Startup
 ///   - Shutdown
 ///   - Pauses
 ///
-/// The [_IsolateManager] also handles the `resume` RPC, which checks the
+/// The [IsolateManager] also handles the `resume` RPC, which checks the
 /// resume approvals in the target [_RunningIsolate] to determine if the
 /// isolate should be resumed or wait for additional approvals to be granted.
 
@@ -35,10 +39,15 @@
 
   // State setters.
   void pausedOnExit() => _state = _IsolateState.pauseExit;
+
   void pausedOnStart() => _state = _IsolateState.pauseStart;
+
   void pausedPostRequest() => _state = _IsolateState.pausePostRequest;
+
   void resumed() => running();
+
   void running() => _state = _IsolateState.running;
+
   void started() => _state = _IsolateState.start;
 
   /// Resumes the isolate if all clients which need to approve a resume have
@@ -51,7 +60,7 @@
 
     if (shouldResume()) {
       clearResumeApprovals();
-      await isolateManager.dds._vmServiceClient.sendRequest('resume', {
+      await isolateManager.dds.vmServiceClient.sendRequest('resume', {
         'isolateId': id,
       });
     }
@@ -64,7 +73,7 @@
   /// which have provided approval to resume this isolate. If not provided,
   /// the existing approvals state will be examined to see if the isolate
   /// should resume due to a client disconnect or name change.
-  bool shouldResume({_DartDevelopmentServiceClient resumingClient}) {
+  bool shouldResume({DartDevelopmentServiceClient resumingClient}) {
     if (resumingClient != null) {
       // Mark approval by the client.
       _resumeApprovalsByName.add(resumingClient.name);
@@ -97,20 +106,20 @@
   int get _isolateStateMask => isolateStateToMaskMapping[_state] ?? 0;
 
   static const isolateStateToMaskMapping = {
-    _IsolateState.pauseStart: _PauseTypeMasks.pauseOnStartMask,
-    _IsolateState.pausePostRequest: _PauseTypeMasks.pauseOnReloadMask,
-    _IsolateState.pauseExit: _PauseTypeMasks.pauseOnExitMask,
+    _IsolateState.pauseStart: PauseTypeMasks.pauseOnStartMask,
+    _IsolateState.pausePostRequest: PauseTypeMasks.pauseOnReloadMask,
+    _IsolateState.pauseExit: PauseTypeMasks.pauseOnExitMask,
   };
 
-  final _IsolateManager isolateManager;
+  final IsolateManager isolateManager;
   final String name;
   final String id;
   final Set<String> _resumeApprovalsByName = {};
   _IsolateState _state;
 }
 
-class _IsolateManager {
-  _IsolateManager(this.dds);
+class IsolateManager {
+  IsolateManager(this.dds);
 
   /// Handles state changes for isolates.
   void handleIsolateEvent(json_rpc.Parameters parameters) {
@@ -119,7 +128,7 @@
 
     // There's no interesting information about isolate state associated with
     // and IsolateSpawn event.
-    if (eventKind == _ServiceEvents.isolateSpawn) {
+    if (eventKind == ServiceEvents.isolateSpawn) {
       return;
     }
 
@@ -131,25 +140,25 @@
 
   void _updateIsolateState(String id, String name, String eventKind) {
     switch (eventKind) {
-      case _ServiceEvents.isolateStart:
+      case ServiceEvents.isolateStart:
         isolateStarted(id, name);
         break;
-      case _ServiceEvents.isolateExit:
+      case ServiceEvents.isolateExit:
         isolateExited(id);
         break;
       default:
         final isolate = isolates[id];
         switch (eventKind) {
-          case _ServiceEvents.pauseExit:
+          case ServiceEvents.pauseExit:
             isolate.pausedOnExit();
             break;
-          case _ServiceEvents.pausePostRequest:
+          case ServiceEvents.pausePostRequest:
             isolate.pausedPostRequest();
             break;
-          case _ServiceEvents.pauseStart:
+          case ServiceEvents.pauseStart:
             isolate.pausedOnStart();
             break;
-          case _ServiceEvents.resume:
+          case ServiceEvents.resume:
             isolate.resumed();
             break;
           default:
@@ -163,13 +172,13 @@
     if (_initialized) {
       return;
     }
-    final vm = await dds._vmServiceClient.sendRequest('getVM');
+    final vm = await dds.vmServiceClient.sendRequest('getVM');
     final List<Map> isolateRefs = vm['isolates'].cast<Map<String, dynamic>>();
     // Check the pause event for each isolate to determine whether or not the
     // isolate is already paused.
     for (final isolateRef in isolateRefs) {
       final id = isolateRef['id'];
-      final isolate = await dds._vmServiceClient.sendRequest('getIsolate', {
+      final isolate = await dds.vmServiceClient.sendRequest('getIsolate', {
         'isolateId': id,
       });
       final name = isolate['name'];
@@ -206,19 +215,19 @@
   ///
   /// Returns a collected sentinel if the isolate no longer exists.
   Future<Map<String, dynamic>> resumeIsolate(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     json_rpc.Parameters parameters,
   ) async {
     final isolateId = parameters['isolateId'].asString;
     final isolate = isolates[isolateId];
     if (isolate == null) {
-      return _RPCResponses.collectedSentinel;
+      return RPCResponses.collectedSentinel;
     }
     if (isolate.shouldResume(resumingClient: client)) {
       isolate.clearResumeApprovals();
       return await _sendResumeRequest(isolateId, parameters);
     }
-    return _RPCResponses.success;
+    return RPCResponses.success;
   }
 
   /// Forwards a `resume` request to the VM service.
@@ -228,7 +237,7 @@
   ) async {
     final step = parameters['step'].asStringOr(null);
     final frameIndex = parameters['frameIndex'].asIntOr(null);
-    final resumeResult = await dds._vmServiceClient.sendRequest('resume', {
+    final resumeResult = await dds.vmServiceClient.sendRequest('resume', {
       'isolateId': isolateId,
       if (step != null) 'step': step,
       if (frameIndex != null) 'frameIndex': frameIndex,
@@ -237,6 +246,6 @@
   }
 
   bool _initialized = false;
-  final _DartDevelopmentService dds;
+  final DartDevelopmentServiceImpl dds;
   final Map<String, _RunningIsolate> isolates = {};
 }
diff --git a/pkg/dds/lib/src/logging_repository.dart b/pkg/dds/lib/src/logging_repository.dart
index 67415be..f87fdaa 100644
--- a/pkg/dds/lib/src/logging_repository.dart
+++ b/pkg/dds/lib/src/logging_repository.dart
@@ -2,19 +2,23 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'dart:math';
 
-/// [_LoggingRepository] is used to store historical log messages from the
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+
+import 'client.dart';
+
+/// [LoggingRepository] is used to store historical log messages from the
 /// target VM service. Clients which connect to DDS and subscribe to the
 /// `Logging` stream will be sent all messages contained within this repository
 /// upon initial subscription.
-class _LoggingRepository extends _RingBuffer<Map<String, dynamic>> {
-  _LoggingRepository([int logHistoryLength = 10000]) : super(logHistoryLength) {
+class LoggingRepository extends _RingBuffer<Map<String, dynamic>> {
+  LoggingRepository([int logHistoryLength = 10000]) : super(logHistoryLength) {
     // TODO(bkonyi): enforce log history limit when DartDevelopmentService
     // allows for this to be set via Dart code.
   }
 
-  void sendHistoricalLogs(_DartDevelopmentServiceClient client) {
+  void sendHistoricalLogs(DartDevelopmentServiceClient client) {
     // Only send historical log messages when the client first subscribes to
     // the logging stream.
     if (_sentHistoricLogsClientSet.contains(client)) {
@@ -38,7 +42,7 @@
 
   // The set of clients which have subscribed to the Logging stream at some
   // point in time.
-  final Set<_DartDevelopmentServiceClient> _sentHistoricLogsClientSet = {};
+  final Set<DartDevelopmentServiceClient> _sentHistoricLogsClientSet = {};
   static const int _kMaxLogBufferSize = 100000;
 }
 
@@ -86,6 +90,7 @@
   }
 
   int get bufferSize => _bufferSize;
+
   int get _size => min(_count, _bufferSize);
 
   int _bufferSize;
diff --git a/pkg/dds/lib/src/named_lookup.dart b/pkg/dds/lib/src/named_lookup.dart
index 4b89633..603bbc0 100644
--- a/pkg/dds/lib/src/named_lookup.dart
+++ b/pkg/dds/lib/src/named_lookup.dart
@@ -4,7 +4,7 @@
 
 // Originally pulled from dart:_vmservice.
 
-part of dds;
+import 'dart:collection';
 
 /// [Set]-like containers which automatically generate [String] IDs for its
 /// items.
@@ -29,6 +29,7 @@
   }
 
   E operator [](String id) => _elements[id];
+
   String keyOf(E e) => _ids[e];
 
   Iterator<E> get iterator => _ids.keys.iterator;
diff --git a/pkg/dds/lib/src/rpc_error_codes.dart b/pkg/dds/lib/src/rpc_error_codes.dart
index 8826a51..93c514e 100644
--- a/pkg/dds/lib/src/rpc_error_codes.dart
+++ b/pkg/dds/lib/src/rpc_error_codes.dart
@@ -2,9 +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.
 
-part of dds;
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 
-abstract class _RpcErrorCodes {
+abstract class RpcErrorCodes {
   static json_rpc.RpcException buildRpcException(int code, {dynamic data}) {
     return json_rpc.RpcException(
       code,
@@ -18,15 +18,18 @@
   // static const kParseError = -32700;
   // static const kInvalidRequest = -32600;
   static const kMethodNotFound = -32601;
+
   // static const kInvalidParams = -32602;
   // static const kInternalError = -32603;
 
   // static const kExtensionError = -32000;
 
   static const kFeatureDisabled = 100;
+
   // static const kCannotAddBreakpoint = 102;
   static const kStreamAlreadySubscribed = 103;
   static const kStreamNotSubscribed = 104;
+
   // static const kIsolateMustBeRunnable = 105;
   // static const kIsolateMustBePaused = 106;
   // static const kCannotResume = 107;
@@ -36,6 +39,7 @@
   static const kServiceAlreadyRegistered = 111;
   static const kServiceDisappeared = 112;
   static const kExpressionCompilationError = 113;
+
   // static const kInvalidTimelineRequest = 114;
 
   // Experimental (used in private rpcs).
diff --git a/pkg/dds/lib/src/stream_manager.dart b/pkg/dds/lib/src/stream_manager.dart
index 20be940..e7b0f22 100644
--- a/pkg/dds/lib/src/stream_manager.dart
+++ b/pkg/dds/lib/src/stream_manager.dart
@@ -2,10 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dds;
+import 'dart:typed_data';
 
-class _StreamManager {
-  _StreamManager(this.dds);
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+
+import 'client.dart';
+import 'dds_impl.dart';
+import 'logging_repository.dart';
+import 'rpc_error_codes.dart';
+
+class StreamManager {
+  StreamManager(this.dds);
 
   /// Send `streamNotify` notifications to clients subscribed to `streamId`.
   ///
@@ -18,7 +25,7 @@
   void streamNotify(
     String streamId,
     data, {
-    _DartDevelopmentServiceClient excludedClient,
+    DartDevelopmentServiceClient excludedClient,
   }) {
     if (streamListeners.containsKey(streamId)) {
       final listeners = streamListeners[streamId];
@@ -51,11 +58,11 @@
       };
 
   void sendServiceRegisteredEvent(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     String service,
     String alias,
   ) {
-    final namespace = dds._getNamespace(client);
+    final namespace = dds.getNamespace(client);
     streamNotify(
       kServiceStream,
       _buildStreamRegisteredEvent(namespace, service, alias),
@@ -64,9 +71,9 @@
   }
 
   void _sendServiceUnregisteredEvents(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
   ) {
-    final namespace = dds._getNamespace(client);
+    final namespace = dds.getNamespace(client);
     for (final service in client.services.keys) {
       streamNotify(
         kServiceStream,
@@ -88,23 +95,23 @@
   /// Start listening for `streamNotify` events from the VM service and forward
   /// them to the clients which have subscribed to the stream.
   Future<void> listen() async {
-    // The _IsolateManager requires information from both the Debug and
+    // The IsolateManager requires information from both the Debug and
     // Isolate streams, so they must always be subscribed to by DDS.
     for (final stream in ddsCoreStreams) {
       try {
         await streamListen(null, stream);
         if (loggingRepositoryStreams.contains(stream)) {
-          loggingRepositories[stream] = _LoggingRepository();
+          loggingRepositories[stream] = LoggingRepository();
         }
       } on json_rpc.RpcException {
         // Stdout and Stderr streams may not exist.
       }
     }
-    dds._vmServiceClient.registerMethod(
+    dds.vmServiceClient.registerMethod(
       'streamNotify',
       (parameters) {
         final streamId = parameters['streamId'].asString;
-        // Forward events from the streams _IsolateManager subscribes to.
+        // Forward events from the streams IsolateManager subscribes to.
         if (isolateManagerStreams.contains(streamId)) {
           dds.isolateManager.handleIsolateEvent(parameters);
         }
@@ -123,7 +130,7 @@
   /// If `client` is the first client to listen to `stream`, DDS will send a
   /// `streamListen` request for `stream` to the VM service.
   Future<void> streamListen(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     String stream,
   ) async {
     assert(stream != null && stream.isNotEmpty);
@@ -132,12 +139,12 @@
           stream != kDebugStream) {
         // This will return an RPC exception if the stream doesn't exist. This
         // will throw and the exception will be forwarded to the client.
-        final result = await dds._vmServiceClient.sendRequest('streamListen', {
+        final result = await dds.vmServiceClient.sendRequest('streamListen', {
           'streamId': stream,
         });
         assert(result['type'] == 'Success');
       }
-      streamListeners[stream] = <_DartDevelopmentServiceClient>[];
+      streamListeners[stream] = <DartDevelopmentServiceClient>[];
     }
     if (streamListeners[stream].contains(client)) {
       throw kStreamAlreadySubscribedException;
@@ -153,7 +160,7 @@
           if (c == client) {
             continue;
           }
-          final namespace = dds._getNamespace(c);
+          final namespace = dds.getNamespace(c);
           for (final service in c.services.keys) {
             client.sendNotification(
               'streamNotify',
@@ -169,12 +176,21 @@
     }
   }
 
+  List<Map<String, dynamic>> getStreamHistory(String stream) {
+    if (!loggingRepositories.containsKey(stream)) {
+      return null;
+    }
+    return [
+      for (final event in loggingRepositories[stream]()) event,
+    ];
+  }
+
   /// Unsubscribes `client` from a stream.
   ///
   /// If `client` is the last client to unsubscribe from `stream`, DDS will
   /// send a `streamCancel` request for `stream` to the VM service.
   Future<void> streamCancel(
-    _DartDevelopmentServiceClient client,
+    DartDevelopmentServiceClient client,
     String stream, {
     bool cancelCoreStream = false,
   }) async {
@@ -189,10 +205,10 @@
         (!ddsCoreStreams.contains(stream) || cancelCoreStream)) {
       streamListeners.remove(stream);
       // Ensure the VM service hasn't shutdown.
-      if (dds._vmServiceClient.isClosed) {
+      if (dds.vmServiceClient.isClosed) {
         return;
       }
-      final result = await dds._vmServiceClient.sendRequest('streamCancel', {
+      final result = await dds.vmServiceClient.sendRequest('streamCancel', {
         'streamId': stream,
       });
       assert(result['type'] == 'Success');
@@ -202,7 +218,7 @@
   }
 
   /// Cleanup stream subscriptions for `client` when it has disconnected.
-  void clientDisconnect(_DartDevelopmentServiceClient client) {
+  void clientDisconnect(DartDevelopmentServiceClient client) {
     for (final streamId in streamListeners.keys.toList()) {
       streamCancel(client, streamId).catchError(
         (_) => null,
@@ -219,12 +235,12 @@
   static const kServiceStream = 'Service';
 
   static final kStreamAlreadySubscribedException =
-      _RpcErrorCodes.buildRpcException(
-    _RpcErrorCodes.kStreamAlreadySubscribed,
+      RpcErrorCodes.buildRpcException(
+    RpcErrorCodes.kStreamAlreadySubscribed,
   );
 
-  static final kStreamNotSubscribedException = _RpcErrorCodes.buildRpcException(
-    _RpcErrorCodes.kStreamNotSubscribed,
+  static final kStreamNotSubscribedException = RpcErrorCodes.buildRpcException(
+    RpcErrorCodes.kStreamNotSubscribed,
   );
 
   static const kDebugStream = 'Debug';
@@ -234,16 +250,16 @@
   static const kStderrStream = 'Stderr';
   static const kStdoutStream = 'Stdout';
 
-  static Map<String, _LoggingRepository> loggingRepositories = {};
+  static Map<String, LoggingRepository> loggingRepositories = {};
 
-  // Never cancel the Debug or Isolate stream as `_IsolateManager` requires
+  // Never cancel the Debug or Isolate stream as `IsolateManager` requires
   // them for isolate state notifications.
   static const isolateManagerStreams = <String>{
     kDebugStream,
     kIsolateStream,
   };
 
-  // Never cancel the logging and extension event streams as `_LoggingRepository`
+  // Never cancel the logging and extension event streams as `LoggingRepository`
   // requires them keep history.
   static const loggingRepositoryStreams = <String>{
     kExtensionStream,
@@ -258,6 +274,6 @@
     ...loggingRepositoryStreams,
   };
 
-  final _DartDevelopmentService dds;
-  final streamListeners = <String, List<_DartDevelopmentServiceClient>>{};
+  final DartDevelopmentServiceImpl dds;
+  final streamListeners = <String, List<DartDevelopmentServiceClient>>{};
 }
diff --git a/pkg/dds/lib/vm_service_extensions.dart b/pkg/dds/lib/vm_service_extensions.dart
new file mode 100644
index 0000000..069c737
--- /dev/null
+++ b/pkg/dds/lib/vm_service_extensions.dart
@@ -0,0 +1,84 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+
+import 'package:meta/meta.dart';
+import 'package:vm_service/src/vm_service.dart';
+
+extension DdsExtension on VmService {
+  static bool _factoriesRegistered = false;
+  static Version _ddsVersion;
+
+  /// The _getDartDevelopmentServiceVersion_ RPC is used to determine what version of
+  /// the Dart Development Service Protocol is served by a DDS instance.
+  ///
+  /// The result of this call is cached for subsequent invocations.
+  Future<Version> getDartDevelopmentServiceVersion() async {
+    if (_ddsVersion == null) {
+      _ddsVersion =
+          await _callHelper<Version>('getDartDevelopmentServiceVersion');
+    }
+    return _ddsVersion;
+  }
+
+  /// Retrieve the event history for `stream`.
+  ///
+  /// If `stream` does not have event history collected, a parameter error is
+  /// returned.
+  Future<StreamHistory> getStreamHistory(String stream) async {
+    if (!(await _versionCheck(1, 2))) {
+      throw UnimplementedError('getStreamHistory requires DDS version 1.2');
+    }
+    return _callHelper<StreamHistory>('getStreamHistory', args: {
+      'stream': stream,
+    });
+  }
+
+  Future<bool> _versionCheck(int major, int minor) async {
+    if (_ddsVersion == null) {
+      _ddsVersion = await getDartDevelopmentServiceVersion();
+    }
+    return ((_ddsVersion.major == major && _ddsVersion.minor >= minor) ||
+        (_ddsVersion.major > major));
+  }
+
+  Future<T> _callHelper<T>(String method,
+      {String isolateId, Map args = const {}}) {
+    if (!_factoriesRegistered) {
+      _registerFactories();
+    }
+    return callMethod(
+      method,
+      args: {
+        if (isolateId != null) 'isolateId': isolateId,
+        ...args,
+      },
+    ).then((e) => e as T);
+  }
+
+  static void _registerFactories() {
+    addTypeFactory('StreamHistory', StreamHistory.parse);
+    _factoriesRegistered = true;
+  }
+}
+
+/// A collection of historical [Event]s from some stream.
+class StreamHistory extends Response {
+  static StreamHistory parse(Map<String, dynamic> json) =>
+      json == null ? null : StreamHistory._fromJson(json);
+
+  StreamHistory({@required List<Event> history}) : _history = history;
+
+  StreamHistory._fromJson(Map<String, dynamic> json)
+      : _history = List<Event>.from(
+            createServiceObject(json['history'], const ['Event']) as List ??
+                []) {
+    type = json['type'];
+  }
+
+  /// Historical [Event]s for a stream.
+  List<Event> get history => UnmodifiableListView(_history);
+  final List<Event> _history;
+}
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index d0e85c6..27bf432 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,7 +3,7 @@
   A library used to spawn the Dart Developer Service, used to communicate with
   a Dart VM Service instance.
 
-version: 1.6.1
+version: 1.7.0
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
@@ -20,10 +20,10 @@
   shelf_web_socket: ^0.2.3
   sse: ^3.5.0
   stream_channel: ^2.0.0
+  vm_service: ^5.0.0
   web_socket_channel: ^1.1.0
 
 dev_dependencies:
   shelf_static: ^0.2.8
   test: ^1.0.0
-  vm_service: ^5.0.0
   webdriver: ^2.1.2
diff --git a/pkg/dds/test/common/test_helper.dart b/pkg/dds/test/common/test_helper.dart
index 365ffc4..cda9ce2 100644
--- a/pkg/dds/test/common/test_helper.dart
+++ b/pkg/dds/test/common/test_helper.dart
@@ -7,7 +7,10 @@
 
 Uri remoteVmServiceUri;
 
-Future<Process> spawnDartProcess(String script) async {
+Future<Process> spawnDartProcess(
+  String script, {
+  bool pauseOnStart = true,
+}) async {
   final executable = Platform.executable;
   final tmpDir = await Directory.systemTemp.createTemp('dart_service');
   final serviceInfoUri = tmpDir.uri.resolve('service_info.json');
@@ -16,7 +19,7 @@
   final arguments = [
     '--disable-dart-dev',
     '--observe=0',
-    '--pause-isolates-on-start',
+    if (pauseOnStart) '--pause-isolates-on-start',
     '--write-service-info=$serviceInfoUri',
     ...Platform.executableArguments,
     Platform.script.resolve(script).toString(),
diff --git a/pkg/dds/test/get_stream_history_script.dart b/pkg/dds/test/get_stream_history_script.dart
new file mode 100644
index 0000000..68dafec
--- /dev/null
+++ b/pkg/dds/test/get_stream_history_script.dart
@@ -0,0 +1,8 @@
+import 'dart:developer';
+
+void main() {
+  for (int i = 0; i < 10; ++i) {
+    log(i.toString());
+  }
+  debugger();
+}
diff --git a/pkg/dds/test/get_stream_history_test.dart b/pkg/dds/test/get_stream_history_test.dart
new file mode 100644
index 0000000..c2ae8f9
--- /dev/null
+++ b/pkg/dds/test/get_stream_history_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:dds/dds.dart';
+import 'package:dds/vm_service_extensions.dart';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service_io.dart';
+import 'common/test_helper.dart';
+
+void main() {
+  Process process;
+  DartDevelopmentService dds;
+
+  setUp(() async {
+    process = await spawnDartProcess('get_stream_history_script.dart',
+        pauseOnStart: false);
+  });
+
+  tearDown(() async {
+    await dds?.shutdown();
+    process?.kill();
+    dds = null;
+    process = null;
+  });
+
+  test('getStreamHistory returns log history', () async {
+    dds = await DartDevelopmentService.startDartDevelopmentService(
+      remoteVmServiceUri,
+    );
+    expect(dds.isRunning, true);
+    final service = await vmServiceConnectUri(dds.wsUri.toString());
+    final result = await service.getStreamHistory('Logging');
+    expect(result, isNotNull);
+    expect(result, isA<StreamHistory>());
+    expect(result.history.length, 10);
+  });
+}
diff --git a/pkg/dds/test/handles_client_disconnect_state_error_test.dart b/pkg/dds/test/handles_client_disconnect_state_error_test.dart
index f500711..0b93db4 100644
--- a/pkg/dds/test/handles_client_disconnect_state_error_test.dart
+++ b/pkg/dds/test/handles_client_disconnect_state_error_test.dart
@@ -5,6 +5,7 @@
 import 'dart:async';
 
 import 'package:dds/dds.dart';
+import 'package:dds/src/dds_impl.dart';
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 import 'package:pedantic/pedantic.dart';
 import 'package:test/test.dart';
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 0aa4cce..eabd9f8 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1880,8 +1880,8 @@
     if (member.isGetter) return const [];
 
     var enclosingClass = member.enclosingClass;
-    var superMember = member.forwardingStubSuperTarget ??
-        member.forwardingStubInterfaceTarget;
+    var superMember = member.concreteForwardingStubTarget ??
+        member.abstractForwardingStubTarget;
 
     if (superMember == null) return const [];
 
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index ea0eade..5e403c2 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -260,7 +260,7 @@
           fieldModel.isVirtual(field) ||
           field.isCovariant ||
           field.isGenericCovariantImpl) {
-        virtualFields[field] = js_ast.TemporaryId(name);
+        virtualFields[field] = js_ast.TemporaryId(js_ast.toJSIdentifier(name));
       }
     }
   }
diff --git a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
index 0ee38ea..09c1b79 100644
--- a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
@@ -79,7 +79,8 @@
         : (member is Procedure)
             ? member.isNoSuchMethodForwarder ||
                 member.isAbstract ||
-                member.isForwardingStub
+                member.isForwardingStub ||
+                member.stubKind == ProcedureStubKind.ConcreteMixinStub
             : (member is Field)
                 ? member.name.name.contains(redirectingName)
                 : false;
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index deb42c7..22df841 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -17,9 +17,9 @@
         IntLiteral,
         InterfaceType,
         ListLiteral,
-        Procedure,
         ProcedureKind,
         PropertyGet,
+        Reference,
         ReturnStatement,
         StaticGet,
         StringLiteral,
@@ -173,17 +173,29 @@
     ///   String toString() => _name;
     /// }
     Constructor constructorReference;
-    Procedure toStringReference;
-    Field indexReference;
-    Field _nameReference;
-    Field valuesReference;
+    Reference toStringReference;
+    Reference indexGetterReference;
+    Reference indexSetterReference;
+    Reference _nameGetterReference;
+    Reference _nameSetterReference;
+    Reference valuesGetterReference;
+    Reference valuesSetterReference;
     if (referencesFrom != null) {
       constructorReference = referencesFromIndexed.lookupConstructor("");
       toStringReference =
-          referencesFromIndexed.lookupProcedureNotSetter("toString");
-      indexReference = referencesFromIndexed.lookupField("index");
-      _nameReference = referencesFromIndexed.lookupField("_name");
-      valuesReference = referencesFromIndexed.lookupField("values");
+          referencesFromIndexed.lookupGetterReference("toString");
+      indexGetterReference =
+          referencesFromIndexed.lookupGetterReference("index");
+      indexSetterReference =
+          referencesFromIndexed.lookupSetterReference("index");
+      _nameGetterReference =
+          referencesFromIndexed.lookupGetterReference("_name");
+      _nameSetterReference =
+          referencesFromIndexed.lookupSetterReference("_name");
+      valuesGetterReference =
+          referencesFromIndexed.lookupGetterReference("values");
+      valuesSetterReference =
+          referencesFromIndexed.lookupSetterReference("values");
     }
 
     members["index"] = new SourceFieldBuilder(
@@ -195,10 +207,8 @@
         parent,
         charOffset,
         charOffset,
-        indexReference,
-        null,
-        null,
-        null);
+        fieldGetterReference: indexGetterReference,
+        fieldSetterReference: indexSetterReference);
     members["_name"] = new SourceFieldBuilder(
         null,
         stringType,
@@ -208,10 +218,8 @@
         parent,
         charOffset,
         charOffset,
-        _nameReference,
-        null,
-        null,
-        null);
+        fieldGetterReference: _nameGetterReference,
+        fieldSetterReference: _nameSetterReference);
     ConstructorBuilder constructorBuilder = new ConstructorBuilderImpl(
         null,
         constMask,
@@ -240,10 +248,8 @@
         parent,
         charOffset,
         charOffset,
-        valuesReference,
-        null,
-        null,
-        null);
+        fieldGetterReference: valuesGetterReference,
+        fieldSetterReference: valuesSetterReference);
     members["values"] = valuesBuilder;
     constructorBuilder
       ..registerInitializedField(members["_name"])
@@ -303,10 +309,10 @@
               name.length,
               parent.fileUri);
         }
-        Field fieldReference;
-        if (referencesFrom != null) {
-          fieldReference = referencesFromIndexed.lookupField(name);
-        }
+        Reference getterReference =
+            referencesFromIndexed?.lookupGetterReference(name);
+        Reference setterReference =
+            referencesFromIndexed?.lookupSetterReference(name);
         FieldBuilder fieldBuilder = new SourceFieldBuilder(
             metadata,
             selfType,
@@ -316,10 +322,8 @@
             parent,
             enumConstantInfo.charOffset,
             enumConstantInfo.charOffset,
-            fieldReference,
-            null,
-            null,
-            null);
+            fieldGetterReference: getterReference,
+            fieldSetterReference: setterReference);
         metadataCollector?.setDocumentationComment(
             fieldBuilder.field, documentationComment);
         members[name] = fieldBuilder..next = existing;
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 113198e..a56f41c 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -117,10 +117,12 @@
       SourceLibraryBuilder libraryBuilder,
       int charOffset,
       int charEndOffset,
-      Field reference,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom)
+      {Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference})
       : super(libraryBuilder, charOffset) {
     Uri fileUri = libraryBuilder?.fileUri;
     // If in mixed mode, late lowerings cannot use `null` as a sentinel on
@@ -128,8 +130,8 @@
     late_lowering.IsSetStrategy isSetStrategy =
         late_lowering.computeIsSetStrategy(libraryBuilder);
     if (isAbstract || isExternal) {
-      _fieldEncoding = new AbstractOrExternalFieldEncoding(fileUri, charOffset,
-          charEndOffset, getterReferenceFrom, setterReferenceFrom,
+      _fieldEncoding = new AbstractOrExternalFieldEncoding(
+          fileUri, charOffset, charEndOffset, getterReference, setterReference,
           isAbstract: isAbstract,
           isExternal: isExternal,
           isFinal: isFinal,
@@ -147,10 +149,12 @@
               fileUri,
               charOffset,
               charEndOffset,
-              reference,
-              lateIsSetReferenceFrom,
-              getterReferenceFrom,
-              setterReferenceFrom,
+              fieldGetterReference,
+              fieldSetterReference,
+              lateIsSetGetterReference,
+              lateIsSetSetterReference,
+              getterReference,
+              setterReference,
               isCovariant,
               isSetStrategy);
         } else {
@@ -159,10 +163,12 @@
               fileUri,
               charOffset,
               charEndOffset,
-              reference,
-              lateIsSetReferenceFrom,
-              getterReferenceFrom,
-              setterReferenceFrom,
+              fieldGetterReference,
+              fieldSetterReference,
+              lateIsSetGetterReference,
+              lateIsSetSetterReference,
+              getterReference,
+              setterReference,
               isCovariant,
               isSetStrategy);
         }
@@ -173,10 +179,12 @@
               fileUri,
               charOffset,
               charEndOffset,
-              reference,
-              lateIsSetReferenceFrom,
-              getterReferenceFrom,
-              setterReferenceFrom,
+              fieldGetterReference,
+              fieldSetterReference,
+              lateIsSetGetterReference,
+              lateIsSetSetterReference,
+              getterReference,
+              setterReference,
               isCovariant,
               isSetStrategy);
         } else {
@@ -185,10 +193,12 @@
               fileUri,
               charOffset,
               charEndOffset,
-              reference,
-              lateIsSetReferenceFrom,
-              getterReferenceFrom,
-              setterReferenceFrom,
+              fieldGetterReference,
+              fieldSetterReference,
+              lateIsSetGetterReference,
+              lateIsSetSetterReference,
+              getterReference,
+              setterReference,
               isCovariant,
               isSetStrategy);
         }
@@ -204,10 +214,12 @@
             fileUri,
             charOffset,
             charEndOffset,
-            reference,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
       } else {
@@ -216,19 +228,29 @@
             fileUri,
             charOffset,
             charEndOffset,
-            reference,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
       }
     } else {
-      assert(lateIsSetReferenceFrom == null);
-      assert(getterReferenceFrom == null);
-      assert(setterReferenceFrom == null);
-      _fieldEncoding = new RegularFieldEncoding(fileUri, charOffset,
-          charEndOffset, reference, library.isNonNullableByDefault);
+      assert(lateIsSetGetterReference == null);
+      assert(lateIsSetSetterReference == null);
+      assert(getterReference == null);
+      assert(setterReference == null);
+      _fieldEncoding = new RegularFieldEncoding(
+          fileUri, charOffset, charEndOffset,
+          isFinal: isFinal,
+          isConst: isConst,
+          isLate: isLate,
+          hasInitializer: hasInitializer,
+          isNonNullableByDefault: library.isNonNullableByDefault,
+          getterReference: fieldGetterReference,
+          setterReference: fieldSetterReference);
     }
   }
 
@@ -588,11 +610,33 @@
   Field _field;
 
   RegularFieldEncoding(Uri fileUri, int charOffset, int charEndOffset,
-      Field reference, bool isNonNullableByDefault) {
-    _field = new Field(null,
-        fileUri: fileUri,
-        getterReference: reference?.getterReference,
-        setterReference: reference?.setterReference)
+      {bool isFinal,
+      bool isConst,
+      bool isLate,
+      bool hasInitializer,
+      bool isNonNullableByDefault,
+      Reference getterReference,
+      Reference setterReference}) {
+    assert(isFinal != null);
+    assert(isConst != null);
+    assert(isLate != null);
+    assert(hasInitializer != null);
+    bool isImmutable =
+        isLate ? (isFinal && hasInitializer) : (isFinal || isConst);
+    _field = isImmutable
+        ? new Field.immutable(null,
+            isFinal: isFinal,
+            isConst: isConst,
+            isLate: isLate,
+            fileUri: fileUri,
+            getterReference: getterReference)
+        : new Field.mutable(null,
+            isFinal: isFinal,
+            isLate: isLate,
+            fileUri: fileUri,
+            getterReference: getterReference,
+            setterReference: setterReference);
+    _field
       ..fileOffset = charOffset
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = isNonNullableByDefault;
@@ -630,10 +674,7 @@
   @override
   void build(
       SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
-    _field
-      ..isCovariant = fieldBuilder.isCovariant
-      ..isFinal = fieldBuilder.isFinal
-      ..isConst = fieldBuilder.isConst;
+    _field..isCovariant = fieldBuilder.isCovariant;
     String fieldName;
     if (fieldBuilder.isExtensionMember) {
       ExtensionBuilder extension = fieldBuilder.parent;
@@ -641,8 +682,6 @@
           FieldNameType.Field, fieldBuilder.name,
           isExtensionMethod: true, extensionName: extension.name);
       _field
-        ..hasImplicitGetter = false
-        ..hasImplicitSetter = false
         ..isStatic = true
         ..isExtensionMember = true;
     } else {
@@ -654,11 +693,6 @@
           FieldNameType.Field, fieldBuilder.name,
           isInstanceMember: isInstanceMember, className: className);
       _field
-        ..hasImplicitGetter = isInstanceMember
-        ..hasImplicitSetter = isInstanceMember &&
-            !fieldBuilder.isConst &&
-            (!fieldBuilder.isFinal ||
-                (fieldBuilder.isLate && !fieldBuilder.hasInitializer))
         ..isStatic = !isInstanceMember
         ..isExtensionMember = false;
     }
@@ -795,10 +829,12 @@
       Uri fileUri,
       int charOffset,
       int charEndOffset,
-      Field referenceFrom,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom,
+      Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference,
       bool isCovariant,
       late_lowering.IsSetStrategy isSetStrategy)
       : fileOffset = charOffset,
@@ -806,10 +842,10 @@
         _isSetStrategy = isSetStrategy,
         _forceIncludeIsSetField =
             isSetStrategy == late_lowering.IsSetStrategy.forceUseIsSetField {
-    _field = new Field(null,
+    _field = new Field.mutable(null,
         fileUri: fileUri,
-        getterReference: referenceFrom?.getterReference,
-        setterReference: referenceFrom?.setterReference)
+        getterReference: fieldGetterReference,
+        setterReference: fieldSetterReference)
       ..fileOffset = charOffset
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = true
@@ -821,10 +857,10 @@
         break;
       case late_lowering.IsSetStrategy.forceUseIsSetField:
       case late_lowering.IsSetStrategy.useIsSetFieldOrNull:
-        _lateIsSetField = new Field(null,
+        _lateIsSetField = new Field.mutable(null,
             fileUri: fileUri,
-            getterReference: lateIsSetReferenceFrom?.getterReference,
-            setterReference: lateIsSetReferenceFrom?.setterReference)
+            getterReference: lateIsSetGetterReference,
+            setterReference: lateIsSetSetterReference)
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset
           ..isNonNullableByDefault = true
@@ -838,11 +874,11 @@
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset,
         fileUri: fileUri,
-        reference: getterReferenceFrom?.reference)
+        reference: getterReference)
       ..fileOffset = charOffset
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = true;
-    _lateSetter = _createSetter(name, fileUri, charOffset, setterReferenceFrom,
+    _lateSetter = _createSetter(name, fileUri, charOffset, setterReference,
         isCovariant: isCovariant);
   }
 
@@ -951,7 +987,7 @@
       Expression initializer, bool useNewMethodInvocationEncoding);
 
   Procedure _createSetter(
-      String name, Uri fileUri, int charOffset, Procedure referenceFrom,
+      String name, Uri fileUri, int charOffset, Reference reference,
       {bool isCovariant}) {
     assert(isCovariant != null);
     VariableDeclaration parameter = new VariableDeclaration(null)
@@ -965,7 +1001,7 @@
           ..fileOffset = charOffset
           ..fileEndOffset = fileEndOffset,
         fileUri: fileUri,
-        reference: referenceFrom?.reference)
+        reference: reference)
       ..fileOffset = charOffset
       ..fileEndOffset = fileEndOffset
       ..isNonNullableByDefault = true;
@@ -1042,16 +1078,12 @@
       ExtensionBuilder extension = fieldBuilder.parent;
       extensionName = extension.name;
       _field
-        ..hasImplicitGetter = false
-        ..hasImplicitSetter = false
         ..isStatic = true
         ..isExtensionMember = isExtensionMember;
       isInstanceMember = false;
     } else {
       isInstanceMember = !fieldBuilder.isStatic && !fieldBuilder.isTopLevel;
       _field
-        ..hasImplicitGetter = isInstanceMember
-        ..hasImplicitSetter = isInstanceMember
         ..isStatic = !isInstanceMember
         ..isExtensionMember = false;
       if (isInstanceMember) {
@@ -1079,8 +1111,6 @@
                 isSynthesized: true),
             libraryBuilder.library)
         ..isStatic = !isInstanceMember
-        ..hasImplicitGetter = isInstanceMember
-        ..hasImplicitSetter = isInstanceMember
         ..isStatic = _field.isStatic
         ..isExtensionMember = isExtensionMember;
     }
@@ -1211,10 +1241,12 @@
       Uri fileUri,
       int charOffset,
       int charEndOffset,
-      Field referenceFrom,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom,
+      Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference,
       bool isCovariant,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
@@ -1222,10 +1254,12 @@
             fileUri,
             charOffset,
             charEndOffset,
-            referenceFrom,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
 }
@@ -1237,10 +1271,12 @@
       Uri fileUri,
       int charOffset,
       int charEndOffset,
-      Field referenceFrom,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom,
+      Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference,
       bool isCovariant,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
@@ -1248,10 +1284,12 @@
             fileUri,
             charOffset,
             charEndOffset,
-            referenceFrom,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
 
@@ -1278,10 +1316,12 @@
       Uri fileUri,
       int charOffset,
       int charEndOffset,
-      Field referenceFrom,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom,
+      Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference,
       bool isCovariant,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
@@ -1289,10 +1329,12 @@
             fileUri,
             charOffset,
             charEndOffset,
-            referenceFrom,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
 
@@ -1320,10 +1362,12 @@
       Uri fileUri,
       int charOffset,
       int charEndOffset,
-      Field referenceFrom,
-      Field lateIsSetReferenceFrom,
-      Procedure getterReferenceFrom,
-      Procedure setterReferenceFrom,
+      Reference fieldGetterReference,
+      Reference fieldSetterReference,
+      Reference lateIsSetGetterReference,
+      Reference lateIsSetSetterReference,
+      Reference getterReference,
+      Reference setterReference,
       bool isCovariant,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
@@ -1331,10 +1375,12 @@
             fileUri,
             charOffset,
             charEndOffset,
-            referenceFrom,
-            lateIsSetReferenceFrom,
-            getterReferenceFrom,
-            setterReferenceFrom,
+            fieldGetterReference,
+            fieldSetterReference,
+            lateIsSetGetterReference,
+            lateIsSetSetterReference,
+            getterReference,
+            setterReference,
             isCovariant,
             isSetStrategy);
   @override
@@ -1355,7 +1401,7 @@
 
   @override
   Procedure _createSetter(
-          String name, Uri fileUri, int charOffset, Procedure referenceFrom,
+          String name, Uri fileUri, int charOffset, Reference reference,
           {bool isCovariant}) =>
       null;
 
@@ -1531,7 +1577,7 @@
   Procedure _setter;
 
   AbstractOrExternalFieldEncoding(Uri fileUri, int charOffset,
-      int charEndOffset, Procedure getterReference, Procedure setterReference,
+      int charEndOffset, Reference getterReference, Reference setterReference,
       {this.isAbstract,
       this.isExternal,
       bool isFinal,
@@ -1543,7 +1589,7 @@
         assert(isCovariant != null),
         assert(isNonNullableByDefault != null) {
     _getter = new Procedure(null, ProcedureKind.Getter, new FunctionNode(null),
-        fileUri: fileUri, reference: getterReference?.reference)
+        fileUri: fileUri, reference: getterReference)
       ..fileOffset = charOffset
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = isNonNullableByDefault;
@@ -1560,7 +1606,7 @@
             ..fileOffset = charOffset
             ..fileEndOffset = charEndOffset,
           fileUri: fileUri,
-          reference: setterReference?.reference)
+          reference: setterReference)
         ..fileOffset = charOffset
         ..fileEndOffset = charEndOffset
         ..isNonNullableByDefault = isNonNullableByDefault;
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 4857e5e..20ed8f7 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -97,13 +97,12 @@
       int charOffset,
       this.charOpenParenOffset,
       int charEndOffset,
-      Procedure referenceFrom,
+      Reference procedureReference,
       this.isExtensionInstanceMember,
       [String nativeMethodName])
       : _procedure = new Procedure(
             null, isExtensionInstanceMember ? ProcedureKind.Method : kind, null,
-            fileUri: compilationUnit.fileUri,
-            reference: referenceFrom?.reference)
+            fileUri: compilationUnit.fileUri, reference: procedureReference)
           ..startFileOffset = startCharOffset
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset
@@ -202,7 +201,7 @@
 }
 
 class SourceProcedureBuilder extends ProcedureBuilderImpl {
-  final Procedure _tearOffReferenceFrom;
+  final Reference _tearOffReference;
 
   /// If this is an extension instance method then [_extensionTearOff] holds
   /// the synthetically created tear off function.
@@ -229,8 +228,8 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      Procedure referenceFrom,
-      this._tearOffReferenceFrom,
+      Reference procedureReference,
+      this._tearOffReference,
       AsyncMarker asyncModifier,
       bool isExtensionInstanceMember,
       [String nativeMethodName])
@@ -247,7 +246,7 @@
             charOffset,
             charOpenParenOffset,
             charEndOffset,
-            referenceFrom,
+            procedureReference,
             isExtensionInstanceMember,
             nativeMethodName) {
     this.asyncModifier = asyncModifier;
@@ -568,9 +567,7 @@
   Procedure get extensionTearOff {
     if (isExtensionInstanceMember && kind == ProcedureKind.Method) {
       _extensionTearOff ??= new Procedure(null, ProcedureKind.Method, null,
-          isStatic: true,
-          isExtensionMember: true,
-          reference: _tearOffReferenceFrom?.reference)
+          isStatic: true, isExtensionMember: true, reference: _tearOffReference)
         ..isNonNullableByDefault = library.isNonNullableByDefault;
     }
     return _extensionTearOff;
@@ -665,7 +662,7 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      Procedure referenceFrom,
+      Reference reference,
       [String nativeMethodName,
       this.redirectionTarget])
       : super(
@@ -681,7 +678,7 @@
             charOffset,
             charOpenParenOffset,
             charEndOffset,
-            referenceFrom,
+            reference,
             /* isExtensionInstanceMember = */ false,
             nativeMethodName);
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 56bc916..9bd74a8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -1620,6 +1620,7 @@
               result = InheritedImplementationInterfaceConflict.combined(
                   classBuilder,
                   mixedInMember,
+                  /*isSuperClassMemberMixedIn = */ true,
                   extendedMember,
                   forSetter,
                   shouldModifyKernel,
@@ -1637,6 +1638,21 @@
           } else {
             if (mixedInMember.isAbstract) {
               recordAbstractMember(mixedInMember);
+            } else {
+              if (!mixedInMember.isSynthesized) {
+                mixedInMember = new InterfaceConflict(
+                    classBuilder,
+                    mixedInMember,
+                    /*_isSuperClassMemberMixedIn = */ true,
+                    [mixedInMember],
+                    mixedInMember.isProperty,
+                    forSetter,
+                    shouldModifyKernel,
+                    mixedInMember.isAbstract,
+                    mixedInMember.name,
+                    isImplicitlyAbstract: mixedInMember.isAbstract);
+                hierarchy.registerMemberComputation(mixedInMember);
+              }
             }
             return mixedInMember;
           }
@@ -1659,6 +1675,8 @@
             if (!extendedMember.isSynthesized) {
               extendedMember = new InterfaceConflict(
                   classBuilder,
+                  extendedMember.concrete,
+                  /*_isSuperClassMemberMixedIn = */ false,
                   [extendedMember],
                   extendedMember.isProperty,
                   forSetter,
@@ -1750,6 +1768,7 @@
                   result = InheritedImplementationInterfaceConflict.combined(
                       classBuilder,
                       classMember,
+                      /* _isSuperClassMemberMixedIn = */ false,
                       interfaceMember,
                       forSetter,
                       shouldModifyKernel);
@@ -1775,6 +1794,8 @@
                 if (!interfaceMember.isSynthesized) {
                   interfaceMember = new InterfaceConflict(
                       classBuilder,
+                      null,
+                      /*_isSuperClassMemberMixedIn = */ false,
                       [interfaceMember],
                       interfaceMember.isProperty,
                       forSetter,
@@ -2580,6 +2601,7 @@
   Member _member;
   Covariance _covariance;
   final ClassMember concreteMember;
+  final bool _isSuperClassMemberMixedIn;
 
   @override
   final bool isInheritableConflict;
@@ -2587,6 +2609,7 @@
   InheritedImplementationInterfaceConflict(
       ClassBuilder parent,
       this.concreteMember,
+      this._isSuperClassMemberMixedIn,
       List<ClassMember> declarations,
       bool isProperty,
       bool isSetter,
@@ -2623,8 +2646,16 @@
           }
         }
       }
-      InterfaceConflict interfaceConflict = new InterfaceConflict(classBuilder,
-          declarations, isProperty, isSetter, modifyKernel, isAbstract, name);
+      InterfaceConflict interfaceConflict = new InterfaceConflict(
+          classBuilder,
+          concreteMember,
+          /*_isSuperClassMemberMixedIn = */ _isSuperClassMemberMixedIn,
+          declarations,
+          isProperty,
+          isSetter,
+          modifyKernel,
+          isAbstract,
+          name);
       _member = interfaceConflict.getMember(hierarchy);
       _covariance = interfaceConflict.getCovariance(hierarchy);
     }
@@ -2646,8 +2677,16 @@
   DelayedMember withParent(ClassBuilder parent) {
     return parent == this.classBuilder
         ? this
-        : new InheritedImplementationInterfaceConflict(parent, concreteMember,
-            [this], isProperty, isSetter, modifyKernel, isAbstract, name);
+        : new InheritedImplementationInterfaceConflict(
+            parent,
+            concreteMember,
+            /*_isSuperClassMemberMixedIn = */ false,
+            [this],
+            isProperty,
+            isSetter,
+            modifyKernel,
+            isAbstract,
+            name);
   }
 
   @override
@@ -2659,6 +2698,7 @@
   static ClassMember combined(
       ClassBuilder parent,
       ClassMember concreteImplementation,
+      bool isSuperClassMemberMixedIn,
       ClassMember other,
       bool isSetter,
       bool createForwarders,
@@ -2683,6 +2723,7 @@
       return new InheritedImplementationInterfaceConflict(
           parent,
           concreteImplementation.concrete,
+          isSuperClassMemberMixedIn,
           declarations,
           concreteImplementation.isProperty,
           isSetter,
@@ -2695,10 +2736,14 @@
 }
 
 class InterfaceConflict extends DelayedMember {
+  final ClassMember _superClassMember;
+  final bool _isSuperClassMemberMixedIn;
   final bool isImplicitlyAbstract;
 
   InterfaceConflict(
       ClassBuilder parent,
+      this._superClassMember,
+      this._isSuperClassMemberMixedIn,
       List<ClassMember> declarations,
       bool isProperty,
       bool isSetter,
@@ -2778,8 +2823,9 @@
           "ForwardingNode($classBuilder, "
           "${combinedMemberSignature.canonicalMember}, "
           "$declarations, $kind)");
-      Member stub =
-          new ForwardingNode(combinedMemberSignature, kind).finalize();
+      Member stub = new ForwardingNode(combinedMemberSignature, kind,
+              _superClassMember, _isSuperClassMemberMixedIn)
+          .finalize();
       if (stub != null && classBuilder.cls == stub.enclosingClass) {
         if (stub is Procedure) {
           classBuilder.cls.addProcedure(stub);
@@ -2835,8 +2881,16 @@
   DelayedMember withParent(ClassBuilder parent) {
     return parent == this.classBuilder
         ? this
-        : new InterfaceConflict(parent, [this], isProperty, isSetter,
-            modifyKernel, isAbstract, name,
+        : new InterfaceConflict(
+            parent,
+            _superClassMember,
+            /*_isSuperClassMemberMixedIn = */ false,
+            [this],
+            isProperty,
+            isSetter,
+            modifyKernel,
+            isAbstract,
+            name,
             isImplicitlyAbstract: isImplicitlyAbstract);
   }
 
@@ -2866,6 +2920,8 @@
     } else {
       return new InterfaceConflict(
           parent,
+          null,
+          /*_isSuperClassMemberMixedIn = */ false,
           declarations,
           a.isProperty,
           isSetter,
@@ -2930,7 +2986,9 @@
                 new CombinedClassMemberSignature.internal(
                     hierarchy, classBuilder, 1, declarations,
                     forSetter: isSetter),
-                kind)
+                kind,
+                concrete,
+                /*_isSuperClassMemberMixedIn =*/ false)
             .finalize();
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 5924d4a..fa09a80 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -28,6 +28,8 @@
 abstract class CombinedMemberSignatureBase<T> {
   ClassHierarchyBase get hierarchy;
 
+  Name get name;
+
   /// The target class for the combined member signature.
   ///
   /// The [_memberTypes] are computed in terms of each member is inherited into
@@ -156,11 +158,9 @@
             candidateIndex++) {
           DartType candidateType = getMemberType(candidateIndex);
           if (!_isMoreSpecific(bestTypeSoFar, candidateType, forSetter)) {
-            if (!shouldOverrideProblemBeOverlooked(classBuilder)) {
-              bestSoFarIndex = null;
-              bestTypeSoFar = null;
-              _mutualSubtypes = null;
-            }
+            int favoredIndex = getOverlookedOverrideProblemChoice(classBuilder);
+            bestSoFarIndex = favoredIndex;
+            _mutualSubtypes = null;
             break;
           }
         }
@@ -508,10 +508,10 @@
       {bool copyLocation}) {
     assert(copyLocation != null);
     Class enclosingClass = classBuilder.cls;
-    Procedure referenceFrom;
+    Reference reference;
     if (classBuilder.referencesFromIndexed != null) {
-      referenceFrom = classBuilder.referencesFromIndexed
-          .lookupProcedureNotSetter(member.name.text);
+      reference = classBuilder.referencesFromIndexed
+          .lookupGetterReference(member.name.text);
     }
     Uri fileUri;
     int startFileOffset;
@@ -531,7 +531,7 @@
       new FunctionNode(null, returnType: type),
       isAbstract: true,
       fileUri: fileUri,
-      reference: referenceFrom?.reference,
+      reference: reference,
       isSynthetic: true,
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: member.memberSignatureOrigin ?? member,
@@ -554,10 +554,10 @@
     assert(isGenericCovariantImpl != null);
     assert(copyLocation != null);
     Class enclosingClass = classBuilder.cls;
-    Procedure referenceFrom;
+    Reference reference;
     if (classBuilder.referencesFromIndexed != null) {
-      referenceFrom = classBuilder.referencesFromIndexed
-          .lookupProcedureSetter(member.name.text);
+      reference = classBuilder.referencesFromIndexed
+          .lookupSetterReference(member.name.text);
     }
     Uri fileUri;
     int startFileOffset;
@@ -583,7 +583,7 @@
           ]),
       isAbstract: true,
       fileUri: fileUri,
-      reference: referenceFrom?.reference,
+      reference: reference,
       isSynthetic: true,
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: member.memberSignatureOrigin ?? member,
@@ -598,11 +598,8 @@
       {bool copyLocation}) {
     assert(copyLocation != null);
     Class enclosingClass = classBuilder.cls;
-    Procedure referenceFrom;
-    if (classBuilder.referencesFromIndexed != null) {
-      referenceFrom = classBuilder.referencesFromIndexed
-          .lookupProcedureNotSetter(procedure.name.text);
-    }
+    Reference reference = classBuilder.referencesFromIndexed
+        ?.lookupGetterReference(procedure.name.text);
     Uri fileUri;
     int startFileOffset;
     int fileOffset;
@@ -659,7 +656,7 @@
           requiredParameterCount: function.requiredParameterCount),
       isAbstract: true,
       fileUri: fileUri,
-      reference: referenceFrom?.reference,
+      reference: reference,
       isSynthetic: true,
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: procedure.memberSignatureOrigin ?? procedure,
@@ -713,9 +710,11 @@
 class CombinedClassMemberSignature
     extends CombinedMemberSignatureBase<ClassMember> {
   /// The class hierarchy builder used for building this class.
+  @override
   final ClassHierarchyBuilder hierarchy;
 
   /// The list of the members inherited into or overridden in [classBuilder].
+  @override
   final List<ClassMember> members;
 
   /// Creates a [CombinedClassMemberSignature] whose canonical member is already
@@ -736,8 +735,13 @@
       {bool forSetter})
       : super(classBuilder, forSetter: forSetter);
 
+  @override
+  Name get name => members.first.name;
+
+  @override
   Types get _types => hierarchy.types;
 
+  @override
   Member _getMember(int index) {
     ClassMember candidate = members[index];
     Member target = candidate.getMember(hierarchy);
@@ -776,6 +780,9 @@
         super(classBuilder, forSetter: forSetter);
 
   @override
+  Name get name => members.first.name;
+
+  @override
   Member _getMember(int index) => members[index];
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 9ee07dd..3bb758d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -36,7 +36,12 @@
 
   final ProcedureKind kind;
 
-  ForwardingNode(this._combinedMemberSignature, this.kind);
+  final ClassMember _superClassMember;
+
+  final bool _isSuperClassMemberMixedIn;
+
+  ForwardingNode(this._combinedMemberSignature, this.kind,
+      this._superClassMember, this._isSuperClassMemberMixedIn);
 
   /// Finishes handling of this node by propagating covariance and creating
   /// forwarding stubs if necessary.
@@ -58,7 +63,11 @@
     Member interfaceMember =
         canonicalMember.getMember(_combinedMemberSignature.hierarchy);
 
-    if (_combinedMemberSignature.members.length == 1) {
+    // TODO(johnniwinther): Support abstract mixin stubs.
+    bool needMixinStub =
+        classBuilder.isMixinApplication && _isSuperClassMemberMixedIn;
+
+    if (_combinedMemberSignature.members.length == 1 && !needMixinStub) {
       // Covariance can only come from [interfaceMember] so we never need a
       // forwarding stub.
       if (_combinedMemberSignature.neededLegacyErasure) {
@@ -81,27 +90,51 @@
             _combinedMemberSignature.needsCovarianceMerging;
     bool stubNeeded = cannotReuseExistingMember ||
         (canonicalMember.classBuilder != classBuilder &&
-            needsTypeOrCovarianceUpdate);
+            needsTypeOrCovarianceUpdate) ||
+        needMixinStub;
     if (stubNeeded) {
       Procedure stub = _combinedMemberSignature.createMemberFromSignature(
           copyLocation: false);
-      if (_combinedMemberSignature.needsCovarianceMerging ||
-          _combinedMemberSignature.needsSuperImpl) {
+      bool needsForwardingStub =
+          _combinedMemberSignature.needsCovarianceMerging ||
+              _combinedMemberSignature.needsSuperImpl;
+      if (needsForwardingStub || needMixinStub) {
+        ProcedureStubKind stubKind;
+        if (needsForwardingStub) {
+          stubKind = ProcedureStubKind.AbstractForwardingStub;
+        } else {
+          stubKind = ProcedureStubKind.AbstractMixinStub;
+        }
+
         // This is a forward stub.
         Member finalTarget;
-        if (interfaceMember is Procedure && interfaceMember.isForwardingStub) {
-          finalTarget = interfaceMember.forwardingStubInterfaceTarget;
+        if (interfaceMember is Procedure) {
+          switch (interfaceMember.stubKind) {
+            case ProcedureStubKind.Regular:
+            case ProcedureStubKind.NoSuchMethodForwarder:
+              finalTarget = interfaceMember;
+              break;
+            case ProcedureStubKind.AbstractForwardingStub:
+            case ProcedureStubKind.ConcreteForwardingStub:
+            case ProcedureStubKind.AbstractMixinStub:
+            case ProcedureStubKind.ConcreteMixinStub:
+            case ProcedureStubKind.MemberSignature:
+              finalTarget = interfaceMember.stubTarget;
+              break;
+          }
         } else {
-          finalTarget =
-              interfaceMember.memberSignatureOrigin ?? interfaceMember;
+          finalTarget = interfaceMember;
         }
-        stub.stubKind = ProcedureStubKind.ForwardingStub;
+        stub.stubKind = stubKind;
         stub.stubTarget = finalTarget;
-        if (_combinedMemberSignature.needsSuperImpl) {
+        if (_combinedMemberSignature.needsSuperImpl ||
+            (needMixinStub && _superClassMember != null)) {
           _createForwardingImplIfNeeded(
-              stub.function, stub.name, classBuilder.cls);
+              stub.function, stub.name, classBuilder.cls,
+              isForwardingStub: needsForwardingStub);
         }
       }
+
       return stub;
     } else {
       if (_combinedMemberSignature.needsCovarianceMerging) {
@@ -110,31 +143,32 @@
       }
       if (_combinedMemberSignature.needsSuperImpl) {
         _createForwardingImplIfNeeded(
-            interfaceMember.function, interfaceMember.name, classBuilder.cls);
+            interfaceMember.function, interfaceMember.name, classBuilder.cls,
+            isForwardingStub: true);
       }
       return interfaceMember;
     }
   }
 
   void _createForwardingImplIfNeeded(
-      FunctionNode function, Name name, Class enclosingClass) {
+      FunctionNode function, Name name, Class enclosingClass,
+      {bool isForwardingStub}) {
+    assert(isForwardingStub != null);
     if (function.body != null) {
       // There is already an implementation; nothing further needs to be done.
       return;
     }
-    // Find the concrete implementation in the superclass; this is what we need
-    // to forward to.  If we can't find one, then the method is fully abstract
-    // and we don't need to do anything.
-    Class superclass = enclosingClass.superclass;
-    if (superclass == null) return;
+    // If there is no concrete implementation in the superclass, then the method
+    // is fully abstract and we don't need to do anything.
+    if (_superClassMember == null) {
+      return;
+    }
     Procedure procedure = function.parent;
-    Member superTarget = _combinedMemberSignature.hierarchy
-        .getDispatchTargetKernel(
-            superclass, procedure.name, kind == ProcedureKind.Setter);
-    if (superTarget == null) return;
+    Member superTarget =
+        _superClassMember.getMember(_combinedMemberSignature.hierarchy);
     if (superTarget is Procedure && superTarget.isForwardingStub) {
       Procedure superProcedure = superTarget;
-      superTarget = superProcedure.forwardingStubSuperTarget;
+      superTarget = superProcedure.concreteForwardingStubTarget;
     } else {
       superTarget = superTarget.memberSignatureOrigin ?? superTarget;
     }
@@ -178,7 +212,9 @@
     }
     function.body = new ReturnStatement(superCall)..parent = function;
     procedure.transformerFlags |= TransformerFlag.superCalls;
-    procedure.stubKind = ProcedureStubKind.ForwardingSuperStub;
+    procedure.stubKind = isForwardingStub
+        ? ProcedureStubKind.ConcreteForwardingStub
+        : ProcedureStubKind.ConcreteMixinStub;
     procedure.stubTarget = superTarget;
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 6dd3745..2173fcb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -5996,12 +5996,10 @@
         inferrer.thisType.classNode.supertype.classNode,
         inferrer.library.library);
 
-    ObjectAccessTarget writeTarget = inferrer.findInterfaceMember(
-        receiverType, node.name, node.fileOffset,
-        setter: true, instrumented: true);
-    if (writeTarget.isInstanceMember || writeTarget.isObjectMember) {
-      node.interfaceTarget = writeTarget.member;
-    }
+    ObjectAccessTarget writeTarget = node.interfaceTarget != null
+        ? new ObjectAccessTarget.interfaceMember(node.interfaceTarget,
+            isPotentiallyNullable: false)
+        : const ObjectAccessTarget.missing();
     DartType writeContext = inferrer.getSetterType(writeTarget, receiverType);
     ExpressionInferenceResult rhsResult = inferrer.inferExpression(
         node.value, writeContext ?? const UnknownType(), true,
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 9c26327..88c5a6d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -15,6 +15,7 @@
         Name,
         Procedure,
         ProcedureKind,
+        Reference,
         ReturnStatement;
 
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
@@ -50,8 +51,8 @@
     LoadLibrary expression = createLoadLibrary(charOffset, forest, null);
     String prefix = expression.import.name;
     Name name = new Name('_#loadLibrary_$prefix', parent.library);
-    Procedure referencesFrom =
-        parent.lookupLibraryReferenceProcedure(name.text, false);
+    Reference reference =
+        parent.referencesFromIndexed?.lookupGetterReference(name.text);
     tearoff = new Procedure(
         name,
         ProcedureKind.Method,
@@ -60,7 +61,7 @@
                 parent.nonNullable, <DartType>[const DynamicType()])),
         fileUri: parent.library.fileUri,
         isStatic: true,
-        reference: referencesFrom?.reference)
+        reference: reference)
       ..startFileOffset = charOffset
       ..fileOffset = charOffset
       ..isNonNullableByDefault = parent.isNonNullableByDefault;
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 54f9683..a222357 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -843,7 +843,7 @@
   }
 
   void _addRedirectingConstructor(ProcedureBuilder constructorBuilder,
-      SourceLibraryBuilder library, Field referenceFrom) {
+      SourceLibraryBuilder library, Reference getterReference) {
     // Add a new synthetic field to this class for representing factory
     // constructors. This is used to support resolving such constructors in
     // source code.
@@ -861,12 +861,12 @@
     if (constructorsField == null) {
       ListLiteral literal = new ListLiteral(<Expression>[]);
       Name name = new Name(redirectingName, library.library);
-      Field field = new Field(name,
+      Field field = new Field.immutable(name,
           isStatic: true,
+          isFinal: true,
           initializer: literal,
           fileUri: cls.fileUri,
-          getterReference: referenceFrom?.getterReference,
-          setterReference: referenceFrom?.setterReference)
+          getterReference: getterReference)
         ..fileOffset = cls.fileOffset;
       cls.addField(field);
       constructorsField = new DillFieldBuilder(field, this);
@@ -908,9 +908,10 @@
                 // is actually in the kernel tree. This call creates a StaticGet
                 // to [declaration.target] in a field `_redirecting#` which is
                 // only legal to do to things in the kernel tree.
-                Field referenceFrom =
-                    referencesFromIndexed?.lookupField("_redirecting#");
-                _addRedirectingConstructor(declaration, library, referenceFrom);
+                Reference getterReference = referencesFromIndexed
+                    ?.lookupGetterReference("_redirecting#");
+                _addRedirectingConstructor(
+                    declaration, library, getterReference);
               }
               if (targetBuilder is FunctionBuilder) {
                 List<DartType> typeArguments = declaration.typeArguments ??
@@ -1756,9 +1757,23 @@
 /// 'dart:_interceptors' that implements both `int` and `double`, and `JsArray`
 /// in `dart:js` that implement both `ListMixin` and `JsObject`.
 bool shouldOverrideProblemBeOverlooked(ClassBuilder classBuilder) {
+  return getOverlookedOverrideProblemChoice(classBuilder) != null;
+}
+
+/// Returns the index of the member to use if an override problems should be
+/// overlooked.
+///
+/// This is needed for the current encoding of some JavaScript implementation
+/// classes that are not valid Dart. For instance `JSInt` in
+/// 'dart:_interceptors' that implements both `int` and `double`, and `JsArray`
+/// in `dart:js` that implement both `ListMixin` and `JsObject`.
+int getOverlookedOverrideProblemChoice(ClassBuilder classBuilder) {
   String uri = '${classBuilder.library.importUri}';
-  return uri == 'dart:js' &&
-          classBuilder.fileUri.pathSegments.last == 'js.dart' ||
-      uri == 'dart:_interceptors' &&
-          classBuilder.fileUri.pathSegments.last == 'js_number.dart';
+  if (uri == 'dart:js' && classBuilder.fileUri.pathSegments.last == 'js.dart') {
+    return 0;
+  } else if (uri == 'dart:_interceptors' &&
+      classBuilder.fileUri.pathSegments.last == 'js_number.dart') {
+    return 1;
+  }
+  return null;
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index a57f05f..0440125 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -62,7 +62,7 @@
 import 'package:kernel/clone.dart' show CloneVisitorNotMembers;
 
 import 'package:kernel/reference_from_index.dart'
-    show IndexedClass, IndexedLibrary;
+    show IndexedClass, IndexedContainer, IndexedLibrary;
 
 import 'package:kernel/src/bounds_checks.dart'
     show
@@ -979,13 +979,13 @@
     library.procedures.sort(compareProcedures);
 
     if (unserializableExports != null) {
-      Field referenceFrom = referencesFromIndexed?.lookupField("_exports#");
-      library.addField(new Field(new Name("_exports#", library),
+      Reference getterReference =
+          referencesFromIndexed?.lookupGetterReference("_exports#");
+      library.addField(new Field.immutable(new Name("_exports#", library),
           initializer: new StringLiteral(jsonEncode(unserializableExports)),
           isStatic: true,
           isConst: true,
-          getterReference: referenceFrom?.getterReference,
-          setterReference: referenceFrom?.setterReference));
+          getterReference: getterReference));
     }
 
     return library;
@@ -1287,7 +1287,9 @@
                     // so replacing a field with a getter/setter pair still
                     // exports correctly.
                     library.additionalExports.add(member.getterReference);
-                    library.additionalExports.add(member.setterReference);
+                    if (member.hasSetter) {
+                      library.additionalExports.add(member.setterReference);
+                    }
                   } else {
                     library.additionalExports.add(member.reference);
                   }
@@ -2133,10 +2135,6 @@
     if (hasInitializer) {
       modifiers |= hasInitializerMask;
     }
-    Field referenceFrom;
-    Field lateIsSetReferenceFrom;
-    Procedure getterReferenceFrom;
-    Procedure setterReferenceFrom;
     final bool fieldIsLateWithLowering = (modifiers & lateMask) != 0 &&
         loader.target.backendTarget.isLateFieldLoweringEnabled(
             hasInitializer: hasInitializer,
@@ -2155,6 +2153,13 @@
     if (isExtension) {
       extensionName = currentTypeParameterScopeBuilder.name;
     }
+
+    Reference fieldGetterReference;
+    Reference fieldSetterReference;
+    Reference lateIsSetGetterReference;
+    Reference lateIsSetSetterReference;
+    Reference getterReference;
+    Reference setterReference;
     if (referencesFrom != null) {
       String nameToLookup = SourceFieldBuilder.createFieldName(
           FieldNameType.Field, name,
@@ -2163,80 +2168,53 @@
           isExtensionMethod: isExtension,
           extensionName: extensionName,
           isSynthesized: fieldIsLateWithLowering);
-
-      if (_currentClassReferencesFromIndexed != null) {
-        referenceFrom =
-            _currentClassReferencesFromIndexed.lookupField(nameToLookup);
-        if (fieldIsLateWithLowering) {
-          lateIsSetReferenceFrom = _currentClassReferencesFromIndexed
-              .lookupField(SourceFieldBuilder.createFieldName(
-                  FieldNameType.IsSetField, name,
-                  isInstanceMember: isInstanceMember,
-                  className: className,
-                  isExtensionMethod: isExtension,
-                  extensionName: extensionName,
-                  isSynthesized: fieldIsLateWithLowering));
-          getterReferenceFrom =
-              _currentClassReferencesFromIndexed.lookupProcedureNotSetter(
-                  SourceFieldBuilder.createFieldName(FieldNameType.Getter, name,
-                      isInstanceMember: isInstanceMember,
-                      className: className,
-                      isExtensionMethod: isExtension,
-                      extensionName: extensionName,
-                      isSynthesized: fieldIsLateWithLowering));
-          setterReferenceFrom =
-              _currentClassReferencesFromIndexed.lookupProcedureSetter(
-                  SourceFieldBuilder.createFieldName(FieldNameType.Setter, name,
-                      isInstanceMember: isInstanceMember,
-                      className: className,
-                      isExtensionMethod: isExtension,
-                      extensionName: extensionName,
-                      isSynthesized: fieldIsLateWithLowering));
-        }
-      } else {
-        referenceFrom = referencesFromIndexed.lookupField(nameToLookup);
-        if (fieldIsLateWithLowering) {
-          lateIsSetReferenceFrom = referencesFromIndexed.lookupField(
-              SourceFieldBuilder.createFieldName(FieldNameType.IsSetField, name,
-                  isInstanceMember: isInstanceMember,
-                  className: className,
-                  isExtensionMethod: isExtension,
-                  extensionName: extensionName,
-                  isSynthesized: fieldIsLateWithLowering));
-          getterReferenceFrom = referencesFromIndexed.lookupProcedureNotSetter(
-              SourceFieldBuilder.createFieldName(FieldNameType.Getter, name,
-                  isInstanceMember: isInstanceMember,
-                  className: className,
-                  isExtensionMethod: isExtension,
-                  extensionName: extensionName,
-                  isSynthesized: fieldIsLateWithLowering));
-          setterReferenceFrom = referencesFromIndexed.lookupProcedureSetter(
-              SourceFieldBuilder.createFieldName(FieldNameType.Setter, name,
-                  isInstanceMember: isInstanceMember,
-                  className: className,
-                  isExtensionMethod: isExtension,
-                  extensionName: extensionName,
-                  isSynthesized: fieldIsLateWithLowering));
-        }
+      IndexedContainer indexedContainer =
+          _currentClassReferencesFromIndexed ?? referencesFromIndexed;
+      fieldGetterReference =
+          indexedContainer.lookupGetterReference(nameToLookup);
+      fieldSetterReference =
+          indexedContainer.lookupSetterReference(nameToLookup);
+      if (fieldIsLateWithLowering) {
+        String lateIsSetName = SourceFieldBuilder.createFieldName(
+            FieldNameType.IsSetField, name,
+            isInstanceMember: isInstanceMember,
+            className: className,
+            isExtensionMethod: isExtension,
+            extensionName: extensionName,
+            isSynthesized: fieldIsLateWithLowering);
+        lateIsSetGetterReference =
+            indexedContainer.lookupGetterReference(lateIsSetName);
+        lateIsSetSetterReference =
+            indexedContainer.lookupSetterReference(lateIsSetName);
+        getterReference = indexedContainer.lookupGetterReference(
+            SourceFieldBuilder.createFieldName(FieldNameType.Getter, name,
+                isInstanceMember: isInstanceMember,
+                className: className,
+                isExtensionMethod: isExtension,
+                extensionName: extensionName,
+                isSynthesized: fieldIsLateWithLowering));
+        setterReference = indexedContainer.lookupSetterReference(
+            SourceFieldBuilder.createFieldName(FieldNameType.Setter, name,
+                isInstanceMember: isInstanceMember,
+                className: className,
+                isExtensionMethod: isExtension,
+                extensionName: extensionName,
+                isSynthesized: fieldIsLateWithLowering));
       }
     }
-    SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(
-        metadata,
-        type,
-        name,
-        modifiers,
-        isTopLevel,
-        this,
-        charOffset,
-        charEndOffset,
-        referenceFrom,
-        lateIsSetReferenceFrom,
-        getterReferenceFrom,
-        setterReferenceFrom);
+
+    SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(metadata, type,
+        name, modifiers, isTopLevel, this, charOffset, charEndOffset,
+        fieldGetterReference: fieldGetterReference,
+        fieldSetterReference: fieldSetterReference,
+        lateIsSetGetterReference: lateIsSetGetterReference,
+        lateIsSetSetterReference: lateIsSetSetterReference,
+        getterReference: getterReference,
+        setterReference: setterReference);
     fieldBuilder.constInitializerToken = constInitializerToken;
     addBuilder(name, fieldBuilder, charOffset,
-        getterReference: referenceFrom?.getterReference,
-        setterReference: referenceFrom?.setterReference);
+        getterReference: fieldGetterReference,
+        setterReference: fieldSetterReference);
     if (type == null && fieldBuilder.next == null) {
       // Only the first one (the last one in the linked list of next pointers)
       // are added to the tree, had parent pointers and can infer correctly.
@@ -2339,16 +2317,16 @@
         returnType = addVoidType(charOffset);
       }
     }
-    Procedure referenceFrom;
-    Procedure tearOffReferenceFrom;
+    Reference procedureReference;
+    Reference tearOffReference;
     if (referencesFrom != null) {
       if (_currentClassReferencesFromIndexed != null) {
         if (kind == ProcedureKind.Setter) {
-          referenceFrom =
-              _currentClassReferencesFromIndexed.lookupProcedureSetter(name);
+          procedureReference =
+              _currentClassReferencesFromIndexed.lookupSetterReference(name);
         } else {
-          referenceFrom =
-              _currentClassReferencesFromIndexed.lookupProcedureNotSetter(name);
+          procedureReference =
+              _currentClassReferencesFromIndexed.lookupGetterReference(name);
         }
       } else {
         if (currentTypeParameterScopeBuilder.kind ==
@@ -2361,11 +2339,11 @@
               currentTypeParameterScopeBuilder.name,
               name);
           if (extensionIsStatic && kind == ProcedureKind.Setter) {
-            referenceFrom =
-                referencesFromIndexed.lookupProcedureSetter(nameToLookup);
+            procedureReference =
+                referencesFromIndexed.lookupSetterReference(nameToLookup);
           } else {
-            referenceFrom =
-                referencesFromIndexed.lookupProcedureNotSetter(nameToLookup);
+            procedureReference =
+                referencesFromIndexed.lookupGetterReference(nameToLookup);
           }
           if (kind == ProcedureKind.Method) {
             String tearOffNameToLookup =
@@ -2375,15 +2353,16 @@
                     ProcedureKind.Getter,
                     currentTypeParameterScopeBuilder.name,
                     name);
-            tearOffReferenceFrom = referencesFromIndexed
-                .lookupProcedureNotSetter(tearOffNameToLookup);
+            tearOffReference = referencesFromIndexed
+                .lookupGetterReference(tearOffNameToLookup);
           }
         } else {
           if (kind == ProcedureKind.Setter) {
-            referenceFrom = referencesFromIndexed.lookupProcedureSetter(name);
+            procedureReference =
+                referencesFromIndexed.lookupSetterReference(name);
           } else {
-            referenceFrom =
-                referencesFromIndexed.lookupProcedureNotSetter(name);
+            procedureReference =
+                referencesFromIndexed.lookupGetterReference(name);
           }
         }
       }
@@ -2401,8 +2380,8 @@
         charOffset,
         charOpenParenOffset,
         charEndOffset,
-        referenceFrom,
-        tearOffReferenceFrom,
+        procedureReference,
+        tearOffReference,
         asyncModifier,
         isExtensionInstanceMember,
         nativeMethodName);
@@ -2410,7 +2389,7 @@
         procedureBuilder.procedure, documentationComment);
     checkTypeVariables(typeVariables, procedureBuilder);
     addBuilder(name, procedureBuilder, charOffset,
-        getterReference: referenceFrom?.reference);
+        getterReference: procedureReference);
     if (nativeMethodName != null) {
       addNativeMethod(procedureBuilder);
     }
@@ -2448,8 +2427,8 @@
       procedureName = name;
     }
 
-    Procedure referenceFrom = _currentClassReferencesFromIndexed
-        ?.lookupProcedureNotSetter(procedureName);
+    Reference reference = _currentClassReferencesFromIndexed
+        ?.lookupGetterReference(procedureName);
 
     ProcedureBuilder procedureBuilder;
     if (redirectionTarget != null) {
@@ -2468,7 +2447,7 @@
           charOffset,
           charOpenParenOffset,
           charEndOffset,
-          referenceFrom,
+          reference,
           nativeMethodName,
           redirectionTarget);
     } else {
@@ -2488,7 +2467,7 @@
           charOffset,
           charOpenParenOffset,
           charEndOffset,
-          referenceFrom,
+          reference,
           null,
           asyncModifier,
           /* isExtensionInstanceMember = */ false,
@@ -2513,7 +2492,7 @@
 
     factoryDeclaration.resolveTypes(procedureBuilder.typeVariables, this);
     addBuilder(procedureName, procedureBuilder, charOffset,
-        getterReference: referenceFrom?.reference);
+        getterReference: reference);
     if (nativeMethodName != null) {
       addNativeMethod(procedureBuilder);
     }
@@ -3821,15 +3800,6 @@
           referencesFromIndexed.lookupIndexedClass(name);
     }
   }
-
-  Procedure lookupLibraryReferenceProcedure(String name, bool setter) {
-    if (referencesFrom == null) return null;
-    if (setter) {
-      return referencesFromIndexed.lookupProcedureSetter(name);
-    } else {
-      return referencesFromIndexed.lookupProcedureNotSetter(name);
-    }
-  }
 }
 
 // The kind of type parameter scope built by a [TypeParameterScopeBuilder]
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 86097cd..bc880e8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1521,7 +1521,7 @@
   factory Set() = Set<E>._fake;
   external factory Set._fake();
   external factory Set.of();
-  void add(E element) {}
+  bool add(E element) {}
   void addAll(Iterable<E> iterable) {}
 }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 830562f..4c804fe 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1584,7 +1584,7 @@
   /// Otherwise return the given [member].
   Member getRealTarget(Member member) {
     if (member is Procedure && member.isForwardingStub) {
-      return member.forwardingStubInterfaceTarget;
+      return member.abstractForwardingStubTarget;
     }
     return member;
   }
diff --git a/pkg/front_end/test/fasta/ambiguous_export_test.dart b/pkg/front_end/test/fasta/ambiguous_export_test.dart
index a1ac89a..1bb1c23 100644
--- a/pkg/front_end/test/fasta/ambiguous_export_test.dart
+++ b/pkg/front_end/test/fasta/ambiguous_export_test.dart
@@ -21,7 +21,7 @@
 main() async {
   await asyncTest(() async {
     Library library = new Library(Uri.parse("org.dartlang.fasta:library"));
-    Field field = new Field(new Name("_exports#", library),
+    Field field = new Field.immutable(new Name("_exports#", library),
         initializer: new StringLiteral('{"main":"Problem with main"}'));
     library.addField(field);
     Component component = new Component(libraries: <Library>[library]);
diff --git a/pkg/front_end/test/incremental_load_from_dill_suite.dart b/pkg/front_end/test/incremental_load_from_dill_suite.dart
index 3c88456..dba9923 100644
--- a/pkg/front_end/test/incremental_load_from_dill_suite.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_suite.dart
@@ -1202,7 +1202,6 @@
         Set<Member> members = info.lazyDeclaredGettersAndCalls.toSet();
         for (Field f in c.fields) {
           if (f.isStatic) continue;
-          if (!f.hasImplicitGetter) continue;
           if (!members.remove(f)) {
             return new Result<TestData>(
                 data,
@@ -1240,7 +1239,7 @@
         Set<Member> members = info.lazyDeclaredSetters.toSet();
         for (Field f in c.fields) {
           if (f.isStatic) continue;
-          if (!f.hasImplicitSetter) continue;
+          if (!f.hasSetter) continue;
           if (!members.remove(f)) {
             return new Result<TestData>(data, ClassHierarchyError,
                 "Didn't find $f in lazyDeclaredSetters for $c");
@@ -1915,13 +1914,10 @@
         .toList()
         .isNotEmpty) continue;
     Name fieldName = new Name("unique_SimulateTransformer");
-    Field field = new Field(fieldName,
+    Field field = new Field.immutable(fieldName,
         isFinal: true,
         getterReference: lib.reference.canonicalName
             ?.getChildFromFieldWithName(fieldName)
-            ?.reference,
-        setterReference: lib.reference.canonicalName
-            ?.getChildFromFieldSetterWithName(fieldName)
             ?.reference);
     lib.addField(field);
     for (Class c in lib.classes) {
@@ -1930,13 +1926,10 @@
           .toList()
           .isNotEmpty) continue;
       fieldName = new Name("unique_SimulateTransformer");
-      field = new Field(fieldName,
+      field = new Field.immutable(fieldName,
           isFinal: true,
           getterReference: c.reference.canonicalName
               ?.getChildFromFieldWithName(fieldName)
-              ?.reference,
-          setterReference: c.reference.canonicalName
-              ?.getChildFromFieldSetterWithName(fieldName)
               ?.reference);
       c.addField(field);
     }
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 0e85d97..12f059f 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -378,6 +378,7 @@
 equation
 erasure
 es
+establish
 established
 estimate
 eval
@@ -401,6 +402,7 @@
 factored
 fangorn
 fasta
+favored
 favoring
 fc
 fcon
@@ -1332,6 +1334,7 @@
 worthwhile
 worthy
 writeln
+wrongfully
 wrt
 wtf
 www
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 0e029cd..74205c3 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -25,6 +25,7 @@
 amortized
 analyses
 animal
+animated
 annoying
 anon
 aoo
@@ -494,6 +495,7 @@
 ol
 onull
 ooo
+opacity
 operate
 ops
 optimal
@@ -544,6 +546,7 @@
 protected
 proved
 provider
+proxy
 pseudocode
 pubspec
 pv
diff --git a/pkg/front_end/test/type_labeler_test.dart b/pkg/front_end/test/type_labeler_test.dart
index 40e862f..aea5433 100644
--- a/pkg/front_end/test/type_labeler_test.dart
+++ b/pkg/front_end/test/type_labeler_test.dart
@@ -182,17 +182,17 @@
   check({funGenericBar: "T Function<T extends Bar<T>>(T)"}, 1);
 
   // Add some members for testing instance constants
-  Field booField = new Field(new Name("boo"), type: boolType);
+  Field booField = new Field.immutable(new Name("boo"), type: boolType);
   fooClass.fields.add(booField);
-  Field valueField = new Field(new Name("value"), type: intType);
+  Field valueField = new Field.immutable(new Name("value"), type: intType);
   foo2Class.fields.add(valueField);
-  Field nextField = new Field(new Name("next"), type: foo2);
+  Field nextField = new Field.immutable(new Name("next"), type: foo2);
   foo2Class.fields.add(nextField);
-  Field xField = new Field(new Name("x"),
+  Field xField = new Field.immutable(new Name("x"),
       type: new TypeParameterType(
           bazClass.typeParameters[0], Nullability.legacy));
   bazClass.fields.add(xField);
-  Field yField = new Field(new Name("y"),
+  Field yField = new Field.immutable(new Name("y"),
       type: new TypeParameterType(
           bazClass.typeParameters[1], Nullability.legacy));
   bazClass.fields.add(yField);
diff --git a/pkg/front_end/testcases/general/bug33099.dart.outline.expect b/pkg/front_end/testcases/general/bug33099.dart.outline.expect
index 22c739f..1b77963 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.outline.expect
@@ -41,6 +41,8 @@
   const synthetic constructor •() → self::_MyTest2&Object&MyTest*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → void
+    return super.{self::MyTest::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
@@ -68,4 +70,4 @@
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///bug33099.dart:14:4 -> InstanceConstant(const _FailingTest{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bug33099.dart:7:40 -> InstanceConstant(const _FailingTest{})
-Extra constant evaluation: evaluated: 2, effectively constant: 2
+Extra constant evaluation: evaluated: 3, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/bug33099.dart.strong.expect b/pkg/front_end/testcases/general/bug33099.dart.strong.expect
index 3c88091..4366e5c 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.strong.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.strong.expect
@@ -41,6 +41,8 @@
   const synthetic constructor •() → self::_MyTest2&Object&MyTest*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → void
+    return super.{self::MyTest::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
diff --git a/pkg/front_end/testcases/general/bug33099.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bug33099.dart.strong.transformed.expect
index d3b4b3a..9b8d3f4 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.strong.transformed.expect
@@ -41,6 +41,8 @@
   const synthetic constructor •() → self::_MyTest2&Object&MyTest*
     : super core::Object::•()
     ;
+  @#C1
+  method foo() → 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
@@ -51,8 +53,6 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  @#C1
-  method foo() → void {}
 }
 class MyTest2 extends self::_MyTest2&Object&MyTest {
   synthetic constructor •() → self::MyTest2*
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect
index e05fa7c..2ca3173 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect
@@ -55,7 +55,7 @@
     : super self::A::•()
     ;
   forwarding-stub method foo(covariant core::num* x) → void
-    return super.{self::A::foo}(x);
+    return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect
index b3bcf67..60fc7d3 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect
@@ -55,7 +55,7 @@
     : super self::A::•()
     ;
   forwarding-stub method foo(covariant core::num* x) → void
-    return super.{self::A::foo}(x);
+    return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.outline.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.outline.expect
index 3587c68..098d875 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.outline.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.outline.expect
@@ -66,6 +66,8 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -87,6 +89,8 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.expect
index 299c36f..6c86016 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.expect
@@ -86,6 +86,8 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -103,13 +105,15 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -127,7 +131,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String*>* response = new self::PagingResponse::•<core::String*>(new self::PagingResponseData::•<core::String*>(<core::String*>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.transformed.expect
index 97f034a..0ecab88 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.strong.transformed.expect
@@ -113,16 +113,6 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : 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
   method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
@@ -168,20 +158,6 @@
     :is_sync = true;
     return :async_future;
   }
-}
-class Class1 extends self::_Class1&Object&TestMixin {
-  synthetic constructor •() → self::Class1*
-    : super self::_Class1&Object&TestMixin::•()
-    ;
-  method _test() → dynamic {
-    final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
-  }
-}
-abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Class2&Object&TestMixin*
-    : 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
@@ -192,6 +168,20 @@
   abstract member-signature method toString() → core::String*; -> core::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 Class1 extends self::_Class1&Object&TestMixin {
+  synthetic constructor •() → self::Class1*
+    : super self::_Class1&Object&TestMixin::•()
+    ;
+  method _test() → dynamic {
+    final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
+  }
+}
+abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class2&Object&TestMixin*
+    : super core::Object::•()
+    ;
   method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
@@ -237,6 +227,16 @@
     :is_sync = true;
     return :async_future;
   }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 Class2 extends self::_Class2&Object&TestMixin {
   synthetic constructor •() → self::Class2*
@@ -244,7 +244,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String*>* response = new self::PagingResponse::•<core::String*>(new self::PagingResponseData::•<core::String*>(<core::String*>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart b/pkg/front_end/testcases/general/implicit_constructor_02.dart
new file mode 100644
index 0000000..818c138
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart
@@ -0,0 +1,27 @@
+// 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.
+
+// Derived from co19/Language/Mixins/Mixin_Application/implicit_constructor_t02
+
+class A {
+  bool v1;
+  num v2;
+  A(bool this.v1, num this.v2);
+}
+
+class M1 {
+  num v2 = -1;
+}
+
+class C = A with M1;
+
+main() {
+  C c = new C(true, 2);
+  expect(true, c.v1);
+  expect(-1, c.v2);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.outline.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.outline.expect
new file mode 100644
index 0000000..eee145b
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.outline.expect
@@ -0,0 +1,48 @@
+library;
+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*
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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*
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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*
+    : super self::A::•(v1, v2)
+    ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  mixin-super-stub set v2(core::num* value) → void
+    return super.{self::M1::v2} = value;
+}
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.expect
new file mode 100644
index 0000000..ceafb22f
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.expect
@@ -0,0 +1,55 @@
+library;
+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*
+    : 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 = 1.{core::int::unary-}();
+  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*
+    : super self::A::•(v1, v2)
+    ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  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::expect(true, c.{self::A::v1});
+  self::expect(1.{core::int::unary-}(), c.{self::C::v2});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.transformed.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.transformed.expect
new file mode 100644
index 0000000..35f26e3
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.strong.transformed.expect
@@ -0,0 +1,69 @@
+library;
+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*
+    : 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 = 1.{core::int::unary-}();
+  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 = 1.{core::int::unary-}();
+  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+    : super self::A::•(v1, v2)
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  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::•(true, 2);
+  self::expect(true, c.{self::A::v1});
+  self::expect(1.{core::int::unary-}(), c.{self::C::v2});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
+Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
+Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:22:10 -> IntConstant(-1)
+Extra constant evaluation: evaluated: 22, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect
new file mode 100644
index 0000000..9b741d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+class A {
+  bool v1;
+  num v2;
+  A(bool this.v1, num this.v2);
+}
+
+class M1 {
+  num v2 = -1;
+}
+
+class C = A with M1;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fca520a
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+class A {
+  A(bool this.v1, num this.v2);
+  bool v1;
+  num v2;
+}
+
+class C = A with M1;
+
+class M1 {
+  num v2 = -1;
+}
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.outline.expect b/pkg/front_end/testcases/general/invalid_cast.dart.outline.expect
index cc0f041..c096df0 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
   constructor •() → self::C*
     ;
   constructor nonFact() → self::C*
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/general/invalid_cast.dart.strong.expect
index fb2b5bb..8c699de 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.strong.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
   constructor •() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_cast.dart.strong.transformed.expect
index 0ab1a94..2868804 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.strong.transformed.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
   constructor •() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/issue31767.dart.outline.expect b/pkg/front_end/testcases/general/issue31767.dart.outline.expect
index adbdb2c..43bfbd8 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.outline.expect
@@ -28,6 +28,8 @@
   synthetic constructor foo(core::int* x, [core::int* y, core::int* z]) → self::D*
     : super self::C::foo(x, y, z)
     ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::M::w2};
 }
 abstract class N extends iss::A /*isMixinDeclaration*/  {
   get w2() → core::int*
@@ -37,6 +39,8 @@
   synthetic constructor foo(core::int* x, [core::int* y, core::int* z, iss::_A* a]) → self::E*
     : super iss::A::foo(x, y, z, a)
     ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::N::w2};
 }
 static field core::StringBuffer* sb;
 static method p(core::String* name, core::int* value) → core::int*
diff --git a/pkg/front_end/testcases/general/issue31767.dart.strong.expect b/pkg/front_end/testcases/general/issue31767.dart.strong.expect
index 1b0f0ec..1d880e0 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.strong.expect
@@ -29,6 +29,8 @@
   synthetic constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::D*
     : super self::C::foo(x, y, z)
     ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::M::w2};
 }
 abstract class N extends iss::A /*isMixinDeclaration*/  {
   get w2() → core::int*
@@ -38,6 +40,8 @@
   synthetic constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → self::E*
     : super iss::A::foo(x, y, z, a)
     ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::N::w2};
 }
 static field core::StringBuffer* sb;
 static method p(core::String* name, core::int* value) → core::int* {
@@ -58,12 +62,12 @@
   self::D* d = new self::D::foo(1, 2);
   self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
   self::expect(3, d.{self::C::w});
-  self::expect(9, d.{self::M::w2});
+  self::expect(9, d.{self::D::w2});
   self::sb = new core::StringBuffer::•();
   self::E* e = new self::E::foo(1, 2);
   self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
   self::expect(6, e.{iss::A::w});
-  self::expect(36, e.{self::N::w2});
+  self::expect(36, e.{self::E::w2});
   self::expect(5, e.{iss::A::a}.{iss::_A::field});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/general/issue31767.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue31767.dart.strong.transformed.expect
index e9f261e..2a77e8c 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.strong.transformed.expect
@@ -62,12 +62,12 @@
   self::D* d = new self::D::foo(1, 2);
   self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
   self::expect(3, d.{self::C::w});
-  self::expect(9, d.{self::M::w2});
+  self::expect(9, d.{self::D::w2});
   self::sb = new core::StringBuffer::•();
   self::E* e = new self::E::foo(1, 2);
   self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
   self::expect(6, e.{iss::A::w});
-  self::expect(36, e.{self::N::w2});
+  self::expect(36, e.{self::E::w2});
   self::expect(5, e.{iss::A::a}.{iss::_A::field});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/general/issue34714.dart.outline.expect b/pkg/front_end/testcases/general/issue34714.dart.outline.expect
index 04e8e0b..7d7ca21 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/issue34714.dart.strong.expect b/pkg/front_end/testcases/general/issue34714.dart.strong.expect
index f0ced51..e023b92 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/issue34714.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue34714.dart.strong.transformed.expect
index 38f9b49..61b902a 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     let<BottomType> #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/issue40982.dart.outline.expect b/pkg/front_end/testcases/general/issue40982.dart.outline.expect
index 642ab52..90a0ef0 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.outline.expect
@@ -78,6 +78,10 @@
   synthetic constructor •() → self::_E1&A&D*
     : super self::A::•()
     ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
   const constructor •() → self::E1*
@@ -88,6 +92,10 @@
   synthetic constructor •() → self::E2*
     : super self::A::•()
     ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
   const constructor •() → self::E3*
diff --git a/pkg/front_end/testcases/general/issue40982.dart.strong.expect b/pkg/front_end/testcases/general/issue40982.dart.strong.expect
index d5bdf49..9eb651c 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.strong.expect
@@ -78,6 +78,10 @@
   synthetic constructor •() → self::_E1&A&D*
     : super self::A::•()
     ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
   const constructor •() → self::E1*
@@ -88,6 +92,10 @@
   synthetic constructor •() → self::E2*
     : super self::A::•()
     ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
   const constructor •() → self::E3*
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
index f56ad37..2c30295 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
@@ -5,12 +5,12 @@
 // pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'A.method'.
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210a.dart:14:10: Context: This is the overridden method ('method').
-//   String method(num i, {String s = "hello"}) => s;
-//          ^
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
 //
 import self as self;
 import "dart:core" as core;
@@ -78,6 +78,8 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+    return super.{self::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -93,12 +95,12 @@
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::A::method
+  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     ;
-  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::A::method
+  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
   synthetic constructor •() → self::D*
@@ -119,6 +121,8 @@
   const synthetic constructor •() → self::_E&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+    return super.{self::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
index 024bfb0..e33f9ba 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
@@ -5,12 +5,12 @@
 // pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'A.method'.
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210a.dart:14:10: Context: This is the overridden method ('method').
-//   String method(num i, {String s = "hello"}) => s;
-//          ^
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
 //
 import self as self;
 import "dart:core" as core;
@@ -81,6 +81,8 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -96,13 +98,13 @@
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::A::method
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::A::method
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
   synthetic constructor •() → self::D*
@@ -124,6 +126,8 @@
   const synthetic constructor •() → self::_E&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue41210a.dart.strong.transformed.expect
new file mode 100644
index 0000000..85cb978
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210a.dart.strong.transformed.expect
@@ -0,0 +1,180 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+//       ^
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+//   String method(num i);
+//          ^
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 extends core::Object implements self::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 B extends core::Object implements self::Interface {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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&Object&A extends core::Object implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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&Object&A&B extends self::_C&Object&A implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+}
+abstract class D extends core::Object implements self::Interface, self::Interface2 {
+  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
+  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+}
+abstract class _E&Object&A extends core::Object implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 _E&Object&A&D extends self::_E&Object&A implements self::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::C::method}(0));
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
index ac3f13c..8ea72fc 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
@@ -5,12 +5,12 @@
 // pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:14:10: Context: This is the overridden method ('method').
-//   String method(num i, {String s = "hello"}) => s;
-//          ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
 //
 import self as self;
 import "dart:core" as core;
@@ -22,22 +22,26 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+    return super.{iss::A::method}(i, s: s);
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> iss::A::method
+  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     ;
-  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> iss::A::method
+  abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_E&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+    return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_E&Object&A&D*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
index daad075..91814ab 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
@@ -5,12 +5,12 @@
 // pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:14:10: Context: This is the overridden method ('method').
-//   String method(num i, {String s = "hello"}) => s;
-//          ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
 //
 import self as self;
 import "dart:core" as core;
@@ -22,23 +22,27 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_E&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_E&Object&A&D*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.transformed.expect
new file mode 100644
index 0000000..d4b65d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.transformed.expect
@@ -0,0 +1,188 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+//       ^
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+//   String method(num i);
+//          ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _C&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B extends self::_C&Object&A implements iss::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+  abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+}
+abstract class _E&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D extends self::_E&Object&A implements iss::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///issue41210_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+  abstract member-signature method method(covariant core::num* i, {core::String* s = #C1}) → core::String*; -> self::_E&Object&A&D::method
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::C::method}(0));
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → iss::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 Interface2 extends core::Object {
+  synthetic constructor •() → iss::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 B extends core::Object implements iss::Interface {
+  synthetic constructor •() → iss::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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 D extends core::Object implements iss::Interface, iss::Interface2 {
+  synthetic constructor •() → iss::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
+  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/mixin.dart.outline.expect b/pkg/front_end/testcases/general/mixin.dart.outline.expect
index 6bd0c09..e09c2b0 100644
--- a/pkg/front_end/testcases/general/mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.outline.expect
@@ -6,6 +6,8 @@
   const synthetic constructor •() → self::_B&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -21,6 +23,8 @@
   const synthetic constructor •() → self::_B&Object&M1&M2*
     : super self::_B&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → self::B*
@@ -62,6 +66,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -77,6 +83,8 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → self::C*
@@ -102,6 +110,8 @@
   const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::G1::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
diff --git a/pkg/front_end/testcases/general/mixin.dart.strong.expect b/pkg/front_end/testcases/general/mixin.dart.strong.expect
index 2851dfc..1f1f19e 100644
--- a/pkg/front_end/testcases/general/mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.strong.expect
@@ -6,6 +6,8 @@
   const synthetic constructor •() → self::_B&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -21,6 +23,8 @@
   const synthetic constructor •() → self::_B&Object&M1&M2*
     : super self::_B&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → self::B*
@@ -65,6 +69,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -80,6 +86,8 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → self::C*
@@ -107,6 +115,8 @@
   const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::G1::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
@@ -124,9 +134,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::M2::m}();
-  new self::C::•(null).{self::M2::m}();
-  new self::D::•<dynamic>().{self::G1::m}();
-  new self::D::•<core::int*>().{self::G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}();
+  new self::C::•(null).{self::_C&Object&M1&M2::m}();
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin.dart.strong.transformed.expect
index 0ddd631..a6c21d2 100644
--- a/pkg/front_end/testcases/general/mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.strong.transformed.expect
@@ -6,6 +6,8 @@
   const synthetic constructor •() → self::_B&Object&M1*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print("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
@@ -16,8 +18,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print("M1");
 }
 abstract class _B&Object&M1&M2 extends self::_B&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M1&M2*
@@ -79,6 +79,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print("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
@@ -89,8 +91,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print("M1");
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2*
@@ -135,6 +135,8 @@
   const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print(self::_D&Object&G1::S*);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -145,8 +147,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print(self::_D&Object&G1::S*);
 }
 class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
   synthetic constructor •() → self::D<self::D::S*>*
@@ -154,9 +154,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::M2::m}();
-  new self::C::•(null).{self::M2::m}();
-  new self::D::•<dynamic>().{self::G1::m}();
-  new self::D::•<core::int*>().{self::G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}();
+  new self::C::•(null).{self::_C&Object&M1&M2::m}();
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
index 7ea8f01..3ede97f 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
@@ -203,7 +203,8 @@
   synthetic constructor •() → self::A0*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A1&S&M1*
@@ -214,7 +215,8 @@
   synthetic constructor •() → self::A1*
     : super self::_A1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A2&S&M1*
@@ -230,13 +232,15 @@
   synthetic constructor •() → self::A2*
     : super self::_A2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A0X = self::_A0X&S&M with self::MX {
   synthetic constructor •() → self::A0X*
@@ -252,7 +256,8 @@
   synthetic constructor •() → self::_A1X&S&M1&M*
     : super self::_A1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
   synthetic constructor •() → self::A1X*
@@ -273,7 +278,8 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M*
     : super self::_A2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::A2X*
@@ -284,7 +290,8 @@
   synthetic constructor •() → self::_B0&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B0 extends self::_B0&S&M {
   synthetic constructor •() → self::B0*
@@ -299,7 +306,8 @@
   synthetic constructor •() → self::_B1&S&M1&M*
     : super self::_B1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1*
@@ -319,7 +327,8 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M*
     : super self::_B2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2*
@@ -329,7 +338,8 @@
   synthetic constructor •() → self::_B0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B0X&S&M&MX*
@@ -349,7 +359,8 @@
   synthetic constructor •() → self::_B1X&S&M1&M*
     : super self::_B1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -374,7 +385,8 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M*
     : super self::_B2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
index 5279085..a0c20c5 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
@@ -206,7 +206,8 @@
   synthetic constructor •() → self::A0*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A1&S&M1*
@@ -217,7 +218,8 @@
   synthetic constructor •() → self::A1*
     : super self::_A1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A2&S&M1*
@@ -233,13 +235,15 @@
   synthetic constructor •() → self::A2*
     : super self::_A2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A0X = self::_A0X&S&M with self::MX {
   synthetic constructor •() → self::A0X*
@@ -255,7 +259,8 @@
   synthetic constructor •() → self::_A1X&S&M1&M*
     : super self::_A1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
   synthetic constructor •() → self::A1X*
@@ -276,7 +281,8 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M*
     : super self::_A2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::A2X*
@@ -287,7 +293,8 @@
   synthetic constructor •() → self::_B0&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B0 extends self::_B0&S&M {
   synthetic constructor •() → self::B0*
@@ -303,7 +310,8 @@
   synthetic constructor •() → self::_B1&S&M1&M*
     : super self::_B1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1*
@@ -324,7 +332,8 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M*
     : super self::_B2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2*
@@ -335,7 +344,8 @@
   synthetic constructor •() → self::_B0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B0X&S&M&MX*
@@ -356,7 +366,8 @@
   synthetic constructor •() → self::_B1X&S&M1&M*
     : super self::_B1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -382,7 +393,8 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M*
     : super self::_B2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.outline.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.outline.expect
index a645393..ffe0ebf 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.outline.expect
@@ -53,6 +53,8 @@
   const synthetic constructor •() → self::N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -68,6 +70,8 @@
   const synthetic constructor •() → self::_C&Object&N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -103,6 +107,8 @@
   const synthetic constructor •() → self::N2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -118,6 +124,8 @@
   const synthetic constructor •() → self::N3*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -133,6 +141,8 @@
   const synthetic constructor •() → self::_C2&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -152,6 +162,8 @@
   const synthetic constructor •() → self::_C3&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.expect
index d80d9f8..94fa4c4 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.expect
@@ -53,6 +53,8 @@
   const synthetic constructor •() → self::N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -68,6 +70,8 @@
   const synthetic constructor •() → self::_C&Object&N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -104,6 +108,8 @@
   const synthetic constructor •() → self::N2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -119,6 +125,8 @@
   const synthetic constructor •() → self::N3*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -134,6 +142,8 @@
   const synthetic constructor •() → self::_C2&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -154,6 +164,8 @@
   const synthetic constructor •() → self::_C3&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.transformed.expect
index 0206494..fb7371c 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.strong.transformed.expect
@@ -53,6 +53,7 @@
   const synthetic constructor •() → self::N*
     : super core::Object::•()
     ;
+  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
@@ -63,12 +64,12 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic {}
 }
 abstract class _C&Object&N extends core::Object implements self::N /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&N*
     : super core::Object::•()
     ;
+  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
@@ -79,7 +80,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic {}
 }
 class C extends self::_C&Object&N {
   synthetic constructor •() → self::C*
@@ -106,6 +106,7 @@
   const synthetic constructor •() → self::N2*
     : super core::Object::•()
     ;
+  method 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
@@ -116,12 +117,12 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class N3 extends core::Object implements self::M2 /*isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::N3*
     : super core::Object::•()
     ;
+  method 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
@@ -132,12 +133,12 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class _C2&Object&M2 extends core::Object implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C2&Object&M2*
     : super core::Object::•()
     ;
+  method 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
@@ -148,7 +149,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 class C2 extends self::_C2&Object&M2 {
   synthetic constructor •() → self::C2*
@@ -159,6 +159,7 @@
   const synthetic constructor •() → self::_C3&Object&M2*
     : super core::Object::•()
     ;
+  method 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
@@ -169,7 +170,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class C3 extends self::_C3&Object&M2 {
   synthetic constructor •() → self::C3*
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.outline.expect
index 6abaa8b..222ba3a 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.outline.expect
@@ -45,6 +45,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(covariant core::int* a, core::int* b) → dynamic
+    return super.{self::M1::method}(a, 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
@@ -61,7 +63,7 @@
     : super self::_C&Object&M1::•()
     ;
   forwarding-stub method method(covariant core::int* a, covariant core::int* b) → dynamic
-    return super.{self::M1::method}(a, b);
+    return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
   synthetic constructor •() → self::C*
@@ -284,20 +286,20 @@
     : super self::Superclass::•()
     ;
   forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
   forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed*
     ;
   forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.strong.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.strong.expect
index 4c79ba0..4fd3d8d 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.strong.expect
@@ -45,6 +45,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(covariant core::int* a, core::int* b) → dynamic
+    return super.{self::M1::method}(a, 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
@@ -61,7 +63,7 @@
     : super self::_C&Object&M1::•()
     ;
   forwarding-stub method method(covariant core::int* a, covariant core::int* b) → dynamic
-    return super.{self::M1::method}(a, b);
+    return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
   synthetic constructor •() → self::C*
@@ -284,21 +286,21 @@
     : super self::Superclass::•()
     ;
   forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
   forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed*
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
   forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
   self::testDirect();
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.strong.transformed.expect
index af45d4a..8069ae7 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.strong.transformed.expect
@@ -45,6 +45,7 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  method method(covariant core::int* a, core::int* b) → 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
@@ -55,7 +56,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 method(covariant core::int* a, core::int* b) → dynamic {}
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2*
@@ -326,7 +326,7 @@
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
   forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
-    return super.{self::Superclass::method}(a, b, c, d, e);
+    return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
   self::testDirect();
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
index 8a608cb..5adab63 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
@@ -50,11 +50,14 @@
   synthetic constructor •() → self::_Class&Superclass&Mixin*
     : super self::Superclass::•()
     ;
-  abstract forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*;
+  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method2}(argument1, argument2);
   forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
-    return super.{self::Superclass::method3}(argument1, argument2);
+    return super.{self::Mixin::method3}(argument1, argument2);
   forwarding-stub method method4(covariant core::num* argument1, covariant core::num* argument2) → core::String*
-    return super.{self::Superclass::method4}(argument1, argument2);
+    return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
   synthetic constructor •() → self::Class*
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
index 62e8537..716fe27 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
@@ -52,11 +52,14 @@
   synthetic constructor •() → self::_Class&Superclass&Mixin*
     : super self::Superclass::•()
     ;
-  abstract forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*;
+  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method2}(argument1, argument2);
   forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
-    return super.{self::Superclass::method3}(argument1, argument2);
+    return super.{self::Mixin::method3}(argument1, argument2);
   forwarding-stub method method4(covariant core::num* argument1, covariant core::num* argument2) → core::String*
-    return super.{self::Superclass::method4}(argument1, argument2);
+    return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
   synthetic constructor •() → self::Class*
@@ -65,7 +68,7 @@
 }
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::Mixin::method1}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1));
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1));
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1));
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1));
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect
new file mode 100644
index 0000000..59eca02
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect
@@ -0,0 +1,109 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass*
+    : super core::Object::•()
+    ;
+  method method1(core::num* argument1, core::num* argument2) → core::String*
+    return "Superclass";
+  method method2(core::num* argument1, core::num* argument2) → core::String*
+    return "Superclass";
+  method method3(core::num* argument1, covariant core::int* argument2) → core::String*
+    return "Superclass";
+  method method4(core::num* argument1, covariant core::num* argument2) → core::String*
+    return "Superclass";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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*
+    : super core::Object::•()
+    ;
+  method method1(core::num* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method3(core::num* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method4(covariant core::int* argument1, core::int* argument2) → core::String*
+    return "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 _Class&Superclass&Mixin extends self::Superclass implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Class&Superclass&Mixin*
+    : super self::Superclass::•()
+    ;
+  method method1(core::num* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method3(core::num* argument1, covariant core::num* argument2) → core::String*
+    return "Mixin";
+  method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
+    return "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
+}
+class Class extends self::_Class&Superclass&Mixin {
+  synthetic constructor •() → self::Class*
+    : super self::_Class&Superclass&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1));
+  self::Superclass* s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5));
+  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5));
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1));
+  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1));
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5));
+  self::Mixin* m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1));
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1));
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1));
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1));
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* void f) → void {
+  try {
+    f.call();
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
index 2fcf532..4366b2f 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
@@ -41,6 +41,12 @@
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
+  mixin-super-stub get _field() → self::B*
+    return super.{self::C::_field};
+  mixin-super-stub set _field(generic-covariant-impl self::B* value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(generic-covariant-impl self::B* x) → dynamic
+    return super.{self::C::foo}(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
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
index a06cb3c..5465909 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.expect
@@ -45,6 +45,12 @@
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
+  mixin-super-stub get _field() → self::B*
+    return super.{self::C::_field};
+  mixin-super-stub set _field(generic-covariant-impl self::B* value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(generic-covariant-impl self::B* x) → dynamic
+    return super.{self::C::foo}(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
@@ -68,5 +74,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•());
 }
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
index 86683a1..9828c0d 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.strong.transformed.expect
@@ -46,6 +46,9 @@
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
+  method foo(generic-covariant-impl self::B* x) → dynamic {
+    this.{self::C::_field} = 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
@@ -56,9 +59,6 @@
   abstract member-signature method toString() → core::String*; -> core::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(generic-covariant-impl self::B* x) → dynamic {
-    this.{self::C::_field} = x;
-  }
 }
 class Foo extends self::_Foo&Object&C {
   synthetic constructor •() → self::Foo*
@@ -72,5 +72,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•());
 }
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart b/pkg/front_end/testcases/general/mixin_stubs.dart
new file mode 100644
index 0000000..59f0691
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart
@@ -0,0 +1,98 @@
+// 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.
+
+abstract class Super {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin() {}
+  void abstractExtendsConcreteMixin();
+  void abstractExtendsAbstractMixin();
+}
+
+abstract class MixinClass {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin();
+  void concreteMixin() {}
+  void abstractExtendsConcreteMixin() {}
+  void abstractExtendsAbstractMixin();
+  void abstractMixin();
+}
+
+mixin Mixin {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin();
+  void concreteMixin() {}
+  void abstractExtendsConcreteMixin() {}
+  void abstractExtendsAbstractMixin();
+  void abstractMixin();
+}
+
+abstract class ClassEqMixinClass = Super with MixinClass;
+
+abstract class ClassExtendsMixinClass extends Super with MixinClass {}
+
+abstract class ClassEqMixin = Super with Mixin;
+
+abstract class ClassExtendsMixin extends Super with Mixin {}
+
+abstract class SubclassEqMixinClass extends ClassEqMixinClass {
+  method() {
+    concreteExtendsConcreteMixin();
+    concreteExtendsAbstractMixin();
+    concreteMixin();
+    abstractExtendsConcreteMixin();
+    abstractExtendsAbstractMixin();
+    abstractMixin();
+    super.concreteExtendsConcreteMixin();
+    super.concreteExtendsAbstractMixin();
+    super.concreteMixin();
+    super.abstractExtendsConcreteMixin();
+  }
+}
+
+abstract class SubclassExtendsMixinClass extends ClassExtendsMixinClass {
+  method() {
+    concreteExtendsConcreteMixin();
+    concreteMixin();
+    concreteExtendsAbstractMixin();
+    abstractExtendsConcreteMixin();
+    abstractExtendsAbstractMixin();
+    abstractMixin();
+    super.concreteExtendsConcreteMixin();
+    super.concreteExtendsAbstractMixin();
+    super.concreteMixin();
+    super.abstractExtendsConcreteMixin();
+  }
+}
+
+abstract class SubclassEqMixin extends ClassEqMixin {
+  method() {
+    concreteExtendsConcreteMixin();
+    concreteExtendsAbstractMixin();
+    concreteMixin();
+    abstractExtendsConcreteMixin();
+    abstractExtendsAbstractMixin();
+    abstractMixin();
+    super.concreteExtendsConcreteMixin();
+    super.concreteExtendsAbstractMixin();
+    super.concreteMixin();
+    super.abstractExtendsConcreteMixin();
+  }
+}
+
+abstract class SubclassExtendsMixin extends ClassExtendsMixin {
+  method() {
+    concreteExtendsConcreteMixin();
+    concreteExtendsAbstractMixin();
+    concreteMixin();
+    abstractExtendsConcreteMixin();
+    abstractExtendsAbstractMixin();
+    abstractMixin();
+    super.concreteExtendsConcreteMixin();
+    super.concreteExtendsAbstractMixin();
+    super.concreteMixin();
+    super.abstractExtendsConcreteMixin();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect
new file mode 100644
index 0000000..a5302a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect
@@ -0,0 +1,146 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    ;
+  method concreteExtendsConcreteMixin() → void
+    ;
+  method concreteExtendsAbstractMixin() → void
+    ;
+  abstract method abstractExtendsConcreteMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → 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 MixinClass extends core::Object {
+  synthetic constructor •() → self::MixinClass*
+    ;
+  method concreteExtendsConcreteMixin() → void
+    ;
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void
+    ;
+  method abstractExtendsConcreteMixin() → void
+    ;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 Mixin extends core::Object /*isMixinDeclaration*/  {
+  method concreteExtendsConcreteMixin() → void
+    ;
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void
+    ;
+  method abstractExtendsConcreteMixin() → void
+    ;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 ClassEqMixinClass = self::Super with self::MixinClass {
+  synthetic constructor •() → self::ClassEqMixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+}
+abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+}
+abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
+  synthetic constructor •() → self::ClassExtendsMixinClass*
+    ;
+}
+abstract class ClassEqMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::ClassEqMixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+}
+abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+}
+abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassExtendsMixin*
+    ;
+}
+abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
+  synthetic constructor •() → self::SubclassEqMixinClass*
+    ;
+  method method() → dynamic
+    ;
+}
+abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
+  synthetic constructor •() → self::SubclassExtendsMixinClass*
+    ;
+  method method() → dynamic
+    ;
+}
+abstract class SubclassEqMixin extends self::ClassEqMixin {
+  synthetic constructor •() → self::SubclassEqMixin*
+    ;
+  method method() → dynamic
+    ;
+}
+abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
+  synthetic constructor •() → self::SubclassExtendsMixin*
+    ;
+  method method() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect
new file mode 100644
index 0000000..940088e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect
@@ -0,0 +1,185 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteExtendsAbstractMixin() → void {}
+  abstract method abstractExtendsConcreteMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → 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 MixinClass extends core::Object {
+  synthetic constructor •() → self::MixinClass*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 Mixin extends core::Object /*isMixinDeclaration*/  {
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 ClassEqMixinClass = self::Super with self::MixinClass {
+  synthetic constructor •() → self::ClassEqMixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+}
+abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+}
+abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
+  synthetic constructor •() → self::ClassExtendsMixinClass*
+    : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
+    ;
+}
+abstract class ClassEqMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::ClassEqMixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+}
+abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+}
+abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassExtendsMixin*
+    : super self::_ClassExtendsMixin&Super&Mixin::•()
+    ;
+}
+abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
+  synthetic constructor •() → self::SubclassEqMixinClass*
+    : super self::ClassEqMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
+    this.{self::MixinClass::concreteExtendsAbstractMixin}();
+    this.{self::ClassEqMixinClass::concreteMixin}();
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
+    this.{self::MixinClass::abstractExtendsAbstractMixin}();
+    this.{self::MixinClass::abstractMixin}();
+    super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixinClass::concreteMixin}();
+    super.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
+  synthetic constructor •() → self::SubclassExtendsMixinClass*
+    : super self::ClassExtendsMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
+    this.{self::MixinClass::concreteExtendsAbstractMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
+    this.{self::MixinClass::abstractExtendsAbstractMixin}();
+    this.{self::MixinClass::abstractMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassEqMixin extends self::ClassEqMixin {
+  synthetic constructor •() → self::SubclassEqMixin*
+    : super self::ClassEqMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
+    this.{self::Mixin::concreteExtendsAbstractMixin}();
+    this.{self::ClassEqMixin::concreteMixin}();
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
+    this.{self::Mixin::abstractExtendsAbstractMixin}();
+    this.{self::Mixin::abstractMixin}();
+    super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixin::concreteMixin}();
+    super.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
+  synthetic constructor •() → self::SubclassExtendsMixin*
+    : super self::ClassExtendsMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
+    this.{self::Mixin::concreteExtendsAbstractMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
+    this.{self::Mixin::abstractExtendsAbstractMixin}();
+    this.{self::Mixin::abstractMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect
new file mode 100644
index 0000000..01a2d50
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect
@@ -0,0 +1,225 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteExtendsAbstractMixin() → void {}
+  abstract method abstractExtendsConcreteMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → 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 MixinClass extends core::Object {
+  synthetic constructor •() → self::MixinClass*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 Mixin extends core::Object /*isMixinDeclaration*/  {
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 ClassEqMixinClass extends self::Super implements self::MixinClass /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::ClassEqMixinClass*
+    : super self::Super::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 _ClassExtendsMixinClass&Super&MixinClass extends self::Super implements self::MixinClass /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+    : super self::Super::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
+  synthetic constructor •() → self::ClassExtendsMixinClass*
+    : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
+    ;
+}
+abstract class ClassEqMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::ClassEqMixin*
+    : super self::Super::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 _ClassExtendsMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+    : super self::Super::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → 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 ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassExtendsMixin*
+    : super self::_ClassExtendsMixin&Super&Mixin::•()
+    ;
+}
+abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
+  synthetic constructor •() → self::SubclassEqMixinClass*
+    : super self::ClassEqMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
+    this.{self::MixinClass::concreteExtendsAbstractMixin}();
+    this.{self::ClassEqMixinClass::concreteMixin}();
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
+    this.{self::MixinClass::abstractExtendsAbstractMixin}();
+    this.{self::MixinClass::abstractMixin}();
+    super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixinClass::concreteMixin}();
+    super.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
+  synthetic constructor •() → self::SubclassExtendsMixinClass*
+    : super self::ClassExtendsMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
+    this.{self::MixinClass::concreteExtendsAbstractMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
+    this.{self::MixinClass::abstractExtendsAbstractMixin}();
+    this.{self::MixinClass::abstractMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassEqMixin extends self::ClassEqMixin {
+  synthetic constructor •() → self::SubclassEqMixin*
+    : super self::ClassEqMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
+    this.{self::Mixin::concreteExtendsAbstractMixin}();
+    this.{self::ClassEqMixin::concreteMixin}();
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
+    this.{self::Mixin::abstractExtendsAbstractMixin}();
+    this.{self::Mixin::abstractMixin}();
+    super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixin::concreteMixin}();
+    super.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
+  synthetic constructor •() → self::SubclassExtendsMixin*
+    : super self::ClassExtendsMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
+    this.{self::Mixin::concreteExtendsAbstractMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
+    this.{self::Mixin::abstractExtendsAbstractMixin}();
+    this.{self::Mixin::abstractMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect
new file mode 100644
index 0000000..9a72527
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect
@@ -0,0 +1,49 @@
+abstract class Super {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin() {}
+  void abstractExtendsConcreteMixin();
+  void abstractExtendsAbstractMixin();
+}
+
+abstract class MixinClass {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin();
+  void concreteMixin() {}
+  void abstractExtendsConcreteMixin() {}
+  void abstractExtendsAbstractMixin();
+  void abstractMixin();
+}
+
+mixin Mixin {
+  void concreteExtendsConcreteMixin() {}
+  void concreteExtendsAbstractMixin();
+  void concreteMixin() {}
+  void abstractExtendsConcreteMixin() {}
+  void abstractExtendsAbstractMixin();
+  void abstractMixin();
+}
+abstract class ClassEqMixinClass = Super with MixinClass;
+
+abstract class ClassExtendsMixinClass extends Super with MixinClass {}
+
+abstract class ClassEqMixin = Super with Mixin;
+
+abstract class ClassExtendsMixin extends Super with Mixin {}
+
+abstract class SubclassEqMixinClass extends ClassEqMixinClass {
+  method() {}
+}
+
+abstract class SubclassExtendsMixinClass extends ClassExtendsMixinClass {
+  method() {}
+}
+
+abstract class SubclassEqMixin extends ClassEqMixin {
+  method() {}
+}
+
+abstract class SubclassExtendsMixin extends ClassExtendsMixin {
+  method() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b8362ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect
@@ -0,0 +1,48 @@
+abstract class ClassEqMixin = Super with Mixin;
+abstract class ClassEqMixinClass = Super with MixinClass;
+
+abstract class ClassExtendsMixin extends Super with Mixin {}
+
+abstract class ClassExtendsMixinClass extends Super with MixinClass {}
+
+abstract class MixinClass {
+  void abstractExtendsAbstractMixin();
+  void abstractExtendsConcreteMixin() {}
+  void abstractMixin();
+  void concreteExtendsAbstractMixin();
+  void concreteExtendsConcreteMixin() {}
+  void concreteMixin() {}
+}
+
+abstract class SubclassEqMixin extends ClassEqMixin {
+  method() {}
+}
+
+abstract class SubclassEqMixinClass extends ClassEqMixinClass {
+  method() {}
+}
+
+abstract class SubclassExtendsMixin extends ClassExtendsMixin {
+  method() {}
+}
+
+abstract class SubclassExtendsMixinClass extends ClassExtendsMixinClass {
+  method() {}
+}
+
+abstract class Super {
+  void abstractExtendsAbstractMixin();
+  void abstractExtendsConcreteMixin();
+  void concreteExtendsAbstractMixin() {}
+  void concreteExtendsConcreteMixin() {}
+}
+
+main() {}
+mixin Mixin {
+  void abstractExtendsAbstractMixin();
+  void abstractExtendsConcreteMixin() {}
+  void abstractMixin();
+  void concreteExtendsAbstractMixin();
+  void concreteExtendsConcreteMixin() {}
+  void concreteMixin() {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.outline.expect
index 54fe5ac..1a4626c 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.outline.expect
@@ -43,16 +43,28 @@
   synthetic constructor •() → self::_Named&S&M*
     : super self::S::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Named&S&M&N*
     : super self::_Named&S&M::•()
     ;
+  mixin-super-stub get superM() → dynamic
+    return super.{self::N::superM};
+  mixin-super-stub set superM(dynamic value) → void
+    return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
   synthetic constructor •() → self::Named*
     : super self::_Named&S&M&N::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.expect
index 2dfa48d..e9d4ae3 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.expect
@@ -47,25 +47,37 @@
   synthetic constructor •() → self::_Named&S&M*
     : super self::S::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Named&S&M&N*
     : super self::_Named&S&M::•()
     ;
+  mixin-super-stub get superM() → dynamic
+    return super.{self::N::superM};
+  mixin-super-stub set superM(dynamic value) → void
+    return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
   synthetic constructor •() → self::Named*
     : super self::_Named&S&M&N::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 static method main() → dynamic {
   self::Named* named = new self::Named::•();
-  named.{self::M::m} = 42;
-  named.{self::N::superM} = 87;
-  if(!named.{self::M::m}.{core::Object::==}(42)) {
+  named.{self::Named::m} = 42;
+  named.{self::_Named&S&M&N::superM} = 87;
+  if(!named.{self::Named::m}.{core::Object::==}(42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::N::superM}.{core::Object::==}(87)) {
+  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.transformed.expect
index 2d6e534..94ee731 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.strong.transformed.expect
@@ -63,11 +63,11 @@
   synthetic constructor •() → self::_Named&S&M&N*
     : super self::_Named&S&M::•()
     ;
+  get superM() → dynamic
+    return super.{self::M::m};
   set superM(dynamic value) → void {
     super.{self::M::m} = value;
   }
-  get superM() → dynamic
-    return super.{self::M::m};
 }
 class Named extends self::_Named&S&M&N implements self::M /*isEliminatedMixin*/  {
   field dynamic m = null;
@@ -87,12 +87,12 @@
 }
 static method main() → dynamic {
   self::Named* named = new self::Named::•();
-  named.{self::M::m} = 42;
-  named.{self::N::superM} = 87;
-  if(!named.{self::M::m}.{core::Object::==}(42)) {
+  named.{self::Named::m} = 42;
+  named.{self::_Named&S&M&N::superM} = 87;
+  if(!named.{self::Named::m}.{core::Object::==}(42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::N::superM}.{core::Object::==}(87)) {
+  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/qualified.dart.outline.expect b/pkg/front_end/testcases/general/qualified.dart.outline.expect
index a2be5c4..fcf8ecc 100644
--- a/pkg/front_end/testcases/general/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.outline.expect
@@ -51,6 +51,8 @@
   synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
     : super lib::Supertype::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → self::WithMixin*
@@ -71,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → self::C<self::C::T*>*
     ;
   constructor a() → self::C<self::C::T*>*
@@ -101,7 +103,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
   constructor •() → lib::C<lib::C::T*>*
     ;
   constructor a() → lib::C<lib::C::T*>*
diff --git a/pkg/front_end/testcases/general/qualified.dart.strong.expect b/pkg/front_end/testcases/general/qualified.dart.strong.expect
index 235cf2c..a51969d 100644
--- a/pkg/front_end/testcases/general/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.strong.expect
@@ -49,6 +49,8 @@
   synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
     : super lib::Supertype::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → self::WithMixin*
@@ -71,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -99,7 +101,7 @@
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
   new self::IllegalSupertype::•();
 }
 
@@ -112,7 +114,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/general/qualified.dart.strong.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.strong.transformed.expect
index 60c9dc5..3937b15 100644
--- a/pkg/front_end/testcases/general/qualified.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -112,7 +112,7 @@
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
   new self::IllegalSupertype::•();
 }
 
@@ -125,7 +125,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.outline.expect
index 2a6e7ee..6128d70 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
   constructor •() → self::A*
     ;
   static factory fisk() → self::A*
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.expect
index 43520af..7443e13 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.transformed.expect
index ff02ffa..0ed4fed 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
index 0b2651b..9a9214d 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
@@ -28,7 +28,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -74,7 +74,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -89,7 +89,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.strong.expect
index b6af2c6..71c6c5f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.strong.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
@@ -28,7 +28,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -78,7 +78,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.strong.transformed.expect
index 405a5a2..7cdb54a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     let <T extends core::Object* = dynamic>(core::int*) →* self::Foo<T*>* #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
@@ -28,7 +28,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     let<BottomType> #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -78,7 +78,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     let <Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() →* self::SimpleCaseImpl<Ai*, Bi*>* #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     let<BottomType> #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
index 9a864d0..7df5d5f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
   constructor •() → self::A*
     ;
   static factory first() → self::A*
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.expect
index e3f106c..88615ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.transformed.expect
index 03c3664..cab046f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.outline.expect
index 7d51f0c..23d11ab 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
index 5530c67..9c109d5 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
index 4e5e906..bea6536 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     let<BottomType> #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
index 55876a5..31008cf 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   constructor named(dynamic p) → self::Foo*
     ;
   @self::forFactoryItself
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.expect
index 0426b6e..5da2827 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.transformed.expect
index bcd4eae..4dc094e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
index a0e6392..43d5697 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.expect
index 524f4b5..de93fd8 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.transformed.expect
index 2220b80..5aec6a3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
index 8e4e605..fe27ae5 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
@@ -21,7 +21,7 @@
     ;
 }
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.expect
index 017afcf..9ada94b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.transformed.expect
index 3396ff7..da09dec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
index 35e7e80..edba967 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.expect
index 1a6b1c1..19f5ced 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.transformed.expect
index 0be30d7..b6de55f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
index 16ca154..2551eab 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
@@ -21,7 +21,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.expect
index 6c016e3..521ea4e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.transformed.expect
index 0e2c3d5..8409594 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.outline.expect
index c0e71db..abc8779 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.outline.expect
@@ -5,7 +5,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
@@ -22,7 +22,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.expect
index 4d1fc6a..e9d6519 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.transformed.expect
index 579f622..30b74d9 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.outline.expect
index 3eb558f..9e95322 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.outline.expect
@@ -5,7 +5,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
@@ -22,7 +22,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.expect
index aacff54..8f23e49 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.transformed.expect
index 2acaca4..25434a1 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.outline.expect
index 6575c3a..ca134d1 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.outline.expect
@@ -5,7 +5,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
index b2e2f7d..fdc3e04 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
index 431dcbe..7550d4d 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart b/pkg/front_end/testcases/general/super_set_abstract.dart
new file mode 100644
index 0000000..2bc0c7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart
@@ -0,0 +1,23 @@
+// 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.
+
+class SuperClass {
+  void set setter(int o) {}
+}
+
+abstract class Class extends SuperClass {
+  void set setter(Object o);
+}
+
+class SubClass extends Class {
+  void set setter(Object o) {
+    super.setter = '$o';
+  }
+}
+
+test() {
+  new SubClass().setter = '0';
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.outline.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.outline.expect
new file mode 100644
index 0000000..265157d
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.outline.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    ;
+  set setter(core::int* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    ;
+  abstract set setter(core::Object* o) → void;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    ;
+  set setter(core::Object* o) → void
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.strong.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.strong.expect
new file mode 100644
index 0000000..e1d8a1a
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.strong.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     super.setter = '$o';
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::int* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  abstract set setter(core::Object* o) → void;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(core::Object* o) → void {
+    super.{self::SuperClass::setter} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.setter = '\$o';
+                       ^" in "${o}" as{TypeError} core::int*;
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = "0";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.strong.transformed.expect
new file mode 100644
index 0000000..e1d8a1a
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.strong.transformed.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     super.setter = '$o';
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::int* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  abstract set setter(core::Object* o) → void;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(core::Object* o) → void {
+    super.{self::SuperClass::setter} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.setter = '\$o';
+                       ^" in "${o}" as{TypeError} core::int*;
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = "0";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect
new file mode 100644
index 0000000..0310022
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class SuperClass {
+  void set setter(int o) {}
+}
+
+abstract class Class extends SuperClass {
+  void set setter(Object o);
+}
+
+class SubClass extends Class {
+  void set setter(Object o) {}
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2833ed3
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+abstract class Class extends SuperClass {
+  void set setter(Object o);
+}
+
+class SubClass extends Class {
+  void set setter(Object o) {}
+}
+
+class SuperClass {
+  void set setter(int o) {}
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart b/pkg/front_end/testcases/general/super_set_covariant.dart
new file mode 100644
index 0000000..41561ff
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.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.
+
+class SuperClass {
+  void set setter(Object o) {}
+}
+
+abstract class Class extends SuperClass {
+  // TODO(johnniwinther): Should this introduce a concrete forwarding stub, and
+  // if so, should the target of the super set below be the forwarding super
+  // stub?
+  void set setter(covariant int o);
+}
+
+class SubClass extends Class {
+  void set setter(covariant int o) {
+    super.setter = '$o';
+  }
+}
+
+test() {
+  new SubClass().setter = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.outline.expect
new file mode 100644
index 0000000..550fdb5
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.outline.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    ;
+  set setter(core::Object* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    ;
+  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+    return super.{self::SuperClass::setter} = o;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    ;
+  set setter(covariant core::int* o) → void
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.strong.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.strong.expect
new file mode 100644
index 0000000..a1604af
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.strong.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     super.setter = '$o';
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::Object* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+    return super.{self::SuperClass::setter} = o;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(covariant core::int* o) → void {
+    super.{self::Class::setter} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.setter = '\$o';
+                       ^" in "${o}" as{TypeError} core::int*;
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.strong.transformed.expect
new file mode 100644
index 0000000..a1604af
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.strong.transformed.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     super.setter = '$o';
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::Object* o) → 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 Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+    return super.{self::SuperClass::setter} = o;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(covariant core::int* o) → void {
+    super.{self::Class::setter} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.setter = '\$o';
+                       ^" in "${o}" as{TypeError} core::int*;
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect
new file mode 100644
index 0000000..8a079ae
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class SuperClass {
+  void set setter(Object o) {}
+}
+
+abstract class Class extends SuperClass {
+  void set setter(covariant int o);
+}
+
+class SubClass extends Class {
+  void set setter(covariant int o) {}
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b6f108c
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+abstract class Class extends SuperClass {
+  void set setter(covariant int o);
+}
+
+class SubClass extends Class {
+  void set setter(covariant int o) {}
+}
+
+class SuperClass {
+  void set setter(Object o) {}
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.outline.expect
index 5fd69f1..856c6d2 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.outline.expect
@@ -15,6 +15,10 @@
   synthetic constructor •() → self2::_Foo&B&D*
     : super self2::B::•()
     ;
+  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+    return super.{self2::D::==}(dynamic);
+  mixin-super-stub method x() → void
+    return super.{self2::D::x}();
 }
 class Foo extends self2::_Foo&B&D {
   synthetic constructor •() → self2::Foo*
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.expect
index b447568..454b091 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.expect
@@ -14,11 +14,11 @@
     throw "what?";
   foo1.{mix::_Foo&B&D::x}();
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::D::==}(null))
+  if(foo2.{mix2::_Foo&B&D::==}(null))
     throw "what?";
-  if(!foo2.{mix2::D::==}(foo2))
+  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
     throw "what?";
-  foo2.{mix2::D::x}();
+  foo2.{mix2::_Foo&B&D::x}();
 }
 
 library;
@@ -29,6 +29,10 @@
   synthetic constructor •() → mix2::_Foo&B&D*
     : super mix2::B::•()
     ;
+  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+    return super.{mix2::D::==}(dynamic);
+  mixin-super-stub method x() → void
+    return super.{mix2::D::x}();
 }
 class Foo extends mix2::_Foo&B&D {
   synthetic constructor •() → mix2::Foo*
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.transformed.expect
index 162e4c9..23930b7 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.strong.transformed.expect
@@ -14,11 +14,11 @@
     throw "what?";
   foo1.{mix::_Foo&B&D::x}();
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::D::==}(null))
+  if(foo2.{mix2::_Foo&B&D::==}(null))
     throw "what?";
-  if(!foo2.{mix2::D::==}(foo2))
+  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
     throw "what?";
-  foo2.{mix2::D::x}();
+  foo2.{mix2::_Foo&B&D::x}();
 }
 
 library;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.expect
index 8ef2a75..2f79c22 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.expect
@@ -41,6 +41,8 @@
   const synthetic constructor •() → self::_MyTest2&Object&MyTest*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → void
+    return super.{self::MyTest::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
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.transformed.expect
index 79c9584..b0e0947 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug33099.dart.weak.transformed.expect
@@ -41,6 +41,8 @@
   const synthetic constructor •() → self::_MyTest2&Object&MyTest*
     : super core::Object::•()
     ;
+  @#C1
+  method foo() → 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
@@ -51,8 +53,6 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  @#C1
-  method foo() → void {}
 }
 class MyTest2 extends self::_MyTest2&Object&MyTest {
   synthetic constructor •() → self::MyTest2*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
index b3bcf67..60fc7d3 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
@@ -55,7 +55,7 @@
     : super self::A::•()
     ;
   forwarding-stub method foo(covariant core::num* x) → void
-    return super.{self::A::foo}(x);
+    return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.expect
index 66b58bc..ca5af00 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
   constructor •() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.transformed.expect
index 4b8fb16..2c369c9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_cast.dart.weak.transformed.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
   constructor •() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.expect
index 2851dfc..1f1f19e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.expect
@@ -6,6 +6,8 @@
   const synthetic constructor •() → self::_B&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -21,6 +23,8 @@
   const synthetic constructor •() → self::_B&Object&M1&M2*
     : super self::_B&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
   constructor •(dynamic value) → self::B*
@@ -65,6 +69,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::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
@@ -80,6 +86,8 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
   constructor •(dynamic value) → self::C*
@@ -107,6 +115,8 @@
   const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
     : super core::Object::•()
     ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::G1::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
@@ -124,9 +134,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::M2::m}();
-  new self::C::•(null).{self::M2::m}();
-  new self::D::•<dynamic>().{self::G1::m}();
-  new self::D::•<core::int*>().{self::G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}();
+  new self::C::•(null).{self::_C&Object&M1&M2::m}();
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.transformed.expect
index 0ddd631..a6c21d2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin.dart.weak.transformed.expect
@@ -6,6 +6,8 @@
   const synthetic constructor •() → self::_B&Object&M1*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print("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
@@ -16,8 +18,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print("M1");
 }
 abstract class _B&Object&M1&M2 extends self::_B&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M1&M2*
@@ -79,6 +79,8 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print("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
@@ -89,8 +91,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print("M1");
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2*
@@ -135,6 +135,8 @@
   const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
     : super core::Object::•()
     ;
+  method m() → dynamic
+    return core::print(self::_D&Object&G1::S*);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -145,8 +147,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return core::print(self::_D&Object&G1::S*);
 }
 class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
   synthetic constructor •() → self::D<self::D::S*>*
@@ -154,9 +154,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::M2::m}();
-  new self::C::•(null).{self::M2::m}();
-  new self::D::•<dynamic>().{self::G1::m}();
-  new self::D::•<core::int*>().{self::G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}();
+  new self::C::•(null).{self::_C&Object&M1&M2::m}();
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
index 67c9729..df77c0e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
@@ -206,7 +206,8 @@
   synthetic constructor •() → self::A0*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A1&S&M1*
@@ -217,7 +218,8 @@
   synthetic constructor •() → self::A1*
     : super self::_A1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A2&S&M1*
@@ -233,13 +235,15 @@
   synthetic constructor •() → self::A2*
     : super self::_A2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A0X = self::_A0X&S&M with self::MX {
   synthetic constructor •() → self::A0X*
@@ -255,7 +259,8 @@
   synthetic constructor •() → self::_A1X&S&M1&M*
     : super self::_A1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
   synthetic constructor •() → self::A1X*
@@ -276,7 +281,8 @@
   synthetic constructor •() → self::_A2X&S&M1&M2&M*
     : super self::_A2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
   synthetic constructor •() → self::A2X*
@@ -287,7 +293,8 @@
   synthetic constructor •() → self::_B0&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B0 extends self::_B0&S&M {
   synthetic constructor •() → self::B0*
@@ -303,7 +310,8 @@
   synthetic constructor •() → self::_B1&S&M1&M*
     : super self::_B1&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B1 extends self::_B1&S&M1&M {
   synthetic constructor •() → self::B1*
@@ -324,7 +332,8 @@
   synthetic constructor •() → self::_B2&S&M1&M2&M*
     : super self::_B2&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 class B2 extends self::_B2&S&M1&M2&M {
   synthetic constructor •() → self::B2*
@@ -335,7 +344,8 @@
   synthetic constructor •() → self::_B0X&S&M*
     : super self::S::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B0X&S&M&MX*
@@ -356,7 +366,8 @@
   synthetic constructor •() → self::_B1X&S&M1&M*
     : super self::_B1X&S&M1::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -382,7 +393,8 @@
   synthetic constructor •() → self::_B2X&S&M1&M2&M*
     : super self::_B2X&S&M1&M2::•()
     ;
-  abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
+  mixin-super-stub method foo([dynamic x = #C1]) → dynamic
+    return super.{self::M::foo}(x);
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.expect
index 7d4f4df..dc46359 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.expect
@@ -53,6 +53,8 @@
   const synthetic constructor •() → self::N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -68,6 +70,8 @@
   const synthetic constructor •() → self::_C&Object&N*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::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
@@ -104,6 +108,8 @@
   const synthetic constructor •() → self::N2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -119,6 +125,8 @@
   const synthetic constructor •() → self::N3*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -134,6 +142,8 @@
   const synthetic constructor •() → self::_C2&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
@@ -154,6 +164,8 @@
   const synthetic constructor •() → self::_C3&Object&M2*
     : super core::Object::•()
     ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::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
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.transformed.expect
index 302eded..ad31c58 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_conflicts.dart.weak.transformed.expect
@@ -53,6 +53,7 @@
   const synthetic constructor •() → self::N*
     : super core::Object::•()
     ;
+  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
@@ -63,12 +64,12 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic {}
 }
 abstract class _C&Object&N extends core::Object implements self::N /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&N*
     : super core::Object::•()
     ;
+  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
@@ -79,7 +80,6 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic {}
 }
 class C extends self::_C&Object&N {
   synthetic constructor •() → self::C*
@@ -106,6 +106,7 @@
   const synthetic constructor •() → self::N2*
     : super core::Object::•()
     ;
+  method 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
@@ -116,12 +117,12 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class N3 extends core::Object implements self::M2 /*isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::N3*
     : super core::Object::•()
     ;
+  method 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
@@ -132,12 +133,12 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class _C2&Object&M2 extends core::Object implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C2&Object&M2*
     : super core::Object::•()
     ;
+  method 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
@@ -148,7 +149,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 class C2 extends self::_C2&Object&M2 {
   synthetic constructor •() → self::C2*
@@ -159,6 +159,7 @@
   const synthetic constructor •() → self::_C3&Object&M2*
     : super core::Object::•()
     ;
+  method 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
@@ -169,7 +170,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 bar() → dynamic {}
 }
 abstract class C3 extends self::_C3&Object&M2 {
   synthetic constructor •() → self::C3*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
index a06cb3c..5465909 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
@@ -45,6 +45,12 @@
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
+  mixin-super-stub get _field() → self::B*
+    return super.{self::C::_field};
+  mixin-super-stub set _field(generic-covariant-impl self::B* value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(generic-covariant-impl self::B* x) → dynamic
+    return super.{self::C::foo}(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
@@ -68,5 +74,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•());
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
index 86683a1..9828c0d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
@@ -46,6 +46,9 @@
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
+  method foo(generic-covariant-impl self::B* x) → dynamic {
+    this.{self::C::_field} = 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
@@ -56,9 +59,6 @@
   abstract member-signature method toString() → core::String*; -> core::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(generic-covariant-impl self::B* x) → dynamic {
-    this.{self::C::_field} = x;
-  }
 }
 class Foo extends self::_Foo&Object&C {
   synthetic constructor •() → self::Foo*
@@ -72,5 +72,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•());
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.expect
index 2dfa48d..e9d4ae3 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.expect
@@ -47,25 +47,37 @@
   synthetic constructor •() → self::_Named&S&M*
     : super self::S::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Named&S&M&N*
     : super self::_Named&S&M::•()
     ;
+  mixin-super-stub get superM() → dynamic
+    return super.{self::N::superM};
+  mixin-super-stub set superM(dynamic value) → void
+    return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
   synthetic constructor •() → self::Named*
     : super self::_Named&S&M&N::•()
     ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
 }
 static method main() → dynamic {
   self::Named* named = new self::Named::•();
-  named.{self::M::m} = 42;
-  named.{self::N::superM} = 87;
-  if(!named.{self::M::m}.{core::Object::==}(42)) {
+  named.{self::Named::m} = 42;
+  named.{self::_Named&S&M&N::superM} = 87;
+  if(!named.{self::Named::m}.{core::Object::==}(42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::N::superM}.{core::Object::==}(87)) {
+  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.transformed.expect
index 2d6e534..94ee731 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_super_repeated.dart.weak.transformed.expect
@@ -63,11 +63,11 @@
   synthetic constructor •() → self::_Named&S&M&N*
     : super self::_Named&S&M::•()
     ;
+  get superM() → dynamic
+    return super.{self::M::m};
   set superM(dynamic value) → void {
     super.{self::M::m} = value;
   }
-  get superM() → dynamic
-    return super.{self::M::m};
 }
 class Named extends self::_Named&S&M&N implements self::M /*isEliminatedMixin*/  {
   field dynamic m = null;
@@ -87,12 +87,12 @@
 }
 static method main() → dynamic {
   self::Named* named = new self::Named::•();
-  named.{self::M::m} = 42;
-  named.{self::N::superM} = 87;
-  if(!named.{self::M::m}.{core::Object::==}(42)) {
+  named.{self::Named::m} = 42;
+  named.{self::_Named&S&M&N::superM} = 87;
+  if(!named.{self::Named::m}.{core::Object::==}(42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::N::superM}.{core::Object::==}(87)) {
+  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.expect
index 4965963..ec198b7 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.expect
@@ -49,6 +49,8 @@
   synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
     : super lib::Supertype::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
   synthetic constructor •() → self::WithMixin*
@@ -71,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -99,7 +101,7 @@
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
   new self::IllegalSupertype::•();
 }
 
@@ -112,7 +114,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.transformed.expect
index f02b9cc..9998bef 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/qualified.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -112,7 +112,7 @@
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
   new self::IllegalSupertype::•();
 }
 
@@ -125,7 +125,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.expect
index 43520af..7443e13 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.transformed.expect
index ff02ffa..0ed4fed 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.expect
index 42cc2c5..7a6504b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
@@ -28,7 +28,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -78,7 +78,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.transformed.expect
index c4ed837..a63abfb 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     let <T extends core::Object* = dynamic>(core::int*) →* self::Foo<T*>* #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
@@ -28,7 +28,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     let<BottomType> #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -78,7 +78,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     let <Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() →* self::SimpleCaseImpl<Ai*, Bi*>* #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -93,7 +93,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     let<BottomType> #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.expect
index e3f106c..88615ec 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.transformed.expect
index 03c3664..cab046f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_chain_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.expect
index 4edee7a..046d379 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.transformed.expect
index 4ac209c..7c20f05 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     let<BottomType> #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.expect
index 0426b6e..5da2827 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.transformed.expect
index bcd4eae..4dc094e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_metadata.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.expect
index 524f4b5..de93fd8 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.transformed.expect
index 2220b80..5aec6a3 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_simple_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.expect
index 017afcf..9ada94b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.transformed.expect
index 3396ff7..da09dec 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeargs_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.expect
index 1a6b1c1..19f5ced 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.transformed.expect
index 0be30d7..b6de55f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparam_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.expect
index 6c016e3..521ea4e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
index 0e2c3d5..8409594 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.expect
index 4d1fc6a..e9d6519 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.transformed.expect
index 579f622..30b74d9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.expect
index aacff54..8f23e49 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
index 2acaca4..25434a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[self::B::•];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.expect
index 98086a1..7f62ccc 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.transformed.expect
index 0d879dc..58e796a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/redirection_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[self::A::•];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_8.yaml.world.1.expect
index 309dfe4..cde35c2 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_8.yaml.world.1.expect
@@ -12,7 +12,7 @@
   import "package:module/lib2.dart";
 
   abstract class XSet extends dart.core::Object {
-    static field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
     static factory identity() → lib1::XSet*
       let dynamic #redirecting_factory = lib2::XLinkedHashSet::identity in invalid-expression;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -33,7 +33,7 @@
   import "package:module/lib3.dart";
 
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
-    static field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
     static factory identity() → lib2::XLinkedHashSet*
       let dynamic #redirecting_factory = lib3::XIdentityHashSet::• in invalid-expression;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.1.expect
index 223e672..3b0a7e5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.1.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.2.expect
index cb55d11..bec03e7 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/crash_test_1.yaml.world.2.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
index 04687de..20bd0f2 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
@@ -23,6 +23,8 @@
     const synthetic constructor •() → fra::_State&Object&Diagnosticable
       : super dart.core::Object::•()
       ;
+    mixin-super-stub method toString() → dart.core::String
+      return super.{fra::Diagnosticable::toString}();
   }
   abstract class State<T extends fra::StatefulWidget = fra::StatefulWidget> extends fra::_State&Object&Diagnosticable {
     generic-covariant-impl field fra::State::T? _widget = null;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
index f4a141b..89c1841 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
@@ -23,6 +23,8 @@
     const synthetic constructor •() → fra::_State&Object&Diagnosticable
       : super dart.core::Object::•()
       ;
+    mixin-super-stub method toString() → dart.core::String
+      return super.{fra::Diagnosticable::toString}();
   }
   abstract class State<T extends fra::StatefulWidget = fra::StatefulWidget> extends fra::_State&Object&Diagnosticable {
     generic-covariant-impl field fra::State::T? _widget = null;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.1.expect
index d40aeb92..d4fdb52 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.1.expect
@@ -45,7 +45,7 @@
       return #C7;
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
@@ -53,7 +53,7 @@
       let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.2.expect
index ec1cec8..5db0fd8 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.2.expect
@@ -45,7 +45,7 @@
       return #C7;
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
@@ -53,7 +53,7 @@
       let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.3.expect
index d40aeb92..d4fdb52 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_const.yaml.world.3.expect
@@ -45,7 +45,7 @@
       return #C7;
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
@@ -53,7 +53,7 @@
       let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_41976.yaml.world.1.expect
index aca5281..d9b1730 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_41976.yaml.world.1.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   abstract class Key extends dart.core::Object /*hasConstConstructor*/  {
-    static field dynamic _redirecting# = <dynamic>[foo::Key::•];
+    static final field dynamic _redirecting# = <dynamic>[foo::Key::•];
     const constructor empty() → foo::Key*
       : super dart.core::Object::•()
       ;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.1.expect
index c42f8e4..9ba33da 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.1.expect
@@ -46,7 +46,7 @@
       : super mai2::SuperClass::•()
       ;
     forwarding-stub method method(covariant dart.core::num* i) → void
-      return super.{mai2::SuperClass::method}(i);
+      return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
     synthetic constructor •() → mai2::Class*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.2.expect
index 92a39af..19afe72 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.2.expect
@@ -47,7 +47,7 @@
       : super mai2::SuperClass::•()
       ;
     forwarding-stub method method(covariant dart.core::num* i) → void
-      return super.{mai2::SuperClass::method}(i);
+      return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
     synthetic constructor •() → mai2::Class*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.3.expect
index c42f8e4..9ba33da 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_application_declares.yaml.world.3.expect
@@ -46,7 +46,7 @@
       : super mai2::SuperClass::•()
       ;
     forwarding-stub method method(covariant dart.core::num* i) → void
-      return super.{mai2::SuperClass::method}(i);
+      return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
     synthetic constructor •() → mai2::Class*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.1.expect
index 34e3fcb..5157f4f 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
       let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.2.expect
index eda724f..7eec56c 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_11.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
       let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
index 4547b87..1e8c449 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
@@ -8,40 +8,9 @@
       : super dart.core::Object::•()
       ;
     abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
+    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
     abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
-      return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
-      return new dart._internal::ListIterator::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
-      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        action.call(this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
-          throw new dart.core::ConcurrentModificationError::•(this);
-        }
-      }
-    }
-    @#C3
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
-      return this.{dart.core::List::length}.{dart.core::num::==}(0);
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
-      return !this.{dart.collection::ListMixin::isEmpty};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
       if(this.{dart.core::List::length}.{dart.core::num::==}(0))
         throw dart._internal::IterableElementError::noElement();
@@ -62,6 +31,26 @@
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(this.{dart.core::List::length}.{dart.core::num::-}(1), value);
     }
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
+      return new dart._internal::ListIterator::•<dart.core::int*>(this);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
+      return this.{dart.core::List::[]}(index);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
+      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
+      dart.core::int length = this.{dart.core::List::length};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
+        action.call(this.{dart.core::List::[]}(i));
+        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+          throw new dart.core::ConcurrentModificationError::•(this);
+        }
+      }
+    }
+    @#C3
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
+      return this.{dart.core::List::length}.{dart.core::num::==}(0);
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
+      return !this.{dart.collection::ListMixin::isEmpty};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
       if(this.{dart.core::List::length}.{dart.core::num::==}(0))
         throw dart._internal::IterableElementError::noElement();
@@ -296,9 +285,6 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
     }
-    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
-      return dart.core::Comparable::compare(a as{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
-    }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random} random = dart.math::Random::•() : null;
       if(random{dart.math::Random}.{dart.core::Object::==}(null))
@@ -525,6 +511,20 @@
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int*>
       return new dart._internal::ReversedListIterable::•<dart.core::int*>(this);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
+      return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
+    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
+    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
+    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
+    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
+    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
+    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
+    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
+    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
+    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
+      return dart.core::Comparable::compare(a as{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
+    }
   }
   class WithListMixin extends main::_WithListMixin&Object&ListMixin {
     field dart.core::int* length = 2;
@@ -535,57 +535,6 @@
       return index;
     operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void
       return null;
-    abstract member-signature get iterator() → dart.core::Iterator<dart.core::int*>*; -> dart.collection::ListMixin::iterator
-    abstract member-signature method elementAt(dart.core::int* index) → dart.core::int*; -> dart.collection::ListMixin::elementAt
-    abstract member-signature method followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*>* other) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::followedBy
-    abstract member-signature method forEach((dart.core::int*) →* void action) → void; -> dart.collection::ListMixin::forEach
-    abstract member-signature get isEmpty() → dart.core::bool*; -> dart.collection::ListMixin::isEmpty
-    abstract member-signature get isNotEmpty() → dart.core::bool*; -> dart.collection::ListMixin::isNotEmpty
-    abstract member-signature method contains(dart.core::Object* element) → dart.core::bool*; -> dart.collection::ListMixin::contains
-    abstract member-signature method every((dart.core::int*) →* dart.core::bool* test) → dart.core::bool*; -> dart.collection::ListMixin::every
-    abstract member-signature method any((dart.core::int*) →* dart.core::bool* test) → dart.core::bool*; -> dart.collection::ListMixin::any
-    abstract member-signature method firstWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::firstWhere
-    abstract member-signature method lastWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::lastWhere
-    abstract member-signature method singleWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::singleWhere
-    abstract member-signature method join([dart.core::String* separator = #C4]) → dart.core::String*; -> dart.collection::ListMixin::join
-    abstract member-signature method where((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::where
-    abstract member-signature method whereType<T extends dart.core::Object* = dynamic>() → dart.core::Iterable<main::WithListMixin::whereType::T*>*; -> dart.collection::ListMixin::whereType
-    abstract member-signature method map<T extends dart.core::Object* = dynamic>((dart.core::int*) →* main::WithListMixin::map::T* f) → dart.core::Iterable<main::WithListMixin::map::T*>*; -> dart.collection::ListMixin::map
-    abstract member-signature method expand<T extends dart.core::Object* = dynamic>((dart.core::int*) →* dart.core::Iterable<main::WithListMixin::expand::T*>* f) → dart.core::Iterable<main::WithListMixin::expand::T*>*; -> dart.collection::ListMixin::expand
-    abstract member-signature method reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) →* dart.core::int* combine) → dart.core::int*; -> dart.collection::ListMixin::reduce
-    abstract member-signature method fold<T extends dart.core::Object* = dynamic>(main::WithListMixin::fold::T* initialValue, (main::WithListMixin::fold::T*, dart.core::int*) →* main::WithListMixin::fold::T* combine) → main::WithListMixin::fold::T*; -> dart.collection::ListMixin::fold
-    abstract member-signature method skip(dart.core::int* count) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::skip
-    abstract member-signature method skipWhile((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::skipWhile
-    abstract member-signature method take(dart.core::int* count) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::take
-    abstract member-signature method takeWhile((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::takeWhile
-    abstract member-signature method toList({dart.core::bool* growable = #C5}) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::toList
-    abstract member-signature method toSet() → dart.core::Set<dart.core::int*>*; -> dart.collection::ListMixin::toSet
-    abstract member-signature method addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::addAll
-    abstract member-signature method remove(dart.core::Object* element) → dart.core::bool*; -> dart.collection::ListMixin::remove
-    abstract member-signature method _closeGap(dart.core::int* start, dart.core::int* end) → void; -> dart.collection::ListMixin::_closeGap
-    abstract member-signature method removeWhere((dart.core::int*) →* dart.core::bool* test) → void; -> dart.collection::ListMixin::removeWhere
-    abstract member-signature method retainWhere((dart.core::int*) →* dart.core::bool* test) → void; -> dart.collection::ListMixin::retainWhere
-    abstract member-signature method _filter((dart.core::int*) →* dart.core::bool* test, dart.core::bool* retainMatching) → void; -> dart.collection::ListMixin::_filter
-    abstract member-signature method cast<R extends dart.core::Object* = dynamic>() → dart.core::List<main::WithListMixin::cast::R*>*; -> dart.collection::ListMixin::cast
-    abstract member-signature method sort([(dart.core::int*, dart.core::int*) →* dart.core::int* compare = #C2]) → void; -> dart.collection::ListMixin::sort
-    abstract member-signature method shuffle([dart.math::Random* random = #C2]) → void; -> dart.collection::ListMixin::shuffle
-    abstract member-signature method asMap() → dart.core::Map<dart.core::int*, dart.core::int*>*; -> dart.collection::ListMixin::asMap
-    abstract member-signature operator +(generic-covariant-impl dart.core::List<dart.core::int*>* other) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::+
-    abstract member-signature method sublist(dart.core::int* start, [dart.core::int* end = #C2]) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::sublist
-    abstract member-signature method getRange(dart.core::int* start, dart.core::int* end) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::getRange
-    abstract member-signature method removeRange(dart.core::int* start, dart.core::int* end) → void; -> dart.collection::ListMixin::removeRange
-    abstract member-signature method fillRange(dart.core::int* start, dart.core::int* end, [generic-covariant-impl dart.core::int* fill = #C2]) → void; -> dart.collection::ListMixin::fillRange
-    abstract member-signature method setRange(dart.core::int* start, dart.core::int* end, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable, [dart.core::int* skipCount = #C7]) → void; -> dart.collection::ListMixin::setRange
-    abstract member-signature method replaceRange(dart.core::int* start, dart.core::int* end, generic-covariant-impl dart.core::Iterable<dart.core::int*>* newContents) → void; -> dart.collection::ListMixin::replaceRange
-    abstract member-signature method indexOf(generic-covariant-impl dart.core::Object* element, [dart.core::int* start = #C7]) → dart.core::int*; -> dart.collection::ListMixin::indexOf
-    abstract member-signature method indexWhere((dart.core::int*) →* dart.core::bool* test, [dart.core::int* start = #C7]) → dart.core::int*; -> dart.collection::ListMixin::indexWhere
-    abstract member-signature method lastIndexOf(generic-covariant-impl dart.core::Object* element, [dart.core::int* start = #C2]) → dart.core::int*; -> dart.collection::ListMixin::lastIndexOf
-    abstract member-signature method lastIndexWhere((dart.core::int*) →* dart.core::bool* test, [dart.core::int* start = #C2]) → dart.core::int*; -> dart.collection::ListMixin::lastIndexWhere
-    abstract member-signature method insert(dart.core::int* index, generic-covariant-impl dart.core::int* element) → void; -> dart.collection::ListMixin::insert
-    abstract member-signature method removeAt(dart.core::int* index) → dart.core::int*; -> dart.collection::ListMixin::removeAt
-    abstract member-signature method insertAll(dart.core::int* index, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::insertAll
-    abstract member-signature method setAll(dart.core::int* index, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::setAll
-    abstract member-signature get reversed() → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::reversed
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
index 4547b87..1e8c449 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
@@ -8,40 +8,9 @@
       : super dart.core::Object::•()
       ;
     abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
+    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
     abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
-      return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
-      return new dart._internal::ListIterator::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
-      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        action.call(this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
-          throw new dart.core::ConcurrentModificationError::•(this);
-        }
-      }
-    }
-    @#C3
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
-      return this.{dart.core::List::length}.{dart.core::num::==}(0);
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
-      return !this.{dart.collection::ListMixin::isEmpty};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
       if(this.{dart.core::List::length}.{dart.core::num::==}(0))
         throw dart._internal::IterableElementError::noElement();
@@ -62,6 +31,26 @@
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(this.{dart.core::List::length}.{dart.core::num::-}(1), value);
     }
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
+      return new dart._internal::ListIterator::•<dart.core::int*>(this);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
+      return this.{dart.core::List::[]}(index);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
+      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
+      dart.core::int length = this.{dart.core::List::length};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
+        action.call(this.{dart.core::List::[]}(i));
+        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+          throw new dart.core::ConcurrentModificationError::•(this);
+        }
+      }
+    }
+    @#C3
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
+      return this.{dart.core::List::length}.{dart.core::num::==}(0);
+    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
+      return !this.{dart.collection::ListMixin::isEmpty};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
       if(this.{dart.core::List::length}.{dart.core::num::==}(0))
         throw dart._internal::IterableElementError::noElement();
@@ -296,9 +285,6 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
     }
-    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
-      return dart.core::Comparable::compare(a as{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
-    }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random} random = dart.math::Random::•() : null;
       if(random{dart.math::Random}.{dart.core::Object::==}(null))
@@ -525,6 +511,20 @@
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int*>
       return new dart._internal::ReversedListIterable::•<dart.core::int*>(this);
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
+      return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
+    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
+    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
+    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
+    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
+    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
+    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
+    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
+    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
+    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
+      return dart.core::Comparable::compare(a as{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
+    }
   }
   class WithListMixin extends main::_WithListMixin&Object&ListMixin {
     field dart.core::int* length = 2;
@@ -535,57 +535,6 @@
       return index;
     operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void
       return null;
-    abstract member-signature get iterator() → dart.core::Iterator<dart.core::int*>*; -> dart.collection::ListMixin::iterator
-    abstract member-signature method elementAt(dart.core::int* index) → dart.core::int*; -> dart.collection::ListMixin::elementAt
-    abstract member-signature method followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*>* other) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::followedBy
-    abstract member-signature method forEach((dart.core::int*) →* void action) → void; -> dart.collection::ListMixin::forEach
-    abstract member-signature get isEmpty() → dart.core::bool*; -> dart.collection::ListMixin::isEmpty
-    abstract member-signature get isNotEmpty() → dart.core::bool*; -> dart.collection::ListMixin::isNotEmpty
-    abstract member-signature method contains(dart.core::Object* element) → dart.core::bool*; -> dart.collection::ListMixin::contains
-    abstract member-signature method every((dart.core::int*) →* dart.core::bool* test) → dart.core::bool*; -> dart.collection::ListMixin::every
-    abstract member-signature method any((dart.core::int*) →* dart.core::bool* test) → dart.core::bool*; -> dart.collection::ListMixin::any
-    abstract member-signature method firstWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::firstWhere
-    abstract member-signature method lastWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::lastWhere
-    abstract member-signature method singleWhere((dart.core::int*) →* dart.core::bool* test, {generic-covariant-impl () →* dart.core::int* orElse = #C2}) → dart.core::int*; -> dart.collection::ListMixin::singleWhere
-    abstract member-signature method join([dart.core::String* separator = #C4]) → dart.core::String*; -> dart.collection::ListMixin::join
-    abstract member-signature method where((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::where
-    abstract member-signature method whereType<T extends dart.core::Object* = dynamic>() → dart.core::Iterable<main::WithListMixin::whereType::T*>*; -> dart.collection::ListMixin::whereType
-    abstract member-signature method map<T extends dart.core::Object* = dynamic>((dart.core::int*) →* main::WithListMixin::map::T* f) → dart.core::Iterable<main::WithListMixin::map::T*>*; -> dart.collection::ListMixin::map
-    abstract member-signature method expand<T extends dart.core::Object* = dynamic>((dart.core::int*) →* dart.core::Iterable<main::WithListMixin::expand::T*>* f) → dart.core::Iterable<main::WithListMixin::expand::T*>*; -> dart.collection::ListMixin::expand
-    abstract member-signature method reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) →* dart.core::int* combine) → dart.core::int*; -> dart.collection::ListMixin::reduce
-    abstract member-signature method fold<T extends dart.core::Object* = dynamic>(main::WithListMixin::fold::T* initialValue, (main::WithListMixin::fold::T*, dart.core::int*) →* main::WithListMixin::fold::T* combine) → main::WithListMixin::fold::T*; -> dart.collection::ListMixin::fold
-    abstract member-signature method skip(dart.core::int* count) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::skip
-    abstract member-signature method skipWhile((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::skipWhile
-    abstract member-signature method take(dart.core::int* count) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::take
-    abstract member-signature method takeWhile((dart.core::int*) →* dart.core::bool* test) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::takeWhile
-    abstract member-signature method toList({dart.core::bool* growable = #C5}) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::toList
-    abstract member-signature method toSet() → dart.core::Set<dart.core::int*>*; -> dart.collection::ListMixin::toSet
-    abstract member-signature method addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::addAll
-    abstract member-signature method remove(dart.core::Object* element) → dart.core::bool*; -> dart.collection::ListMixin::remove
-    abstract member-signature method _closeGap(dart.core::int* start, dart.core::int* end) → void; -> dart.collection::ListMixin::_closeGap
-    abstract member-signature method removeWhere((dart.core::int*) →* dart.core::bool* test) → void; -> dart.collection::ListMixin::removeWhere
-    abstract member-signature method retainWhere((dart.core::int*) →* dart.core::bool* test) → void; -> dart.collection::ListMixin::retainWhere
-    abstract member-signature method _filter((dart.core::int*) →* dart.core::bool* test, dart.core::bool* retainMatching) → void; -> dart.collection::ListMixin::_filter
-    abstract member-signature method cast<R extends dart.core::Object* = dynamic>() → dart.core::List<main::WithListMixin::cast::R*>*; -> dart.collection::ListMixin::cast
-    abstract member-signature method sort([(dart.core::int*, dart.core::int*) →* dart.core::int* compare = #C2]) → void; -> dart.collection::ListMixin::sort
-    abstract member-signature method shuffle([dart.math::Random* random = #C2]) → void; -> dart.collection::ListMixin::shuffle
-    abstract member-signature method asMap() → dart.core::Map<dart.core::int*, dart.core::int*>*; -> dart.collection::ListMixin::asMap
-    abstract member-signature operator +(generic-covariant-impl dart.core::List<dart.core::int*>* other) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::+
-    abstract member-signature method sublist(dart.core::int* start, [dart.core::int* end = #C2]) → dart.core::List<dart.core::int*>*; -> dart.collection::ListMixin::sublist
-    abstract member-signature method getRange(dart.core::int* start, dart.core::int* end) → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::getRange
-    abstract member-signature method removeRange(dart.core::int* start, dart.core::int* end) → void; -> dart.collection::ListMixin::removeRange
-    abstract member-signature method fillRange(dart.core::int* start, dart.core::int* end, [generic-covariant-impl dart.core::int* fill = #C2]) → void; -> dart.collection::ListMixin::fillRange
-    abstract member-signature method setRange(dart.core::int* start, dart.core::int* end, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable, [dart.core::int* skipCount = #C7]) → void; -> dart.collection::ListMixin::setRange
-    abstract member-signature method replaceRange(dart.core::int* start, dart.core::int* end, generic-covariant-impl dart.core::Iterable<dart.core::int*>* newContents) → void; -> dart.collection::ListMixin::replaceRange
-    abstract member-signature method indexOf(generic-covariant-impl dart.core::Object* element, [dart.core::int* start = #C7]) → dart.core::int*; -> dart.collection::ListMixin::indexOf
-    abstract member-signature method indexWhere((dart.core::int*) →* dart.core::bool* test, [dart.core::int* start = #C7]) → dart.core::int*; -> dart.collection::ListMixin::indexWhere
-    abstract member-signature method lastIndexOf(generic-covariant-impl dart.core::Object* element, [dart.core::int* start = #C2]) → dart.core::int*; -> dart.collection::ListMixin::lastIndexOf
-    abstract member-signature method lastIndexWhere((dart.core::int*) →* dart.core::bool* test, [dart.core::int* start = #C2]) → dart.core::int*; -> dart.collection::ListMixin::lastIndexWhere
-    abstract member-signature method insert(dart.core::int* index, generic-covariant-impl dart.core::int* element) → void; -> dart.collection::ListMixin::insert
-    abstract member-signature method removeAt(dart.core::int* index) → dart.core::int*; -> dart.collection::ListMixin::removeAt
-    abstract member-signature method insertAll(dart.core::int* index, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::insertAll
-    abstract member-signature method setAll(dart.core::int* index, generic-covariant-impl dart.core::Iterable<dart.core::int*>* iterable) → void; -> dart.collection::ListMixin::setAll
-    abstract member-signature get reversed() → dart.core::Iterable<dart.core::int*>*; -> dart.collection::ListMixin::reversed
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.1.expect
index 6042f23..5d03f68 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.1.expect
@@ -5,6 +5,7 @@
     const synthetic constructor •() → main::_A&Object&B*
       : super dart.core::Object::•()
       ;
+    method bar() → dynamic {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -15,7 +16,6 @@
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    method bar() → dynamic {}
   }
   class A extends main::_A&Object&B {
     synthetic constructor •() → main::A*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.2.expect
index 6042f23..5d03f68 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_23.yaml.world.2.expect
@@ -5,6 +5,7 @@
     const synthetic constructor •() → main::_A&Object&B*
       : super dart.core::Object::•()
       ;
+    method bar() → dynamic {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -15,7 +16,6 @@
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    method bar() → dynamic {}
   }
   class A extends main::_A&Object&B {
     synthetic constructor •() → main::A*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.1.expect
index 58431c8..b796916 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.1.expect
@@ -9,7 +9,7 @@
     late static field dart.core::int? field9 = 42;
     late static field dart.core::int? field10;
     late static final field dart.core::int? field11 = 42;
-    late static final field dart.core::int? field12;
+    late static final [setter] field dart.core::int? field12;
     synthetic constructor •() → main::C
       : super dart.core::Object::•()
       ;
@@ -17,7 +17,7 @@
   late static field dart.core::int? field1 = 42;
   late static field dart.core::int? field2;
   late static final field dart.core::int? field3 = 42;
-  late static final field dart.core::int? field4;
+  late static final [setter] field dart.core::int? field4;
   static method main() → dynamic {
     main::field1 = 43;
     main::field2 = 42;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.2.expect
index f93a253..4fc4b62e 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_30.yaml.world.2.expect
@@ -9,7 +9,7 @@
     late static field dart.core::int? field9 = 42;
     late static field dart.core::int? field10;
     late static final field dart.core::int? field11 = 42;
-    late static final field dart.core::int? field12;
+    late static final [setter] field dart.core::int? field12;
     synthetic constructor •() → main::C
       : super dart.core::Object::•()
       ;
@@ -17,7 +17,7 @@
   late static field dart.core::int? field1 = 42;
   late static field dart.core::int? field2;
   late static final field dart.core::int? field3 = 42;
-  late static final field dart.core::int? field4;
+  late static final [setter] field dart.core::int? field4;
   static method main() → dynamic {
     main::field1 = 44;
     main::field2 = 43;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.1.expect
index 4758b1b..6e4cb7b 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.1.expect
@@ -15,11 +15,11 @@
   late static field dart.core::int? field1 = 42;
   late static field dart.core::int? field2;
   late static final field dart.core::int? field3 = 42;
-  late static final field dart.core::int? field4;
+  late static final [setter] field dart.core::int? field4;
   late static field dart.core::int? _extension#0|field5 = 42;
   late static field dart.core::int? _extension#0|field6;
   late static final field dart.core::int? _extension#0|field7 = 42;
-  late static final field dart.core::int? _extension#0|field8;
+  late static final [setter] field dart.core::int? _extension#0|field8;
   static method main() → dynamic {
     main::field1 = 43;
     main::field2 = 42;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.2.expect
index a6ebd95..4e6c63f 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_32.yaml.world.2.expect
@@ -15,11 +15,11 @@
   late static field dart.core::int? field1 = 42;
   late static field dart.core::int? field2;
   late static final field dart.core::int? field3 = 42;
-  late static final field dart.core::int? field4;
+  late static final [setter] field dart.core::int? field4;
   late static field dart.core::int? _extension#0|field5 = 42;
   late static field dart.core::int? _extension#0|field6;
   late static final field dart.core::int? _extension#0|field7 = 42;
-  late static final field dart.core::int? _extension#0|field8;
+  late static final [setter] field dart.core::int? _extension#0|field8;
   static method main() → dynamic {
     main::field1 = 44;
     main::field2 = 43;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.1.expect
index d9d9f57..ef7a0e0 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.1.expect
@@ -7,6 +7,9 @@
     const synthetic constructor •() → libA::_Bar&Object&Foo*
       : super dart.core::Object::•()
       ;
+    method /* from org-dartlang-test:///main.dart */ method() → dynamic {
+      dart.core::print("A");
+    }
     abstract member-signature get /* from org-dartlang-test:///main.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method /* from org-dartlang-test:///main.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method /* from org-dartlang-test:///main.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -17,16 +20,13 @@
     abstract member-signature method /* from org-dartlang-test:///main.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature method /* from org-dartlang-test:///main.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get /* from org-dartlang-test:///main.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    method /* from org-dartlang-test:///main.dart */ method() → dynamic {
-      dart.core::print("A");
-    }
   }
   class Bar extends libA::_Bar&Object&Foo {
     synthetic constructor •() → libA::Bar*
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{main::Foo::method}();
+      this.{libA::_Bar&Object&Foo::method}();
     }
   }
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.2.expect
index 0ee806c..bcbc356 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_4.yaml.world.2.expect
@@ -7,6 +7,9 @@
     const synthetic constructor •() → libA::_Bar&Object&Foo*
       : super dart.core::Object::•()
       ;
+    method /* from org-dartlang-test:///main.dart */ method() → dynamic {
+      dart.core::print("B");
+    }
     abstract member-signature get /* from org-dartlang-test:///main.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method /* from org-dartlang-test:///main.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method /* from org-dartlang-test:///main.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -17,16 +20,13 @@
     abstract member-signature method /* from org-dartlang-test:///main.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature method /* from org-dartlang-test:///main.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get /* from org-dartlang-test:///main.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    method /* from org-dartlang-test:///main.dart */ method() → dynamic {
-      dart.core::print("B");
-    }
   }
   class Bar extends libA::_Bar&Object&Foo {
     synthetic constructor •() → libA::Bar*
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{main::Foo::method}();
+      this.{libA::_Bar&Object&Foo::method}();
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
index d1ddfdb..024beff 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
index 431d27e..d10efba 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
index 715e434..381acf8 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
index f616186..9f89adf 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
index 522e51a..ac3f37a 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
index c1e821e..9bae319 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
index d316140..df45278 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
@@ -24,51 +24,44 @@
 
 class Test extends Base {
   void test() {
-    super. /*@target=Base.member*/ member = /*@ typeArgs=B* */ f();
+    super.member = /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    /*@target=B.-*/ --super
-        . /*@target=Base.member*/ /*@target=Base.member*/ member;
+    /*@target=B.-*/ --super. /*@target=Base.member*/ member;
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 =
-        super. /*@target=Base.member*/ member = /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
 
-    var /*@ type=B* */ v2 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
+        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
 
-    var /*@ type=A* */ v3 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
+        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    var /*@ type=B* */ v4 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v4 = super. /*@target=Base.member*/ member
+        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    var /*@ type=C* */ v5 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@ type=C* */ v5 = super. /*@target=Base.member*/ member
+        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     var /*@ type=B* */ v6 =
-        /*@target=B.-*/ --super
-            . /*@target=Base.member*/ /*@target=Base.member*/ member;
+        /*@target=B.-*/ --super. /*@target=Base.member*/ member;
 
     var /*@ type=B* */ v7 = super
-        . /*@ type=B* */ /*@target=Base.member*/ /*@target=Base.member*/
+        . /*@ type=B* */ /*@target=Base.member*/
         /*@ type=B* */ member /*@target=B.-*/ --;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
index b4877f3..77e0929 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
@@ -17,98 +17,82 @@
 
 class Test1 extends Base {
   void test() {
-    var /*@ type=int* */ v1 =
-        super. /*@target=Base.intProp*/ intProp = getInt();
+    var /*@ type=int* */ v1 = super.intProp = getInt();
 
-    var /*@ type=int* */ v4 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.==*/ ??= getInt();
+    var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.==*/ ??= getInt();
 
-    var /*@ type=int* */ v7 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.+*/ += getInt();
+    var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.+*/ += getInt();
 
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-        . /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp;
+        . /*@target=Base.intProp*/ intProp;
 
     var /*@ type=int* */ v11 = super
-        . /*@ type=int* */ /*@target=Base.intProp*/ /*@target=Base.intProp*/
+        . /*@ type=int* */ /*@target=Base.intProp*/
         /*@ type=int* */ intProp /*@target=num.+*/ ++;
   }
 }
 
 class Test2 extends Base {
   void test() {
-    var /*@ type=int* */ v1 =
-        super. /*@target=Base.numProp*/ numProp = getInt();
+    var /*@ type=int* */ v1 = super.numProp = getInt();
 
-    var /*@ type=num* */ v2 =
-        super. /*@target=Base.numProp*/ numProp = getNum();
+    var /*@ type=num* */ v2 = super.numProp = getNum();
 
-    var /*@ type=double* */ v3 =
-        super. /*@target=Base.numProp*/ numProp = getDouble();
+    var /*@ type=double* */ v3 = super.numProp = getDouble();
 
-    var /*@ type=num* */ v4 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getInt();
+    var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getInt();
 
-    var /*@ type=num* */ v5 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getNum();
+    var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getNum();
 
-    var /*@ type=num* */ v6 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getDouble();
+    var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getDouble();
 
-    var /*@ type=num* */ v7 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.+*/ += getInt();
+    var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.+*/ += getNum();
+    var /*@ type=num* */ v8 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.+*/ += getNum();
 
     var /*@ type=num* */ v9 = super
             .
-            /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
+            /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getDouble();
 
     var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
-        . /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp;
+        . /*@target=Base.numProp*/ numProp;
 
     var /*@ type=num* */ v11 = super
         .
-        /*@ type=num* */ /*@target=Base.numProp*/ /*@target=Base.numProp*/
+        /*@ type=num* */ /*@target=Base.numProp*/
         /*@ type=num* */ numProp /*@target=num.+*/ ++;
   }
 }
 
 class Test3 extends Base {
   void test3() {
-    var /*@ type=double* */ v3 =
-        super. /*@target=Base.doubleProp*/ doubleProp = getDouble();
+    var /*@ type=double* */ v3 = super.doubleProp = getDouble();
 
-    var /*@ type=double* */ v6 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=num.==*/ ??= getDouble();
 
-    var /*@ type=double* */ v7 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=double* */ v7 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=double* */ v8 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=double* */ v9 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getDouble();
 
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-        . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp;
+        . /*@target=Base.doubleProp*/ doubleProp;
 
     var /*@ type=double* */ v11 = super
-        . /*@ type=double* */ /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+        . /*@ type=double* */ /*@target=Base.doubleProp*/
         /*@ type=double* */ doubleProp /*@target=double.+*/ ++;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
index c48e0cc..1d43d47 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
@@ -77,6 +77,8 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::B::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
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
index a0ba133..c7c2a14 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
@@ -83,6 +83,8 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::B::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
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.transformed.expect
index 5ec6724..3341f60 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.transformed.expect
@@ -83,6 +83,8 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  get x() → core::int*
+    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
@@ -93,8 +95,6 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  get x() → core::int*
-    return 0;
 }
 class G extends self::_G&Object&B {
   field core::int* x = null;
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
index 5c519d3..fa329d7 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
@@ -77,6 +77,8 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub set x(core::int* value) → void
+    return super.{self::B::x} = 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
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
index 91b4992..476388a 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
@@ -82,6 +82,8 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub set x(core::int* value) → void
+    return super.{self::B::x} = 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
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.transformed.expect
index ed1e30b..34e2520 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.transformed.expect
@@ -82,6 +82,7 @@
   const synthetic constructor •() → self::_G&Object&B*
     : super core::Object::•()
     ;
+  set x(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
@@ -92,7 +93,6 @@
   abstract member-signature method toString() → core::String*; -> core::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::int* value) → void {}
 }
 class G extends self::_G&Object&B {
   field core::int* x = null;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart b/pkg/front_end/testcases/inference/super_property_set_substitution.dart
index 2101e53..413ff6e 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart
@@ -21,7 +21,7 @@
   E<Future<U>> get x => null;
   void set x(Object x) {}
   void g() {
-    super. /*@target=B.x*/ x = /*@ typeArgs=D<Future<C::U*>*>* */ f();
+    super.x = /*@ typeArgs=D<Future<C::U*>*>* */ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
index 0b116bc..553dbee 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
@@ -24,52 +24,46 @@
 
 class Test extends Base {
   void test() {
-    super. /*@target=Base.member*/ member = /*@ typeArgs=B* */ f();
+    super.member = /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    /*@target=B.-*/ --super
-        . /*@target=Base.member*/ /*@target=Base.member*/ member;
+    /*@target=B.-*/ --super. /*@target=Base.member*/ member;
 
-    super. /*@target=Base.member*/ /*@target=Base.member*/ member
+    super. /*@target=Base.member*/ member
         /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 =
-        super. /*@target=Base.member*/ member = /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
 
-    var /*@ type=B* */ v2 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
+        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
 
-    var /*@ type=A* */ v3 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
+        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    var /*@ type=B* */ v4 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v4 = super. /*@target=Base.member*/ member
+        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    var /*@ type=C* */ v5 =
-        super. /*@target=Base.member*/ /*@target=Base.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@ type=C* */ v5 = super. /*@target=Base.member*/ member
+        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     var /*@ type=B* */ v6 = /*@target=B.-*/ --super
         .
-        /*@target=Base.member*/ /*@target=Base.member*/ member;
+        /*@target=Base.member*/ member;
 
     var /*@ type=B* */ v7 = super
         .
-        /*@ type=B* */ /*@target=Base.member*/ /*@target=Base.member*/
+        /*@ type=B* */ /*@target=Base.member*/
         /*@ type=B* */ member /*@target=B.-*/ --;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
index 599d5f3..ef3dee1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
@@ -17,116 +17,97 @@
 
 class Test1 extends Base {
   void test() {
-    var /*@ type=int* */ v1 =
-        super. /*@target=Base.intProp*/ intProp = getInt();
+    var /*@ type=int* */ v1 = super.intProp = getInt();
 
-    var /*@ type=num* */ v2 =
-        super. /*@target=Base.intProp*/ intProp = getNum();
+    var /*@ type=num* */ v2 = super.intProp = getNum();
 
-    var /*@ type=int* */ v4 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.==*/ ??= getInt();
+    var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.==*/ ??= getInt();
 
-    var /*@ type=num* */ v5 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.==*/ ??= getNum();
+    var /*@ type=num* */ v5 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.==*/ ??= getNum();
 
-    var /*@ type=int* */ v7 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.+*/ += getInt();
+    var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
-        super. /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp
-            /*@target=num.+*/ += getNum();
+    var /*@ type=num* */ v8 = super. /*@target=Base.intProp*/ intProp
+        /*@target=num.+*/ += getNum();
 
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-        . /*@target=Base.intProp*/ /*@target=Base.intProp*/ intProp;
+        . /*@target=Base.intProp*/ intProp;
 
     var /*@ type=int* */ v11 = super
-        . /*@ type=int* */ /*@target=Base.intProp*/ /*@target=Base.intProp*/
+        . /*@ type=int* */ /*@target=Base.intProp*/
         /*@ type=int* */ intProp /*@target=num.+*/ ++;
   }
 }
 
 class Test2 extends Base {
   void test() {
-    var /*@ type=int* */ v1 =
-        super. /*@target=Base.numProp*/ numProp = getInt();
+    var /*@ type=int* */ v1 = super.numProp = getInt();
 
-    var /*@ type=num* */ v2 =
-        super. /*@target=Base.numProp*/ numProp = getNum();
+    var /*@ type=num* */ v2 = super.numProp = getNum();
 
-    var /*@ type=double* */ v3 =
-        super. /*@target=Base.numProp*/ numProp = getDouble();
+    var /*@ type=double* */ v3 = super.numProp = getDouble();
 
-    var /*@ type=num* */ v4 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getInt();
+    var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getInt();
 
-    var /*@ type=num* */ v5 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getNum();
+    var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getNum();
 
-    var /*@ type=num* */ v6 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.==*/ ??= getDouble();
+    var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.==*/ ??= getDouble();
 
-    var /*@ type=num* */ v7 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.+*/ += getInt();
+    var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.+*/ += getNum();
+    var /*@ type=num* */ v8 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 =
-        super. /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp
-            /*@target=num.+*/ += getDouble();
+    var /*@ type=num* */ v9 = super. /*@target=Base.numProp*/ numProp
+        /*@target=num.+*/ += getDouble();
 
     var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
-        . /*@target=Base.numProp*/ /*@target=Base.numProp*/ numProp;
+        . /*@target=Base.numProp*/ numProp;
 
     var /*@ type=num* */ v11 = super
-        . /*@ type=num* */ /*@target=Base.numProp*/ /*@target=Base.numProp*/
+        . /*@ type=num* */ /*@target=Base.numProp*/
         /*@ type=num* */ numProp /*@target=num.+*/ ++;
   }
 }
 
 class Test3 extends Base {
   void test3() {
-    var /*@ type=num* */ v2 =
-        super. /*@target=Base.doubleProp*/ doubleProp = getNum();
+    var /*@ type=num* */ v2 = super.doubleProp = getNum();
 
-    var /*@ type=double* */ v3 =
-        super. /*@target=Base.doubleProp*/ doubleProp = getDouble();
+    var /*@ type=double* */ v3 = super.doubleProp = getDouble();
 
-    var /*@ type=num* */ v5 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=num* */ v5 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=num.==*/ ??= getNum();
 
-    var /*@ type=double* */ v6 = super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/ doubleProp
+    var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=num.==*/ ??= getDouble();
 
     var /*@ type=double* */ v7 = super
-        . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+        . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getInt();
 
     var /*@ type=double* */ v8 = super
-        . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+        . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getNum();
 
     var /*@ type=double* */ v9 = super
-        . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+        . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getDouble();
 
     var /*@ type=double* */ v10 =
         /*@target=double.+*/ ++super
-            . /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+            . /*@target=Base.doubleProp*/
             doubleProp;
 
     var /*@ type=double* */ v11 = super
-        . /*@ type=double* */ /*@target=Base.doubleProp*/ /*@target=Base.doubleProp*/
+        . /*@ type=double* */ /*@target=Base.doubleProp*/
         /*@ type=double* */ doubleProp /*@target=double.+*/ ++;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.outline.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.outline.expect
index 6bd460cb..0b3f427 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.outline.expect
@@ -26,6 +26,8 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
   synthetic constructor •() → self::Class1
@@ -37,6 +39,8 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
   synthetic constructor •() → self::Class2
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index 9854241..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -46,6 +46,8 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
   synthetic constructor •() → self::Class1
@@ -53,13 +55,15 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
   synthetic constructor •() → self::Class2
@@ -67,7 +71,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index c6344c1..99af770 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -125,7 +125,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
   }
 }
 abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -184,7 +184,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index 9854241..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -46,6 +46,8 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
   synthetic constructor •() → self::Class1
@@ -53,13 +55,15 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
+  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
   synthetic constructor •() → self::Class2
@@ -67,7 +71,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index c6344c1..99af770 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -125,7 +125,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
   }
 }
 abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -184,7 +184,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.outline.expect
index dbb74c3..b2b3256 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.outline.expect
@@ -87,7 +87,7 @@
 
 class A extends core::Object {
   final field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
   constructor constructor1([core::int i]) → self::A
     ;
   constructor constructor2({core::int i}) → self::A
@@ -145,7 +145,7 @@
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
   constructor constructor1([core::int i]) → self::C
     ;
   constructor constructor2({core::int i}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
index 327d48b..176ff0d 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
@@ -103,7 +103,7 @@
 
 class A extends core::Object {
   final field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
@@ -170,7 +170,7 @@
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
index d74b206..f25a954 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
@@ -103,7 +103,7 @@
 
 class A extends core::Object {
   final field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
@@ -170,7 +170,7 @@
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
index 327d48b..176ff0d 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
@@ -103,7 +103,7 @@
 
 class A extends core::Object {
   final field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
@@ -170,7 +170,7 @@
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
index 9e8520e..43212c4 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
@@ -103,7 +103,7 @@
 
 class A extends core::Object {
   final field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
@@ -170,7 +170,7 @@
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
   constructor constructor1([core::int i = #C1]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.outline.expect
index 1b6e3c7..08fff2c 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field Never n;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
index 579f1e9..ed2262c 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
index 9bf278b..9ff052a 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
     let<BottomType> #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
index 579f1e9..ed2262c 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
index 9bf278b..9ff052a 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
     let<BottomType> #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.outline.expect
index b211f2f..afe3abd 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   final field dynamic n;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
index 1a0f908..9f4202d 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
index ba70d21..bb9f753 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     let<BottomType> #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
index 1a0f908..9f4202d 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     let dynamic #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
index ba70d21..bb9f753 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     let<BottomType> #redirecting_factory = self::D::• in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
index 6cde1626..02689e0 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
@@ -121,7 +121,7 @@
     ;
 }
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     ;
   static factory redirect(self::A<self::A<Null>>? a) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index 2119a28..39c2e9c 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index 1eb8c28..f850b72 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index 2119a28..39c2e9c 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index 1eb8c28..f850b72 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.outline.expect
index 83d2e51..ac7b8e7 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.outline.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor gen({core::int i}) → self::C
     ;
   static factory fact({core::int i}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
index bcb7771..d62d171 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor gen({core::int i = #C1}) → self::C
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
index 744265d..18f6cd7 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor gen({core::int i = #C1}) → self::C
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
index bcb7771..d62d171 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor gen({core::int i = #C1}) → self::C
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
index 744265d..18f6cd7 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
   constructor gen({core::int i = #C1}) → self::C
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.outline.expect
index 35b1c6f..e84a44f 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.outline.expect
@@ -12,7 +12,7 @@
 import self as self;
 import "dart:core" as core;
 
-late static final field core::int y;
+late static final [setter] field core::int y;
 static method test() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
index 64c8656..bee2422 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.expect
@@ -26,7 +26,7 @@
 import self as self;
 import "dart:core" as core;
 
-late static final field core::int y;
+late static final [setter] field core::int y;
 static method test() → dynamic {
   late final core::int x;
   late final core::int? x = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.transformed.expect
index 4d8f37a..6fcf485 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
 import self as self;
 import "dart:core" as core;
 
-late static final field core::int y;
+late static final [setter] field core::int y;
 static method test() → dynamic {
   late final core::int x;
   function #x#initializer() → core::int?
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
index 64c8656..bee2422 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.expect
@@ -26,7 +26,7 @@
 import self as self;
 import "dart:core" as core;
 
-late static final field core::int y;
+late static final [setter] field core::int y;
 static method test() → dynamic {
   late final core::int x;
   late final core::int? x = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.transformed.expect
index 4d8f37a..6fcf485 100644
--- a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
 import self as self;
 import "dart:core" as core;
 
-late static final field core::int y;
+late static final [setter] field core::int y;
 static method test() → dynamic {
   late final core::int x;
   function #x#initializer() → core::int?
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.outline.expect
index 9bff7b0..1b9a3e0 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
 }
@@ -12,7 +12,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
index 33ae9c2..152826c 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
index 1669379..c6913c5 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     let<BottomType> #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     let<BottomType> #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
index 33ae9c2..152826c 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
index 1669379..c6913c5 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     let<BottomType> #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     let<BottomType> #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart b/pkg/front_end/testcases/nnbd/issue44362.dart
new file mode 100644
index 0000000..5d00edd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart
@@ -0,0 +1,13 @@
+// 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.
+
+foo<X>(X? x) {
+  if (x is int) {
+    bar(x);
+  }
+}
+
+bar<Y>(dynamic y) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.outline.expect
new file mode 100644
index 0000000..81e9d0f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.outline.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic
+  ;
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.strong.expect
new file mode 100644
index 0000000..3e32ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.strong.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::int) {
+    self::bar<dynamic>(x{self::foo::X? & core::int /* '?' & '!' = '!' */});
+  }
+}
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.strong.transformed.expect
new file mode 100644
index 0000000..3e32ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.strong.transformed.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::int) {
+    self::bar<dynamic>(x{self::foo::X? & core::int /* '?' & '!' = '!' */});
+  }
+}
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline.expect
new file mode 100644
index 0000000..395f9d1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+foo<X>(X? x) {}
+bar<Y>(dynamic y) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..86912e9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+bar<Y>(dynamic y) {}
+foo<X>(X? x) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.expect
new file mode 100644
index 0000000..3e32ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::int) {
+    self::bar<dynamic>(x{self::foo::X? & core::int /* '?' & '!' = '!' */});
+  }
+}
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.transformed.expect
new file mode 100644
index 0000000..3e32ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.transformed.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::int) {
+    self::bar<dynamic>(x{self::foo::X? & core::int /* '?' & '!' = '!' */});
+  }
+}
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/late.dart.outline.expect b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
index 414a031..4800daf 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
@@ -10,8 +10,8 @@
   late field self::Class lateInstanceFieldThis;
   late final field self::Class lateFinalInstanceFieldThis;
   late static field core::int lateStaticField;
-  late static final field core::int lateFinalStaticField1;
-  late static final field core::int lateFinalStaticField2;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
   late static final field core::int lateFinalStaticFieldWithInit;
   synthetic constructor •() → self::Class
     ;
@@ -21,7 +21,7 @@
     ;
 }
 late static field core::int lateTopLevelField;
-late static final field core::int lateFinalTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
 late static final field core::int lateFinalTopLevelFieldWithInit;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
index 4c32d9b..eaf8c2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
@@ -41,8 +41,8 @@
   late field self::Class lateInstanceFieldThis = this;
   late final field self::Class lateFinalInstanceFieldThis = this;
   late static field core::int lateStaticField;
-  late static final field core::int lateFinalStaticField1;
-  late static final field core::int lateFinalStaticField2;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
   late static final field core::int lateFinalStaticFieldWithInit = 0;
   synthetic constructor •() → self::Class
     : super core::Object::•()
@@ -74,7 +74,7 @@
   }
 }
 late static field core::int lateTopLevelField;
-late static final field core::int lateFinalTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
 late static final field core::int lateFinalTopLevelFieldWithInit = 0;
 static method main() → dynamic {}
 static method noErrors() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
index 4c32d9b..eaf8c2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
@@ -41,8 +41,8 @@
   late field self::Class lateInstanceFieldThis = this;
   late final field self::Class lateFinalInstanceFieldThis = this;
   late static field core::int lateStaticField;
-  late static final field core::int lateFinalStaticField1;
-  late static final field core::int lateFinalStaticField2;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
   late static final field core::int lateFinalStaticFieldWithInit = 0;
   synthetic constructor •() → self::Class
     : super core::Object::•()
@@ -74,7 +74,7 @@
   }
 }
 late static field core::int lateTopLevelField;
-late static final field core::int lateFinalTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
 late static final field core::int lateFinalTopLevelFieldWithInit = 0;
 static method main() → dynamic {}
 static method noErrors() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
index 4c32d9b..eaf8c2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
@@ -41,8 +41,8 @@
   late field self::Class lateInstanceFieldThis = this;
   late final field self::Class lateFinalInstanceFieldThis = this;
   late static field core::int lateStaticField;
-  late static final field core::int lateFinalStaticField1;
-  late static final field core::int lateFinalStaticField2;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
   late static final field core::int lateFinalStaticFieldWithInit = 0;
   synthetic constructor •() → self::Class
     : super core::Object::•()
@@ -74,7 +74,7 @@
   }
 }
 late static field core::int lateTopLevelField;
-late static final field core::int lateFinalTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
 late static final field core::int lateFinalTopLevelFieldWithInit = 0;
 static method main() → dynamic {}
 static method noErrors() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
index 4c32d9b..eaf8c2c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
@@ -41,8 +41,8 @@
   late field self::Class lateInstanceFieldThis = this;
   late final field self::Class lateFinalInstanceFieldThis = this;
   late static field core::int lateStaticField;
-  late static final field core::int lateFinalStaticField1;
-  late static final field core::int lateFinalStaticField2;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
   late static final field core::int lateFinalStaticFieldWithInit = 0;
   synthetic constructor •() → self::Class
     : super core::Object::•()
@@ -74,7 +74,7 @@
   }
 }
 late static field core::int lateTopLevelField;
-late static final field core::int lateFinalTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
 late static final field core::int lateFinalTopLevelFieldWithInit = 0;
 static method main() → dynamic {}
 static method noErrors() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.outline.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.outline.expect
index 100ffd1..06abbef 100644
--- a/pkg/front_end/testcases/nnbd/mix_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.outline.expect
@@ -13,6 +13,10 @@
   synthetic constructor •() → self::_Class&Object&Mixin
     : super core::Object::•()
     ;
+  mixin-super-stub get m() → FutureOr<Null>
+    return super.{self::Mixin::m};
+  mixin-super-stub set m(FutureOr<Null>value) → void
+    return super.{self::Mixin::m} = value;
 }
 class Class extends self::_Class&Object&Mixin {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.expect
index f87569c..8015a15 100644
--- a/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.expect
@@ -14,13 +14,17 @@
   synthetic constructor •() → self::_Class&Object&Mixin
     : super core::Object::•()
     ;
+  mixin-super-stub get m() → FutureOr<Null>
+    return super.{self::Mixin::m};
+  mixin-super-stub set m(FutureOr<Null>value) → void
+    return super.{self::Mixin::m} = value;
 }
 class Class extends self::_Class&Object&Mixin {
   synthetic constructor •() → self::Class
     : super self::_Class&Object&Mixin::•()
     ;
   method test(dynamic t1) → dynamic {
-    this.{self::Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
+    this.{self::_Class&Object&Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.transformed.expect
index 0f52fef..632f92c 100644
--- a/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
     : super self::_Class&Object&Mixin::•()
     ;
   method test(dynamic t1) → dynamic {
-    this.{self::Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
+    this.{self::_Class&Object&Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.expect
index f87569c..8015a15 100644
--- a/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.expect
@@ -14,13 +14,17 @@
   synthetic constructor •() → self::_Class&Object&Mixin
     : super core::Object::•()
     ;
+  mixin-super-stub get m() → FutureOr<Null>
+    return super.{self::Mixin::m};
+  mixin-super-stub set m(FutureOr<Null>value) → void
+    return super.{self::Mixin::m} = value;
 }
 class Class extends self::_Class&Object&Mixin {
   synthetic constructor •() → self::Class
     : super self::_Class&Object&Mixin::•()
     ;
   method test(dynamic t1) → dynamic {
-    this.{self::Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
+    this.{self::_Class&Object&Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.transformed.expect
index 0f52fef..632f92c 100644
--- a/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
     : super self::_Class&Object&Mixin::•()
     ;
   method test(dynamic t1) → dynamic {
-    this.{self::Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
+    this.{self::_Class&Object&Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.outline.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.outline.expect
index a3f0156..ece5e4e 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.outline.expect
@@ -62,7 +62,7 @@
     ;
 }
 class C1 extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
     let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
 }
@@ -71,7 +71,7 @@
     ;
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     ;
   static factory bar(core::num? x) → self::D
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
index 5ca1bf7..6721314 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
     let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
 }
@@ -72,7 +72,7 @@
     ;
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
index de6bd24..730260d 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
     let<BottomType> #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
 }
@@ -72,7 +72,7 @@
     ;
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
index 5ca1bf7..6721314 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
     let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
 }
@@ -72,7 +72,7 @@
     ;
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
index de6bd24..730260d 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
     let<BottomType> #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
 }
@@ -72,7 +72,7 @@
     ;
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
index ad3788d..a1df551 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
@@ -9,18 +9,20 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method toString({core::String* s = #C1}) → core::String*
+    return super.{baz2::A::toString}(s: s);
 }
 abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
+  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
+  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
 }
 static method main() → void {
   core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
index 0a99e51..44da6f8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
+  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
   abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,7 +40,7 @@
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
+  abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
 }
 static method main() → void {
   core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
index bbc1cb2..dac9776 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
@@ -9,18 +9,20 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method({core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(s: s);
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 class C extends self::_C&Object&A&B {
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 static method main() → dynamic {
   core::print(new self::C::•().{self::C::method}());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
index ee21372..bb7985d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_C&Object&A&B*
     : super self::_C&Object&A::•()
     ;
-  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
   abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -42,7 +42,7 @@
   synthetic constructor •() → self::C*
     : super self::_C&Object&A&B::•()
     ;
-  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
+  abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
 }
 static method main() → dynamic {
   core::print(new self::C::•().{self::C::method}());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
index 4b28cf6..b8246e1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method({core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -31,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{iss::A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}());
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
index 76a5947..ba3f39c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_C&Object&A*
     : super core::Object::•()
     ;
+  method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ method({core::String* s = #C1}) → core::String*
+    return s;
   abstract member-signature get /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -19,8 +21,6 @@
   abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ toString() → core::String*; -> core::Object::toString
   abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get /* from org-dartlang-testcase:///issue41210b_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
-  method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ method({core::String* s = #C1}) → core::String*
-    return s;
 }
 abstract class _C&Object&A&B extends self::_C&Object&A implements iss::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&A&B*
@@ -44,7 +44,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{iss::A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}());
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
index 1345fdd..7b96874 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_E1&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,6 +38,8 @@
   const synthetic constructor •() → self::_E2&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
index 341bd9b..26c7fd6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_E1&Object&A*
     : super core::Object::•()
     ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+    return s;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -19,8 +21,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
-    return s;
 }
 abstract class _E1&Object&A&D extends self::_E1&Object&A implements mai::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_E1&Object&A&D*
@@ -38,6 +38,8 @@
   const synthetic constructor •() → self::_E2&Object&A*
     : super core::Object::•()
     ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+    return s;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -48,8 +50,6 @@
   abstract member-signature method toString() → core::String*; -> core::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 /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
-    return s;
 }
 class E2 extends self::_E2&Object&A implements mai::D /*isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::E2*
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.expect
index 55adb86..04e3fe5 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.expect
@@ -9,6 +9,12 @@
   const synthetic constructor •() → self::_C1&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub get a() → core::List<(core::int*) →* core::int*>*
+    return super.{mix::B::a};
+  mixin-super-stub set a(core::List<(core::int*) →* core::int*>* _) → void
+    return super.{mix::B::a} = _;
+  mixin-super-stub method m((core::int*) →* core::int* x) → (core::int*) →* core::int*
+    return super.{mix::B::m}(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
@@ -24,9 +30,6 @@
   synthetic constructor •() → self::C1*
     : super self::_C1&Object&B::•()
     ;
-  abstract member-signature get a() → core::List<(core::int*) →* core::int*>*; -> mix::B::a
-  abstract member-signature set a(core::List<(core::int*) →* core::int*>* _) → void; -> mix::B::a
-  abstract member-signature method m((core::int*) →* core::int* x) → (core::int*) →* core::int*; -> mix::B::m
 }
 static method main() → dynamic {}
 
@@ -61,9 +64,9 @@
   synthetic constructor •() → mix::DiBq1
     : super self::C1::•()
     ;
-  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> mix::B::a
-  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> mix::B::a
-  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> mix::B::m
+  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> self::_C1&Object&B::a
+  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> self::_C1&Object&B::a
+  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> self::_C1&Object&B::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
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.transformed.expect
index 2b6628e..7f3adb4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.transformed.expect
@@ -9,6 +9,11 @@
   const synthetic constructor •() → self::_C1&Object&B*
     : super core::Object::•()
     ;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ a() → core::List<(core::int) → core::int>
+    return <(core::int) → core::int>[];
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ a(core::List<(core::int) → core::int> _) → void {}
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ m((core::int) → core::int x) → (core::int) → core::int
+    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
@@ -19,19 +24,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  get /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ a() → core::List<(core::int) → core::int>
-    return <(core::int) → core::int>[];
-  set /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ a(core::List<(core::int) → core::int> _) → void {}
-  method /*isNonNullableByDefault, from org-dartlang-testcase:///mixed_mixin_lib.dart */ m((core::int) → core::int x) → (core::int) → core::int
-    return x;
 }
 class C1 extends self::_C1&Object&B {
   synthetic constructor •() → self::C1*
     : super self::_C1&Object&B::•()
     ;
-  abstract member-signature get a() → core::List<(core::int*) →* core::int*>*; -> mix::B::a
-  abstract member-signature set a(core::List<(core::int*) →* core::int*>* _) → void; -> mix::B::a
-  abstract member-signature method m((core::int*) →* core::int* x) → (core::int*) →* core::int*; -> mix::B::m
 }
 static method main() → dynamic {}
 
@@ -66,9 +63,9 @@
   synthetic constructor •() → mix::DiBq1
     : super self::C1::•()
     ;
-  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> mix::B::a
-  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> mix::B::a
-  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> mix::B::m
+  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> self::_C1&Object&B::a
+  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> self::_C1&Object&B::a
+  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> self::_C1&Object&B::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
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart
new file mode 100644
index 0000000..b6a45bc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart
@@ -0,0 +1,11 @@
+import 'main_lib.dart';
+
+mixin RenderAnimatedOpacityMixin<T extends RenderObject>
+    on RenderObjectWithChildMixin<T> {}
+
+class RenderAnimatedOpacity extends RenderProxyBox
+    with RenderProxyBoxMixin, RenderAnimatedOpacityMixin<RenderBox> {}
+
+main() {
+  new RenderAnimatedOpacity();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline.expect
new file mode 100644
index 0000000..eebe9b5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+import 'main_lib.dart';
+
+mixin RenderAnimatedOpacityMixin<T extends RenderObject>
+    on RenderObjectWithChildMixin<T> {}
+
+class RenderAnimatedOpacity extends RenderProxyBox
+    with RenderProxyBoxMixin, RenderAnimatedOpacityMixin<RenderBox> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3d75979
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+import 'main_lib.dart';
+
+class RenderAnimatedOpacity extends RenderProxyBox
+    with RenderProxyBoxMixin, RenderAnimatedOpacityMixin<RenderBox> {}
+
+main() {}
+mixin RenderAnimatedOpacityMixin<T extends RenderObject>
+    on RenderObjectWithChildMixin<T> {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
new file mode 100644
index 0000000..8bc2add
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
@@ -0,0 +1,123 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class RenderAnimatedOpacityMixin<T extends mai::RenderObject = mai::RenderObject> extends mai::RenderObjectWithChildMixin<self::RenderAnimatedOpacityMixin::T> /*isMixinDeclaration*/  {
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin = mai::RenderProxyBox with mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin
+    : super mai::RenderProxyBox::•()
+    ;
+  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
+    return super.{mai::RenderProxyBoxMixin::hitTestChildren}(result, position: position);
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin = self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin with self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin::•()
+    ;
+}
+class RenderAnimatedOpacity extends self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin {
+  synthetic constructor •() → self::RenderAnimatedOpacity
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin::•()
+    ;
+}
+static method main() → dynamic {
+  new self::RenderAnimatedOpacity::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Offset extends core::Object {
+  synthetic constructor •() → mai::Offset
+    : super core::Object::•()
+    ;
+}
+class AbstractNode extends core::Object {
+  synthetic constructor •() → mai::AbstractNode
+    : super core::Object::•()
+    ;
+}
+abstract class DiagnosticableTreeMixin extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class HitTestTarget extends core::Object {
+  synthetic constructor •() → mai::HitTestTarget
+    : super core::Object::•()
+    ;
+}
+class HitTestResult extends core::Object {
+  synthetic constructor •() → mai::HitTestResult
+    : super core::Object::•()
+    ;
+}
+class BoxHitTestResult extends mai::HitTestResult {
+  synthetic constructor •() → mai::BoxHitTestResult
+    : super mai::HitTestResult::•()
+    ;
+}
+abstract class _RenderObject&AbstractNode&DiagnosticableTreeMixin extends mai::AbstractNode implements mai::DiagnosticableTreeMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin
+    : super mai::AbstractNode::•()
+    ;
+}
+abstract class RenderObject extends mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin implements mai::HitTestTarget {
+  synthetic constructor •() → mai::RenderObject
+    : super mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin::•()
+    ;
+}
+abstract class RenderBox extends mai::RenderObject {
+  synthetic constructor •() → mai::RenderBox
+    : super mai::RenderObject::•()
+    ;
+  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
+    return false;
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
+    return false;
+}
+abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject = mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
+  generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
+  get child() → mai::RenderObjectWithChildMixin::ChildType?
+    return this.{mai::RenderObjectWithChildMixin::_child};
+}
+abstract class _RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<T extends mai::RenderBox = mai::RenderBox> extends core::Object implements mai::RenderBox, mai::RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T> /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T>
+    : super core::Object::•()
+    ;
+}
+abstract class RenderProxyBoxMixin<T extends mai::RenderBox = mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool {
+    return let final core::bool? #t1 = let final mai::RenderProxyBoxMixin::T? #t2 = this.{mai::RenderObjectWithChildMixin::child} in #t2.{core::Object::==}(null) ?{core::bool?} null : #t2{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position) in #t1.{core::Object::==}(null) ?{core::bool} false : #t1{core::bool};
+  }
+}
+abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  generic-covariant-impl field mai::RenderBox? _child = null;
+  synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin
+    : super mai::RenderBox::•()
+    ;
+  get child() → mai::RenderBox?
+    return this.{mai::RenderObjectWithChildMixin::_child};
+}
+abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin implements mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
+    : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin::•()
+    ;
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool {
+    return let final core::bool? #t3 = let final mai::RenderBox? #t4 = this.{mai::RenderObjectWithChildMixin::child} in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t3.{core::Object::==}(null) ?{core::bool} false : #t3{core::bool};
+  }
+}
+class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
+  synthetic constructor •() → mai::RenderProxyBox
+    : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+  #C2 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..979cddb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class RenderAnimatedOpacityMixin<T extends mai::RenderObject = mai::RenderObject> extends mai::RenderObjectWithChildMixin<self::RenderAnimatedOpacityMixin::T> /*isMixinDeclaration*/  {
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin extends mai::RenderProxyBox implements mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin
+    : super mai::RenderProxyBox::•()
+    ;
+  @#C1
+  method /* from org-dartlang-testcase:///main_lib.dart */ hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
+    return let final core::bool? #t1 = let final mai::RenderBox? #t2 = this.{mai::RenderObjectWithChildMixin::child} in #t2.{core::Object::==}(null) ?{core::bool?} null : #t2{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t1.{core::Object::==}(null) ?{core::bool} false : #t1{core::bool};
+  }
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin extends self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin implements self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin::•()
+    ;
+}
+class RenderAnimatedOpacity extends self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin {
+  synthetic constructor •() → self::RenderAnimatedOpacity
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin::•()
+    ;
+}
+static method main() → dynamic {
+  new self::RenderAnimatedOpacity::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Offset extends core::Object {
+  synthetic constructor •() → mai::Offset
+    : super core::Object::•()
+    ;
+}
+class AbstractNode extends core::Object {
+  synthetic constructor •() → mai::AbstractNode
+    : super core::Object::•()
+    ;
+}
+abstract class DiagnosticableTreeMixin extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class HitTestTarget extends core::Object {
+  synthetic constructor •() → mai::HitTestTarget
+    : super core::Object::•()
+    ;
+}
+class HitTestResult extends core::Object {
+  synthetic constructor •() → mai::HitTestResult
+    : super core::Object::•()
+    ;
+}
+class BoxHitTestResult extends mai::HitTestResult {
+  synthetic constructor •() → mai::BoxHitTestResult
+    : super mai::HitTestResult::•()
+    ;
+}
+abstract class _RenderObject&AbstractNode&DiagnosticableTreeMixin extends mai::AbstractNode implements mai::DiagnosticableTreeMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin
+    : super mai::AbstractNode::•()
+    ;
+}
+abstract class RenderObject extends mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin implements mai::HitTestTarget {
+  synthetic constructor •() → mai::RenderObject
+    : super mai::_RenderObject&AbstractNode&DiagnosticableTreeMixin::•()
+    ;
+}
+abstract class RenderBox extends mai::RenderObject {
+  synthetic constructor •() → mai::RenderBox
+    : super mai::RenderObject::•()
+    ;
+  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool
+    return false;
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool
+    return false;
+}
+abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject = mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
+  generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
+  get child() → mai::RenderObjectWithChildMixin::ChildType?
+    return this.{mai::RenderObjectWithChildMixin::_child};
+}
+abstract class _RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<T extends mai::RenderBox = mai::RenderBox> extends core::Object implements mai::RenderBox, mai::RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T> /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T>
+    : super core::Object::•()
+    ;
+}
+abstract class RenderProxyBoxMixin<T extends mai::RenderBox = mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
+  @#C1
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
+    return let final core::bool? #t3 = let final mai::RenderProxyBoxMixin::T? #t4 = this.{mai::RenderObjectWithChildMixin::child} in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position) in #t3.{core::Object::==}(null) ?{core::bool} false : #t3{core::bool};
+  }
+}
+abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  generic-covariant-impl field mai::RenderBox? _child = null;
+  synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin
+    : super mai::RenderBox::•()
+    ;
+  get child() → mai::RenderBox?
+    return this.{mai::RenderObjectWithChildMixin::_child};
+}
+abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin implements mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
+    : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin::•()
+    ;
+  @#C1
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
+    return let final core::bool? #t5 = let final mai::RenderBox? #t6 = this.{mai::RenderObjectWithChildMixin::child} in #t6.{core::Object::==}(null) ?{core::bool?} null : #t6{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t5.{core::Object::==}(null) ?{core::bool} false : #t5{core::bool};
+  }
+}
+class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
+  synthetic constructor •() → mai::RenderProxyBox
+    : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin::•()
+    ;
+}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main_lib.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main_lib.dart
new file mode 100644
index 0000000..1eab9a6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main_lib.dart
@@ -0,0 +1,42 @@
+class Offset {}
+
+class AbstractNode {}
+
+mixin DiagnosticableTreeMixin {}
+
+abstract class HitTestTarget {}
+
+class HitTestResult {}
+
+class BoxHitTestResult extends HitTestResult {}
+
+abstract class RenderObject extends AbstractNode
+    with DiagnosticableTreeMixin
+    implements HitTestTarget {}
+
+abstract class RenderBox extends RenderObject {
+  bool hitTest(BoxHitTestResult result, {required Offset position}) => false;
+  bool hitTestChildren(BoxHitTestResult result, {required Offset position}) =>
+      false;
+}
+
+mixin RenderObjectWithChildMixin<ChildType extends RenderObject>
+    on RenderObject {
+  ChildType? _child;
+
+  /// The render object's unique child
+  ChildType? get child => _child;
+}
+
+mixin RenderProxyBoxMixin<T extends RenderBox>
+    on RenderBox, RenderObjectWithChildMixin<T> {
+  @override
+  bool hitTestChildren(BoxHitTestResult result, {required Offset position}) {
+    return child?.hitTest(result, position: position) ?? false;
+  }
+}
+
+class RenderProxyBox extends RenderBox
+    with
+        RenderObjectWithChildMixin<RenderBox>,
+        RenderProxyBoxMixin<RenderBox> {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/test.options b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
index d748399..e73124e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_Class&Object&Mixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method method(core::int* i) → core::int*
+    return super.{mix::Mixin::method}(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
@@ -24,10 +26,9 @@
   synthetic constructor •() → self::Class*
     : super self::_Class&Object&Mixin::•()
     ;
-  abstract member-signature method method(core::int* i) → core::int*; -> mix::Mixin::method
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::Class::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
index 38b26da..bfe469f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_Class&Object&Mixin*
     : super core::Object::•()
     ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///mixin_from_opt_in_lib.dart */ method(core::int? i) → core::int
+    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{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
@@ -19,17 +21,14 @@
   abstract member-signature method toString() → core::String*; -> core::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 /*isNonNullableByDefault, from org-dartlang-testcase:///mixin_from_opt_in_lib.dart */ method(core::int? i) → core::int
-    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{core::int};
 }
 class Class extends self::_Class&Object&Mixin {
   synthetic constructor •() → self::Class*
     : super self::_Class&Object&Mixin::•()
     ;
-  abstract member-signature method method(core::int* i) → core::int*; -> mix::Mixin::method
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::Class::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
index 35cfeee..e001ce8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
@@ -45,6 +45,12 @@
   synthetic constructor •() → self::_DwB0&C0&B
     : super mix::C0::•()
     ;
+  mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int) → core::int>
+    return super.{mix2::B::a};
+  mixin-super-stub set /*isLegacy*/ a(core::List<(core::int) → core::int> _) → void
+    return super.{mix2::B::a} = _;
+  mixin-super-stub method /*isLegacy*/ m((core::int) → core::int x) → (core::int) → core::int
+    return super.{mix2::B::m}(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
@@ -64,6 +70,12 @@
   synthetic constructor •() → self::_DwBq0&C0&Bq
     : super mix::C0::•()
     ;
+  mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int?) → core::int?>
+    return super.{mix2::Bq::a};
+  mixin-super-stub set /*isLegacy*/ a(core::List<(core::int?) → core::int?> _) → void
+    return super.{mix2::Bq::a} = _;
+  mixin-super-stub method /*isLegacy*/ m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return super.{mix2::Bq::m}(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
@@ -117,6 +129,12 @@
   synthetic constructor •() → self::_DwB3&C3&B
     : super mix::C3::•()
     ;
+  mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int) → core::int>
+    return super.{mix2::B::a};
+  mixin-super-stub set /*isLegacy*/ a(core::List<(core::int) → core::int> _) → void
+    return super.{mix2::B::a} = _;
+  mixin-super-stub method /*isLegacy*/ m((core::int) → core::int x) → (core::int) → core::int
+    return super.{mix2::B::m}(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
@@ -136,6 +154,12 @@
   synthetic constructor •() → self::_DwBq3&C3&Bq
     : super mix::C3::•()
     ;
+  mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int?) → core::int?>
+    return super.{mix2::Bq::a};
+  mixin-super-stub set /*isLegacy*/ a(core::List<(core::int?) → core::int?> _) → void
+    return super.{mix2::Bq::a} = _;
+  mixin-super-stub method /*isLegacy*/ m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return super.{mix2::Bq::m}(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
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.transformed.expect
index 3ac39f4..1dced2e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.transformed.expect
@@ -45,6 +45,11 @@
   synthetic constructor •() → self::_DwB0&C0&B
     : super mix::C0::•()
     ;
+  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int) → core::int>
+    return <(core::int) → core::int>[];
+  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int) → core::int> _) → void {}
+  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int) → core::int x) → (core::int) → core::int
+    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
@@ -54,11 +59,6 @@
   abstract member-signature method toString() → core::String; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
-  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int) → core::int>
-    return <(core::int) → core::int>[];
-  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int) → core::int> _) → void {}
-  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int) → core::int x) → (core::int) → core::int
-    return x;
 }
 class DwB0 extends self::_DwB0&C0&B {
   synthetic constructor •() → self::DwB0
@@ -69,6 +69,11 @@
   synthetic constructor •() → self::_DwBq0&C0&Bq
     : super mix::C0::•()
     ;
+  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int?) → core::int?>
+    return <(core::int?) → core::int?>[];
+  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int?) → core::int?> _) → void {}
+  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int?) → core::int? x) → (core::int?) → core::int?
+    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
@@ -78,11 +83,6 @@
   abstract member-signature method toString() → core::String; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
-  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int?) → core::int?>
-    return <(core::int?) → core::int?>[];
-  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int?) → core::int?> _) → void {}
-  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int?) → core::int? x) → (core::int?) → core::int?
-    return x;
 }
 class DwBq0 extends self::_DwBq0&C0&Bq {
   synthetic constructor •() → self::DwBq0
@@ -127,6 +127,11 @@
   synthetic constructor •() → self::_DwB3&C3&B
     : super mix::C3::•()
     ;
+  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int) → core::int>
+    return <(core::int) → core::int>[];
+  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int) → core::int> _) → void {}
+  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int) → core::int x) → (core::int) → core::int
+    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
@@ -136,11 +141,6 @@
   abstract member-signature method toString() → core::String; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
-  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int) → core::int>
-    return <(core::int) → core::int>[];
-  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int) → core::int> _) → void {}
-  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int) → core::int x) → (core::int) → core::int
-    return x;
 }
 class DwB3 extends self::_DwB3&C3&B {
   synthetic constructor •() → self::DwB3
@@ -151,6 +151,11 @@
   synthetic constructor •() → self::_DwBq3&C3&Bq
     : super mix::C3::•()
     ;
+  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int?) → core::int?>
+    return <(core::int?) → core::int?>[];
+  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int?) → core::int?> _) → void {}
+  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int?) → core::int? x) → (core::int?) → core::int?
+    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
@@ -160,11 +165,6 @@
   abstract member-signature method toString() → core::String; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
-  get /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a() → core::List<(core::int?) → core::int?>
-    return <(core::int?) → core::int?>[];
-  set /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ a(core::List<(core::int?) → core::int?> _) → void {}
-  method /* from org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart */ m((core::int?) → core::int? x) → (core::int?) → core::int?
-    return x;
 }
 class DwBq3 extends self::_DwBq3&C3&Bq {
   synthetic constructor •() → self::DwBq3
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
index 8a40f19..a039b1e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
@@ -9,6 +9,8 @@
   const synthetic constructor •() → self::_Class&Object&Mixin
     : super core::Object::•()
     ;
+  mixin-super-stub method /*isLegacy*/ method(core::int* i) → core::int*
+    return super.{mix::Mixin::method}(i);
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 class Class extends self::_Class&Object&Mixin {
@@ -17,7 +19,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{mix::Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
index 75f6938..0aa539f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
@@ -9,9 +9,9 @@
   const synthetic constructor •() → self::_Class&Object&Mixin
     : super core::Object::•()
     ;
-  abstract member-signature operator /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
   method /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ method(core::int* i) → core::int*
     return let final core::int* #t1 = i in #t1.{core::num::==}(null) ?{core::int*} 0 : #t1;
+  abstract member-signature operator /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,7 +28,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{mix::Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
index f65c944..0b8191f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object = core::Object> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String = core::String> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
index 69cdbba..5e2ac0e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object = core::Object> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String = core::String> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
index d622191..c6752be 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object = core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object = core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
index 94dea11..8534130 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object = core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object = core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
index 4cc02b1..64a13f8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
@@ -16,7 +16,7 @@
     : super self::Super::•()
     ;
   forwarding-stub method /*isLegacy*/ method({covariant core::int* named = #C1}) → void
-    return super.{self::Super::method}(named: named);
+    return super.{req::Mixin::method}(named: named);
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 class Class extends self::_Class&Super&Mixin {
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
index 8460822..a59d64d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
@@ -26,16 +26,24 @@
   synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
     : super self::_Class&Object&Mixin1::•()
     ;
+  mixin-super-stub set field((dynamic) →* core::Type* value) → void
+    return super.{mai::Mixin2::field} = value;
+  mixin-super-stub get field() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::field};
+  mixin-super-stub method method1() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2((dynamic) →* core::Type* t) → void
+    return super.{mai::Mixin2::method2}(t);
 }
 class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super self::_Class&Object&Mixin1&Mixin2::•()
     ;
   set field((dynamic) →* core::Type* value) → void {
-    super.{mai::Mixin2::field};
-    super.{mai::Mixin2::field} = value;
-    super.{mai::Mixin2::method1}();
-    super.{mai::Mixin2::method2}(null);
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
index 06d6be3..0d55698 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
@@ -50,10 +50,10 @@
     : super self::_Class&Object&Mixin1&Mixin2::•()
     ;
   set field((dynamic) →* core::Type* value) → void {
-    super.{mai::Mixin2::field};
-    super.{mai::Mixin2::field} = value;
-    super.{mai::Mixin2::method1}();
-    super.{mai::Mixin2::method2}(null);
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
index 8460822..a59d64d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
@@ -26,16 +26,24 @@
   synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
     : super self::_Class&Object&Mixin1::•()
     ;
+  mixin-super-stub set field((dynamic) →* core::Type* value) → void
+    return super.{mai::Mixin2::field} = value;
+  mixin-super-stub get field() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::field};
+  mixin-super-stub method method1() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2((dynamic) →* core::Type* t) → void
+    return super.{mai::Mixin2::method2}(t);
 }
 class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super self::_Class&Object&Mixin1&Mixin2::•()
     ;
   set field((dynamic) →* core::Type* value) → void {
-    super.{mai::Mixin2::field};
-    super.{mai::Mixin2::field} = value;
-    super.{mai::Mixin2::method1}();
-    super.{mai::Mixin2::method2}(null);
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
index 06d6be3..0d55698 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
@@ -50,10 +50,10 @@
     : super self::_Class&Object&Mixin1&Mixin2::•()
     ;
   set field((dynamic) →* core::Type* value) → void {
-    super.{mai::Mixin2::field};
-    super.{mai::Mixin2::field} = value;
-    super.{mai::Mixin2::method1}();
-    super.{mai::Mixin2::method2}(null);
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart
new file mode 100644
index 0000000..8ae24ae
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart
@@ -0,0 +1,23 @@
+// 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 'super_set_from_opt_in_lib.dart';
+
+abstract class Class extends SuperClass {
+  // This will have a member signature for `property=` that should _not_ be
+  // the target of `super.property = value` below.
+}
+
+class SubClass extends Class {
+  @override
+  set property(Object value) {
+    super.property = value;
+  }
+}
+
+main() {
+  new SubClass().property = null;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline.expect
new file mode 100644
index 0000000..22e1969
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+// @dart = 2.9
+import 'super_set_from_opt_in_lib.dart';
+
+abstract class Class extends SuperClass {}
+
+class SubClass extends Class {
+  @override
+  set property(Object value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..22e1969
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+// @dart = 2.9
+import 'super_set_from_opt_in_lib.dart';
+
+abstract class Class extends SuperClass {}
+
+class SubClass extends Class {
+  @override
+  set property(Object value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect
new file mode 100644
index 0000000..25c58bb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "super_set_from_opt_in_lib.dart" as sup;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///super_set_from_opt_in_lib.dart";
+
+abstract class Class extends sup::SuperClass<dynamic> {
+  synthetic constructor •() → self::Class*
+    : super sup::SuperClass::•()
+    ;
+  abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
+  abstract member-signature get property() → core::Object*; -> sup::SuperClass::property
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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*
+    : super self::Class::•()
+    ;
+  @#C1
+  set property(core::Object* value) → void {
+    super.{sup::SuperClass::property} = value;
+  }
+}
+static method main() → dynamic {
+  new self::SubClass::•().{self::SubClass::property} = null;
+}
+
+library /*isNonNullableByDefault*/;
+import self as sup;
+import "dart:core" as core;
+
+abstract class SuperClass<T extends core::Object? = dynamic> extends core::Object {
+  @#C1
+  field core::Object? property = null;
+  synthetic constructor •() → sup::SuperClass<sup::SuperClass::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..25c58bb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "super_set_from_opt_in_lib.dart" as sup;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///super_set_from_opt_in_lib.dart";
+
+abstract class Class extends sup::SuperClass<dynamic> {
+  synthetic constructor •() → self::Class*
+    : super sup::SuperClass::•()
+    ;
+  abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
+  abstract member-signature get property() → core::Object*; -> sup::SuperClass::property
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::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*
+    : super self::Class::•()
+    ;
+  @#C1
+  set property(core::Object* value) → void {
+    super.{sup::SuperClass::property} = value;
+  }
+}
+static method main() → dynamic {
+  new self::SubClass::•().{self::SubClass::property} = null;
+}
+
+library /*isNonNullableByDefault*/;
+import self as sup;
+import "dart:core" as core;
+
+abstract class SuperClass<T extends core::Object? = dynamic> extends core::Object {
+  @#C1
+  field core::Object? property = null;
+  synthetic constructor •() → sup::SuperClass<sup::SuperClass::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in_lib.dart b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in_lib.dart
new file mode 100644
index 0000000..8e111d9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in_lib.dart
@@ -0,0 +1,8 @@
+// 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.
+
+abstract class SuperClass<T> {
+  @override
+  Object? property;
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
index 26d73b4..7468edb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
@@ -40,6 +40,8 @@
   const synthetic constructor •() → self::_C&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::B::noSuchMethod}(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
@@ -71,4 +73,4 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> ListConstant(const <Type*>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 19, effectively constant: 7
+Extra constant evaluation: evaluated: 21, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
index e3b94fb..ffcf974 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
@@ -44,6 +44,8 @@
   const synthetic constructor •() → self::_C&Object&B*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::B::noSuchMethod}(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
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
index 3433736..7d0ab93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
@@ -44,6 +44,10 @@
   const synthetic constructor •() → self::_C&Object&B*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    self::count = self::count.{core::num::+}(1);
+    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
@@ -53,10 +57,6 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    self::count = self::count.{core::num::+}(1);
-    return null;
-  }
 }
 class C extends self::_C&Object&B {
   synthetic constructor •() → self::C*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
index be653d9..0ad0983 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
@@ -54,6 +54,8 @@
   synthetic constructor •() → self::_C&A&B*
     : super self::A::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* _) → dynamic
+    return super.{self::B::noSuchMethod}(_);
 }
 class C extends self::_C&A&B {
   synthetic constructor •() → self::C*
@@ -68,4 +70,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 9, effectively constant: 4
+Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
index ac32c35..c38133a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
@@ -56,6 +56,8 @@
   synthetic constructor •() → self::_C&A&B*
     : super self::A::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* _) → dynamic
+    return super.{self::B::noSuchMethod}(_);
 }
 class C extends self::_C&A&B {
   synthetic constructor •() → self::C*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
index e03bb94..9246c58 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
@@ -38,6 +38,8 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(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
@@ -52,7 +54,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
 static method main() → dynamic
   ;
@@ -67,4 +69,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 16, effectively constant: 8
+Extra constant evaluation: evaluated: 18, effectively constant: 8
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
index ef3c7ca..d4f16a5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
@@ -40,6 +40,8 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(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
@@ -55,7 +57,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
index 248fbe4..3a32356 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
@@ -40,6 +40,8 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → 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
@@ -49,15 +51,13 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic
-    return null;
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → self::B*
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.outline.expect
index 6e4c566..c4af234 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.outline.expect
@@ -38,6 +38,8 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -52,12 +54,14 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
 abstract class _B&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -72,7 +76,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
 static method main() → dynamic
   ;
@@ -91,4 +95,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 24, effectively constant: 12
+Extra constant evaluation: evaluated: 28, effectively constant: 12
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.expect
index 7c96ad7..0f6e0f1 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.expect
@@ -40,6 +40,8 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -55,12 +57,14 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 abstract class _B&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -76,7 +80,7 @@
     : super self::_B&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.transformed.expect
index 80f27c9..a177218 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.strong.transformed.expect
@@ -40,6 +40,8 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → 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
@@ -49,20 +51,20 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic
-    return null;
 }
 class A extends self::_A&Object&M implements self::I {
   synthetic constructor •() → self::A*
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 abstract class _B&Object&M extends core::Object implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → 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
@@ -72,15 +74,13 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic
-    return null;
 }
 class B extends self::_B&Object&M implements self::I {
   synthetic constructor •() → self::B*
     : super self::_B&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.outline.expect
index 69a5847..1a05075 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.outline.expect
@@ -21,6 +21,8 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(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
@@ -35,7 +37,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
 static method main() → dynamic
   ;
@@ -46,4 +48,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 8, effectively constant: 4
+Extra constant evaluation: evaluated: 10, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.expect
index 8a8d728..7c7b366 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.expect
@@ -23,6 +23,8 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(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
@@ -38,7 +40,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.transformed.expect
index afcc0f2..a38cf96 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.strong.transformed.expect
@@ -23,6 +23,9 @@
   const synthetic constructor •() → self::_B&Object&A*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → 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
@@ -32,16 +35,13 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    return null;
-  }
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → self::B*
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
index e523dd2..9fc1e31 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
@@ -36,6 +36,8 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -50,7 +52,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
@@ -61,4 +63,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> ListConstant(const <dynamic>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
-Extra constant evaluation: evaluated: 9, effectively constant: 4
+Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
index 353d26c..8920c01 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
@@ -39,6 +39,8 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(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
@@ -54,7 +56,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
index a18e7f88..4e46a55 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
@@ -39,6 +39,9 @@
   const synthetic constructor •() → self::_A&Object&M*
     : super core::Object::•()
     ;
+  method noSuchMethod(core::Invocation* i) → 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
@@ -48,16 +51,13 @@
   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
-  method noSuchMethod(core::Invocation* i) → dynamic {
-    return null;
-  }
 }
 class A extends self::_A&Object&M implements self::I<core::int*> {
   synthetic constructor •() → self::A*
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.outline.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.outline.expect
index e9e3bdd..b6f679a 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.outline.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.outline.expect
@@ -32,7 +32,7 @@
     : super mai::SuperClass::•()
     ;
   forwarding-stub method method(covariant core::num i) → void
-    return super.{mai::SuperClass::method}(i);
+    return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
   synthetic constructor •() → mai::Class
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
index cd8c81e..940de1e 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
@@ -34,7 +34,7 @@
     : super mai::SuperClass::•()
     ;
   forwarding-stub method method(covariant core::num i) → void
-    return super.{mai::SuperClass::method}(i);
+    return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
   synthetic constructor •() → mai::Class
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
index cd8c81e..940de1e 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
@@ -34,7 +34,7 @@
     : super mai::SuperClass::•()
     ;
   forwarding-stub method method(covariant core::num i) → void
-    return super.{mai::SuperClass::method}(i);
+    return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
   synthetic constructor •() → mai::Class
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
index cd8c81e..940de1e 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
@@ -34,7 +34,7 @@
     : super mai::SuperClass::•()
     ;
   forwarding-stub method method(covariant core::num i) → void
-    return super.{mai::SuperClass::method}(i);
+    return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
   synthetic constructor •() → mai::Class
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
index cd8c81e..940de1e 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
     : super mai::SuperClass::•()
     ;
   forwarding-stub method method(covariant core::num i) → void
-    return super.{mai::SuperClass::method}(i);
+    return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
   synthetic constructor •() → mai::Class
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
index a0757dd..d8dedc2 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
@@ -30,11 +30,14 @@
   synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  abstract forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
   forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method3}(argument1, argument2);
+    return super.{self::Mixin::method3}(argument1, argument2);
   forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method4}(argument1, argument2);
+    return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
index 028d0ab..31bd6b8 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
@@ -32,11 +32,14 @@
   synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  abstract forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
   forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method3}(argument1, argument2);
+    return super.{self::Mixin::method3}(argument1, argument2);
   forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method4}(argument1, argument2);
+    return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
   synthetic constructor •() → self::Class
@@ -45,7 +48,7 @@
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
-  self::expect("Mixin", c.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
new file mode 100644
index 0000000..31bd6b8
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method2(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method3(core::num argument1, covariant core::int argument2) → core::String
+    return "Superclass";
+  method method4(core::num argument1, covariant core::num argument2) → core::String
+    return "Superclass";
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method2(covariant core::int argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method3(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method4(covariant core::int argument1, core::int argument2) → core::String
+    return "Mixin";
+}
+abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Superclass&Mixin
+    : super self::Superclass::•()
+    ;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
+  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+    return super.{self::Mixin::method3}(argument1, argument2);
+  forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+    return super.{self::Mixin::method4}(argument1, argument2);
+}
+class Class extends self::_Class&Superclass&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Superclass&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(expected !={core::Object::==}{(core::Object) → core::bool} actual)
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
index 028d0ab..31bd6b8 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
@@ -32,11 +32,14 @@
   synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  abstract forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
   forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method3}(argument1, argument2);
+    return super.{self::Mixin::method3}(argument1, argument2);
   forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
-    return super.{self::Superclass::method4}(argument1, argument2);
+    return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
   synthetic constructor •() → self::Class
@@ -45,7 +48,7 @@
 }
 static method main() → dynamic {
   self::Class c = new self::Class::•();
-  self::expect("Mixin", c.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
   self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
new file mode 100644
index 0000000..31bd6b8
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method2(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method3(core::num argument1, covariant core::int argument2) → core::String
+    return "Superclass";
+  method method4(core::num argument1, covariant core::num argument2) → core::String
+    return "Superclass";
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method2(covariant core::int argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method3(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method4(covariant core::int argument1, core::int argument2) → core::String
+    return "Mixin";
+}
+abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Superclass&Mixin
+    : super self::Superclass::•()
+    ;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
+  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+    return super.{self::Mixin::method3}(argument1, argument2);
+  forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+    return super.{self::Mixin::method4}(argument1, argument2);
+}
+class Class extends self::_Class&Superclass&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Superclass&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(expected !={core::Object::==}{(core::Object) → core::bool} actual)
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 259a2e3..71a0dbf 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -19,10 +19,7 @@
 general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
-general/issue41210a: TypeCheckError
-general/issue41210b/issue41210: TypeCheckError
 general/mixin_application_override: TypeCheckError
-general/mixin_covariant2: TypeCheckError
 general/override_check_accessor_after_inference: TypeCheckError
 general/override_check_accessor_basic: TypeCheckError
 general/override_check_accessor_with_covariant_modifier: TypeCheckError
@@ -47,7 +44,4 @@
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
 nnbd/issue42603: TypeCheckError
-none/mixin_covariant: TypeCheckError
 rasta/native_is_illegal: Pass # Issue 29763
-runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
-runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
index 5d4096c..11d42be 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
     let dynamic #redirecting_factory = "Missing" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.expect
index 45530e7..6c4e211 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
     let dynamic #redirecting_factory = "Missing" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.transformed.expect
index fd64249..3915deb 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.strong.transformed.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
     let core::String* #redirecting_factory = "Missing" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
index dc7b39d..49d4750 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
@@ -21,6 +21,10 @@
   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
@@ -36,6 +40,10 @@
   synthetic constructor •() → self::_A&Object&Mixin&Mixin*
     : super self::_A&Object&Mixin::•()
     ;
+  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;
 }
 class A extends self::_A&Object&Mixin&Mixin {
   synthetic constructor •() → self::A*
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
index d480428..3324351 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
@@ -22,6 +22,10 @@
   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
@@ -37,6 +41,10 @@
   synthetic constructor •() → self::_A&Object&Mixin&Mixin*
     : super self::_A&Object&Mixin::•()
     ;
+  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;
 }
 class A extends self::_A&Object&Mixin&Mixin {
   synthetic constructor •() → self::A*
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
index 26382b9..7dad5eb 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -70,7 +70,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
   constructor internal() → self::A<self::A::T*>*
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
@@ -91,7 +91,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
   constructor internal() → self::B<self::B::S*>*
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.strong.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.strong.expect
index 2b4efa6..e0f9879 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.strong.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -95,7 +95,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.strong.transformed.expect
index 20f6d97..2f7e9b4 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.strong.transformed.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -95,7 +95,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
index 0c974c2..f7c2600 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
@@ -36,6 +36,8 @@
   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*
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
index e5824bc..d37774c 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
@@ -38,6 +38,8 @@
   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*
@@ -45,5 +47,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::Mixin::foo}();
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}();
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.transformed.expect
index 232c768..2898d5a 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.transformed.expect
@@ -57,5 +57,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::Mixin::foo}();
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}();
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
index 2c5c77a..f560daf 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
@@ -29,7 +29,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[self::C::good];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
index 51b05df..946925a 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[self::C::good];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
index 1ae5647..eec7e67 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[self::C::good];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
index 4cf4cf8..8c6dce3a7 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
@@ -37,6 +37,10 @@
   synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
     : super self::A::•(v1, v2)
     ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  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.strong.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.strong.expect
index 17cb090..a297249 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.strong.expect
@@ -39,6 +39,10 @@
   synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
     : super self::A::•(v1, v2)
     ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  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);
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
index aeefc63..7f34682 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
@@ -5,7 +5,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
   constructor •() → self::A*
     ;
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C*
     ;
   static factory bar() → self::C*
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.strong.expect
index 3cd7551..72b1c0e 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.strong.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.strong.transformed.expect
index e13110b..5286a47 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
index 1e6e2db..4d151fc 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
@@ -23,6 +23,12 @@
   synthetic constructor •() → self::_Foo&Object&Mixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::Mixin::foo}();
+  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
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
index a1b71ad..102e810 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
@@ -24,6 +24,12 @@
   synthetic constructor •() → self::_Foo&Object&Mixin*
     : super core::Object::•()
     ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::Mixin::foo}();
+  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
@@ -40,12 +46,12 @@
     : super self::_Foo&Object&Mixin::•()
     ;
   method foo() → dynamic
-    return super.{self::Mixin::foo}();
+    return super.{self::_Foo&Object&Mixin::foo}();
   method bar() → dynamic
-    return super.{self::Mixin::field};
+    return super.{self::_Foo&Object&Mixin::field};
 }
 static method main() → dynamic {
   self::Foo* f = new self::Foo::•();
-  f.{self::Mixin::field} = 42;
+  f.{self::_Foo&Object&Mixin::field} = 42;
   core::print(f.{self::Foo::bar}());
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.transformed.expect
index 4c078d1..c8a45db 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.transformed.expect
@@ -25,6 +25,8 @@
   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
@@ -35,20 +37,18 @@
   abstract member-signature method toString() → core::String*; -> core::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() → dynamic
-    return 87;
 }
 class Foo extends self::_Foo&Object&Mixin {
   synthetic constructor •() → self::Foo*
     : super self::_Foo&Object&Mixin::•()
     ;
   method foo() → dynamic
-    return super.{self::Mixin::foo}();
+    return super.{self::_Foo&Object&Mixin::foo}();
   method bar() → dynamic
-    return super.{self::Mixin::field};
+    return super.{self::_Foo&Object&Mixin::field};
 }
 static method main() → dynamic {
   self::Foo* f = new self::Foo::•();
-  f.{self::Mixin::field} = 42;
+  f.{self::_Foo&Object&Mixin::field} = 42;
   core::print(f.{self::Foo::bar}());
 }
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
index 4929577..81ef6ef 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
@@ -27,6 +27,34 @@
   synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    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*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl 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(generic-covariant-impl 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}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  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*>*
@@ -36,6 +64,34 @@
   synthetic constructor •() → self::_D&Super&Mixin*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 class D extends self::_D&Super&Mixin {
   synthetic constructor •() → self::D*
@@ -45,11 +101,67 @@
   synthetic constructor •() → self::C2<self::C2::V*>*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    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*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl 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(generic-covariant-impl self::C2::V* a) → self::C2::V*
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
   synthetic constructor •() → self::D2*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 8042da7..e19cafa 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -28,6 +28,34 @@
   synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    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*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl 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(generic-covariant-impl 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}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  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*>*
@@ -38,6 +66,34 @@
   synthetic constructor •() → self::_D&Super&Mixin*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 class D extends self::_D&Super&Mixin {
   synthetic constructor •() → self::D*
@@ -48,15 +104,71 @@
   synthetic constructor •() → self::C2<self::C2::V*>*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    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*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl 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(generic-covariant-impl self::C2::V* a) → self::C2::V*
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
   synthetic constructor •() → self::D2*
     : super self::Super::•()
     ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
 }
 static method main() → dynamic {
-  core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
-  core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
+  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}());
+  core::print(new self::C2::•<dynamic>().{self::C2::foo}());
 }
 
 library test.mixin_library;
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
index e38eaf6..2836f3f 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.outline.expect
@@ -38,6 +38,8 @@
   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*
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
index c3df437..4714ed4 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.strong.expect
@@ -40,6 +40,8 @@
   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*
@@ -47,5 +49,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::M::m}().+(1);
+  new self::C::•().{self::_C&A&M::m}().+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
index 07cd589..3c0ad85 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.strong.transformed.expect
@@ -59,5 +59,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::M::m}().+(1);
+  new self::C::•().{self::_C&A&M::m}().+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
index b4d8b6a..3c59d21 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
@@ -29,7 +29,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35259.dart.strong.expect
index 02e273c..c62b784 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.strong.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35259.dart.strong.transformed.expect
index 0764eb8..a6ad0e6 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let core::String* #redirecting_factory = "Unresolved" in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.outline.expect
index 093fce3..474004e 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.outline.expect
@@ -13,7 +13,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let dynamic #redirecting_factory = self::X::• in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
index efed883..3552933 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let dynamic #redirecting_factory = self::X::• in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
index 4101dff..414ead9ad 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
     let<BottomType> #redirecting_factory = self::X::• in invalid-expression;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.outline.expect
index e10101e..7f77682 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.outline.expect
@@ -17,14 +17,14 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
   constructor •() → self::B<self::B::T*>*
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
     let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C<self::C::K*>*
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35266.dart.strong.expect
index cf588f4..698e95b 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.strong.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35266.dart.strong.transformed.expect
index 3d0f980..fd62e94 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     let<BottomType> #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
index e082c30..6a35bff 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
@@ -54,7 +54,7 @@
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int* x) → void
-    return super.{self::B::f}(x);
+    return super.{self::M::f}(x);
 }
 static method g1(self::C* c) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
index 7e86517..9d84b87 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
@@ -55,7 +55,7 @@
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int* x) → void
-    return super.{self::B::f}(x);
+    return super.{self::M::f}(x);
 }
 static method g1(self::C* c) → void {
   c.{self::C::f}(1);
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index d6eb674..10bc3ee 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -76,10 +76,14 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
   forwarding-stub set x(generic-covariant-impl core::int* value) → void
-    return super.{self::B::x} = value;
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
   forwarding-stub set y(covariant core::Object* value) → void
-    return super.{self::B::y} = value;
+    return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
index 6b59110..a084cac 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
@@ -83,10 +83,14 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
   forwarding-stub set x(generic-covariant-impl core::int* value) → void
-    return super.{self::B::x} = value;
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
   forwarding-stub set y(covariant core::Object* value) → void
-    return super.{self::B::y} = value;
+    return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void {
   try {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.transformed.expect
new file mode 100644
index 0000000..419c073
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.transformed.expect
@@ -0,0 +1,126 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:51:7: Error: The mixin application class 'C' introduces an erroneous override of 'y'.
+// class C = B with M implements I<int>;
+//       ^
+// 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;
+//       ^
+// 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);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int* {
+    throw "Should not be reached";
+  }
+  set x(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  get y() → core::int* {
+    throw "Should not be reached";
+  }
+  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*>*
+    : super core::Object::•()
+    ;
+  abstract get x() → self::I::T*;
+  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract get y() → core::Object*;
+  abstract set y(covariant 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
+}
+class M extends core::Object {
+  field core::int* x = null;
+  field core::int* y = null;
+  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*/  {
+  generic-covariant-impl field core::int* x = null;
+  covariant field core::int* y = null;
+  synthetic constructor •() → self::C*
+    : super 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 expectTypeError(() →* void callback) → void {
+  try {
+    callback.call();
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!value.{core::Object::==}(expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method test(self::I<core::Object*>* i) → void {
+  self::expectTypeError(() → Null {
+    i.{self::I::x} = "hello";
+  });
+  i.{self::I::x} = 1;
+  self::expect(i.{self::I::x}, 1);
+  self::expectTypeError(() → Null {
+    i.{self::I::y} = "hello";
+  });
+  i.{self::I::y} = 2;
+  self::expect(i.{self::I::y}, 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.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index f7e1913..48cf848 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -83,10 +83,14 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
   forwarding-stub set x(generic-covariant-impl core::int* value) → void
-    return super.{self::B::x} = value;
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
   forwarding-stub set y(covariant core::Object* value) → void
-    return super.{self::B::y} = value;
+    return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
index 48bd4ce..3f56a5f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
@@ -92,10 +92,14 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
   forwarding-stub set x(generic-covariant-impl core::int* value) → void
-    return super.{self::B::x} = value;
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
   forwarding-stub set y(covariant core::Object* value) → void
-    return super.{self::B::y} = value;
+    return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void {
   try {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.transformed.expect
new file mode 100644
index 0000000..bbb9329
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.transformed.expect
@@ -0,0 +1,143 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:58:7: Error: The mixin application class 'C' introduces an erroneous override of 'y'.
+// class C = B with M implements I<int>;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:53:18: Context: The parameter 'value' of the method 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden method, 'I.y'.
+//  - 'Object' is from 'dart:core'.
+// Change to a supertype of 'Object', or, for a covariant parameter, a subtype.
+//   void set y(int value) {
+//                  ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:43:12: Context: This is the overridden method ('y').
+//   void set y(covariant Object value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int* {
+    throw "Should not be reached";
+  }
+  set x(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  get y() → core::int* {
+    throw "Should not be reached";
+  }
+  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*>*
+    : super core::Object::•()
+    ;
+  abstract get x() → self::I::T*;
+  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract get y() → core::Object*;
+  abstract set y(covariant 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
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 1;
+  set x(core::int* value) → void {
+    self::expect(value, 2);
+  }
+  get y() → core::int*
+    return 3;
+  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*
+    : super self::B::•()
+    ;
+  get x() → core::int*
+    return 1;
+  set x(generic-covariant-impl core::int* value) → void {
+    self::expect(value, 2);
+  }
+  get y() → core::int*
+    return 3;
+  set y(covariant 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
+}
+static method expectTypeError(() →* void callback) → void {
+  try {
+    callback.call();
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!value.{core::Object::==}(expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method test(self::I<core::Object*>* i) → void {
+  self::expectTypeError(() → Null {
+    i.{self::I::x} = "hello";
+  });
+  i.{self::I::x} = 2;
+  self::expect(i.{self::I::x}, 1);
+  self::expectTypeError(() → Null {
+    i.{self::I::y} = "hello";
+  });
+  i.{self::I::y} = 4;
+  self::expect(i.{self::I::y}, 3);
+}
+static method main() → void {
+  self::test(new self::C::•());
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 7ddc27c..eea0f81 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -72,13 +72,11 @@
 general/issue38938: RuntimeError # no main and compile time errors.
 general/issue38944: RuntimeError # no main and compile time errors.
 general/issue38961: RuntimeError # no main and compile time errors.
-general/issue41210a: TypeCheckError
-general/issue41210b/issue41210: TypeCheckError
 general/micro: RuntimeError
 general/mixin_application_override: ExpectationFileMismatch # Too many errors.
 general/mixin_application_override: TypeCheckError
 general/mixin_constructors_with_default_values: RuntimeError # Expected
-general/mixin_covariant2: TypeCheckError
+general/mixin_covariant2: RuntimeError
 general/operator_method_not_found: RuntimeError # Expected
 general/optional: TypeCheckError
 general/override_check_accessor_after_inference: TypeCheckError # Issue #31620
@@ -176,7 +174,6 @@
 nnbd/nullable_receiver: TypeCheckError
 nnbd/potentially_nullable_access: TypeCheckError
 none/equals: TypeCheckError
-none/mixin_covariant: TypeCheckError
 none/method_invocation: TypeCheckError
 none/operator: TypeCheckError
 none/property_get: TypeCheckError
@@ -249,9 +246,7 @@
 regress/issue_39091_2: RuntimeError
 regress/utf_16_le_content.crash: RuntimeError
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
-runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
 runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
-runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
 set_literals/disambiguation_rule: RuntimeError
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 5607a50..2d00cd0 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -74,12 +74,10 @@
 general/issue38938: RuntimeError
 general/issue38944: RuntimeError
 general/issue38961: RuntimeError
-general/issue41210a: TypeCheckError
-general/issue41210b/issue41210: TypeCheckError
 general/micro: RuntimeError
 general/mixin_application_override: TypeCheckError
 general/mixin_constructors_with_default_values: RuntimeError
-general/mixin_covariant2: TypeCheckError
+general/mixin_covariant2: RuntimeError
 general/operator_method_not_found: RuntimeError
 general/optional: TypeCheckError
 general/override_check_accessor_after_inference: TypeCheckError # Issue #31620
@@ -179,7 +177,7 @@
 nnbd/potentially_nullable_access: TypeCheckError
 none/equals: TypeCheckError
 none/method_invocation: TypeCheckError
-none/mixin_covariant: TypeCheckError
+none/mixin_covariant: TextSerializationFailure
 none/operator: TypeCheckError
 none/property_get: TypeCheckError
 none/property_set: TypeCheckError
@@ -252,8 +250,6 @@
 regress/issue_39091_2: RuntimeError
 regress/utf_16_le_content.crash: RuntimeError
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
-runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
-runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
 set_literals/disambiguation_rule: RuntimeError
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index d19e60e..3fa89df 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -72,7 +72,6 @@
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
 none/equals: TypeCheckError
 none/method_invocation: TypeCheckError
-none/mixin_covariant: TypeCheckError
 none/operator: TypeCheckError
 none/property_get: TypeCheckError
 none/property_set: TypeCheckError
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 2bfc380..6e71d73 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 53;
+  UInt32 formatVersion = 54;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -363,8 +363,8 @@
   UriReference fileUri;
   FileOffset fileOffset;
   FileOffset fileEndOffset;
-  UInt flags (isFinal, isConst, isStatic, hasImplicitGetter, hasImplicitSetter,
-                isCovariant, isGenericCovariantImpl, isLate, isExtensionMember,
+  UInt flags (isFinal, isConst, isStatic, isCovariant,
+                isGenericCovariantImpl, isLate, isExtensionMember,
                 isNonNullableByDefault, isInternalImplementation);
   Name name;
   List<Expression> annotations;
@@ -399,12 +399,12 @@
 /*
 enum ProcedureStubKind {
   Regular,
-  ForwardingStub,
-  ForwardingSuperStub,
+  AbstractForwardingStub,
+  ConcreteForwardingStub,
   NoSuchMethodForwarder,
   MemberSignature,
-  MixinStub,
-  MixinSuperStub,
+  AbstractMixinStub,
+  ConcreteMixinStub,
 }
 */
 
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index f80d63f..81fcfb6 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -545,9 +545,11 @@
     for (int i = 0; i < fields.length; ++i) {
       Field field = fields[i];
       canonicalName.getChildFromField(field).bindTo(field.getterReference);
-      canonicalName
-          .getChildFromFieldSetter(field)
-          .bindTo(field.setterReference);
+      if (field.hasSetter) {
+        canonicalName
+            .getChildFromFieldSetter(field)
+            .bindTo(field.setterReference);
+      }
     }
     for (int i = 0; i < procedures.length; ++i) {
       Procedure member = procedures[i];
@@ -1192,9 +1194,11 @@
     for (int i = 0; i < fields.length; ++i) {
       Field member = fields[i];
       canonicalName.getChildFromField(member).bindTo(member.getterReference);
-      canonicalName
-          .getChildFromFieldSetter(member)
-          .bindTo(member.setterReference);
+      if (member.hasSetter) {
+        canonicalName
+            .getChildFromFieldSetter(member)
+            .bindTo(member.setterReference);
+      }
     }
     for (int i = 0; i < procedures.length; ++i) {
       Procedure member = procedures[i];
@@ -1683,26 +1687,42 @@
   CanonicalName get getterCanonicalName => getterReference?.canonicalName;
   CanonicalName get setterCanonicalName => setterReference?.canonicalName;
 
-  Field(Name name,
+  Field.mutable(Name name,
+      {this.type: const DynamicType(),
+      this.initializer,
+      bool isCovariant: false,
+      bool isFinal: false,
+      bool isStatic: false,
+      bool isLate: false,
+      int transformerFlags: 0,
+      Uri fileUri,
+      Reference getterReference,
+      Reference setterReference})
+      : this.setterReference = setterReference ?? new Reference(),
+        super(name, fileUri, getterReference) {
+    this.setterReference.node = this;
+    assert(type != null);
+    initializer?.parent = this;
+    this.isCovariant = isCovariant;
+    this.isFinal = isFinal;
+    this.isStatic = isStatic;
+    this.isLate = isLate;
+    this.transformerFlags = transformerFlags;
+  }
+
+  Field.immutable(Name name,
       {this.type: const DynamicType(),
       this.initializer,
       bool isCovariant: false,
       bool isFinal: false,
       bool isConst: false,
       bool isStatic: false,
-      bool hasImplicitGetter,
-      bool hasImplicitSetter,
       bool isLate: false,
       int transformerFlags: 0,
       Uri fileUri,
-      Reference getterReference,
-      Reference setterReference})
-      :
-        // TODO(jensj): Maybe don't create one for final fields?
-        // ('final' is a mutable setting though).
-        this.setterReference = setterReference ?? new Reference(),
+      Reference getterReference})
+      : this.setterReference = null,
         super(name, fileUri, getterReference) {
-    this.setterReference.node = this;
     assert(type != null);
     initializer?.parent = this;
     this.isCovariant = isCovariant;
@@ -1710,31 +1730,26 @@
     this.isConst = isConst;
     this.isStatic = isStatic;
     this.isLate = isLate;
-    this.hasImplicitGetter = hasImplicitGetter ?? !isStatic;
-    this.hasImplicitSetter = hasImplicitSetter ??
-        (!isStatic &&
-            !isConst &&
-            (!isFinal || (isLate && initializer == null)));
     this.transformerFlags = transformerFlags;
   }
 
   @override
   void _relinkNode() {
     super._relinkNode();
-    this.setterReference.node = this;
+    if (hasSetter) {
+      this.setterReference.node = this;
+    }
   }
 
   static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
   static const int FlagConst = 1 << 1;
   static const int FlagStatic = 1 << 2;
-  static const int FlagHasImplicitGetter = 1 << 3;
-  static const int FlagHasImplicitSetter = 1 << 4;
-  static const int FlagCovariant = 1 << 5;
-  static const int FlagGenericCovariantImpl = 1 << 6;
-  static const int FlagLate = 1 << 7;
-  static const int FlagExtensionMember = 1 << 8;
-  static const int FlagNonNullableByDefault = 1 << 9;
-  static const int FlagInternalImplementation = 1 << 10;
+  static const int FlagCovariant = 1 << 3;
+  static const int FlagGenericCovariantImpl = 1 << 4;
+  static const int FlagLate = 1 << 5;
+  static const int FlagExtensionMember = 1 << 6;
+  static const int FlagNonNullableByDefault = 1 << 7;
+  static const int FlagInternalImplementation = 1 << 8;
 
   /// Whether the field is declared with the `covariant` keyword.
   bool get isCovariant => flags & FlagCovariant != 0;
@@ -1746,26 +1761,6 @@
   @override
   bool get isExtensionMember => flags & FlagExtensionMember != 0;
 
-  /// If true, a getter should be generated for this field.
-  ///
-  /// If false, there may or may not exist an explicit getter in the same class
-  /// with the same name as the field.
-  ///
-  /// By default, all non-static fields have implicit getters.
-  bool get hasImplicitGetter => flags & FlagHasImplicitGetter != 0;
-
-  /// If true, a setter should be generated for this field.
-  ///
-  /// If false, there may or may not exist an explicit setter in the same class
-  /// with the same name as the field.
-  ///
-  /// Final fields never have implicit setters, but a field without an implicit
-  /// setter is not necessarily final, as it may be mutated by direct field
-  /// access.
-  ///
-  /// By default, all non-static, non-final fields have implicit setters.
-  bool get hasImplicitSetter => flags & FlagHasImplicitSetter != 0;
-
   /// Indicates whether the implicit setter associated with this field needs to
   /// contain a runtime type check to deal with generic covariance.
   ///
@@ -1804,18 +1799,6 @@
         value ? (flags | FlagExtensionMember) : (flags & ~FlagExtensionMember);
   }
 
-  void set hasImplicitGetter(bool value) {
-    flags = value
-        ? (flags | FlagHasImplicitGetter)
-        : (flags & ~FlagHasImplicitGetter);
-  }
-
-  void set hasImplicitSetter(bool value) {
-    flags = value
-        ? (flags | FlagHasImplicitSetter)
-        : (flags & ~FlagHasImplicitSetter);
-  }
-
   void set isGenericCovariantImpl(bool value) {
     flags = value
         ? (flags | FlagGenericCovariantImpl)
@@ -1832,11 +1815,9 @@
         : (flags & ~FlagInternalImplementation);
   }
 
-  /// True if the field is neither final nor const.
-  bool get isMutable => flags & (FlagFinal | FlagConst) == 0;
   bool get isInstanceMember => !isStatic;
   bool get hasGetter => true;
-  bool get hasSetter => isMutable || isLate && initializer == null;
+  bool get hasSetter => setterReference != null;
 
   bool get isExternal => false;
   void set isExternal(bool value) {
@@ -2163,16 +2144,16 @@
   ///        void method2(int o) {}
   ///     }
   ///     class C implements A<int>, B {
-  ///        // Forwarding stub needed because the parameter is covariant in
-  ///        // `B.method1` but not in `A.method1`.
+  ///        // Abstract forwarding stub needed because the parameter is
+  ///        // covariant in `B.method1` but not in `A.method1`.
   ///        void method1(covariant num o);
-  ///        // Forwarding stub needed because the parameter is a generic
-  ///        // covariant impl in `A.method2` but not in `B.method2`.
+  ///        // Abstract forwarding stub needed because the parameter is a
+  ///        // generic covariant impl in `A.method2` but not in `B.method2`.
   ///        void method2(/*generic-covariant-impl*/ int o);
   ///     }
   ///
   /// The stub target is one of the overridden members.
-  ForwardingStub,
+  AbstractForwardingStub,
 
   /// A concrete procedure inserted to add `isCovariant` and
   /// `isGenericCovariantImpl` checks to parameters before calling the
@@ -2191,15 +2172,15 @@
   ///        void method2(int o) {}
   ///     }
   ///     class C extends A<int> implements B {
-  ///        // Forwarding stub needed because the parameter is covariant in
-  ///        // `B.method1` but not in `A.method1`.
+  ///        // Concrete forwarding stub needed because the parameter is
+  ///        // covariant in `B.method1` but not in `A.method1`.
   ///        void method1(covariant num o) => super.method1(o);
-  ///        // No need for a super stub for `A.method2` because it has the
-  ///        // right covariance flags already.
+  ///        // No need for a concrete forwarding stub for `A.method2` because
+  ///        // it has the right covariance flags already.
   ///     }
   ///
   /// The stub target is the called superclass member.
-  ForwardingSuperStub,
+  ConcreteForwardingStub,
 
   /// A concrete procedure inserted to forward calls to `noSuchMethod` for
   /// an inherited member that it does not implement.
@@ -2274,22 +2255,23 @@
   ///        void method();
   ///     }
   ///     class Class = Super with Mixin
-  ///       // A mixin stub for `A.method` is added to `Class`
+  ///       // An abstract mixin stub for `A.method` is added to `Class`
   ///       void method();
   ///     ;
   ///
   /// This is added to ensure that interface targets are resolved consistently
-  /// in face of cloning. For instance, without the mixin stub, this call:
+  /// in face of cloning. For instance, without the abstract mixin stub, this
+  /// call:
   ///
   ///     method(Class c) => c.method();
   ///
-  /// would use `Mixin.method` as its target, but after load from a VM .dill
+  /// would use `Mixin.method` as its target, but after loading from a VM .dill
   /// (which clones all mixin members) the call would resolve to `Class.method`
   /// instead. By adding the mixin stub to `Class`, all accesses both before
   /// and after .dill will point to `Class.method`.
   ///
   /// The stub target is the mixin member.
-  MixinStub,
+  AbstractMixinStub,
 
   /// A concrete procedure inserted for the application of a concrete mixin
   /// member. The implementation calls the mixin member via a super-call.
@@ -2302,26 +2284,26 @@
   ///        void method() {}
   ///     }
   ///     class Class = Super with Mixin
-  ///       // A mixin stub for `A.method` is added to `Class` which calls
-  ///       // `A.method`.
+  ///       // A concrete mixin stub for `A.method` is added to `Class` which
+  ///       // calls `A.method`.
   ///       void method() => super.method();
   ///     ;
   ///
   /// This is added to ensure that super accesses are resolved correctly, even
-  /// in face of cloning. For instance, without the mixin super stub, this super
-  /// call:
+  /// in face of cloning. For instance, without the concrete mixin stub, this
+  /// super call:
   ///
   ///     class Subclass extends Class {
   ///       method(Class c) => super.method();
   ///     }
   ///
-  /// would use `Mixin.method` as its target, which would to be update to match
-  /// the cloning of mixin member performed for instance by the VM. By adding
-  /// the mixin super stub to `Class`, all accesses both before and after
-  /// cloning will point to `Class.method`.
+  /// would use `Mixin.method` as its target, which would need to be updated to
+  /// match the clone of the mixin member performed for instance by the VM. By
+  /// adding the concrete mixin stub to `Class`, all accesses both before and
+  /// after cloning will point to `Class.method`.
   ///
   /// The stub target is the called mixin member.
-  MixinSuperStub,
+  ConcreteMixinStub,
 }
 
 /// A method, getter, setter, index-getter, index-setter, operator overloader,
@@ -2457,22 +2439,19 @@
 
   /// If set, this flag indicates that this function's implementation exists
   /// solely for the purpose of type checking arguments and forwarding to
-  /// [forwardingStubSuperTarget].
+  /// [concreteForwardingStubTarget].
   ///
   /// Note that just because this bit is set doesn't mean that the function was
   /// not declared in the source; it's possible that this is a forwarding
   /// semi-stub (see isForwardingSemiStub).  To determine whether this function
   /// was present in the source, consult [isSyntheticForwarder].
   bool get isForwardingStub =>
-      stubKind == ProcedureStubKind.ForwardingStub ||
-      stubKind == ProcedureStubKind.ForwardingSuperStub;
+      stubKind == ProcedureStubKind.AbstractForwardingStub ||
+      stubKind == ProcedureStubKind.ConcreteForwardingStub;
 
   /// If set, this flag indicates that although this function is a forwarding
   /// stub, it was present in the original source as an abstract method.
-  bool get isForwardingSemiStub =>
-      !isSynthetic &&
-      (stubKind == ProcedureStubKind.ForwardingStub ||
-          stubKind == ProcedureStubKind.ForwardingSuperStub);
+  bool get isForwardingSemiStub => !isSynthetic && isForwardingStub;
 
   /// If set, this method is a class member added to show the type of an
   /// inherited member.
@@ -2491,7 +2470,7 @@
 
   /// If set, this flag indicates that this function was not present in the
   /// source, and it exists solely for the purpose of type checking arguments
-  /// and forwarding to [forwardingStubSuperTarget].
+  /// and forwarding to [concreteForwardingStubTarget].
   bool get isSyntheticForwarder => isForwardingStub && !isForwardingSemiStub;
   bool get isSynthetic => flags & FlagSynthetic != 0;
 
@@ -2550,13 +2529,13 @@
         : (flags & ~FlagNonNullableByDefault);
   }
 
-  Member get forwardingStubSuperTarget =>
-      stubKind == ProcedureStubKind.ForwardingSuperStub
+  Member get concreteForwardingStubTarget =>
+      stubKind == ProcedureStubKind.ConcreteForwardingStub
           ? stubTargetReference?.asMember
           : null;
 
-  Member get forwardingStubInterfaceTarget =>
-      stubKind == ProcedureStubKind.ForwardingStub
+  Member get abstractForwardingStubTarget =>
+      stubKind == ProcedureStubKind.AbstractForwardingStub
           ? stubTargetReference?.asMember
           : null;
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 5dcfeb2..b78e407 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -63,10 +63,14 @@
   final String message;
 
   CanonicalNameError(this.message);
+
+  String toString() => 'CanonicalNameError: $message';
 }
 
 class CanonicalNameSdkError extends CanonicalNameError {
   CanonicalNameSdkError(String message) : super(message);
+
+  String toString() => 'CanonicalNameSdkError: $message';
 }
 
 class _ComponentIndex {
@@ -631,11 +635,10 @@
           bool checkReferenceNode = true;
           if (child.reference == null) {
             // OK for "if private: URI of library" part of "Qualified name"...
-            Iterable<CanonicalName> children = child.childrenOrNull;
-            if (parent.parent != null &&
-                children != null &&
-                children.isNotEmpty &&
-                children.first.name.startsWith("_")) {
+            // TODO(johnniwinther): This wrongfully skips checking of variable
+            // synthesized by the VM transformations. The kind of canonical
+            // name types maybe should be directly available.
+            if (parent.parent != null && child.name.contains(':')) {
               // OK then.
               checkReferenceNode = false;
             } else {
@@ -1358,14 +1361,18 @@
     CanonicalName getterCanonicalName = readCanonicalNameReference();
     Reference getterReference = getterCanonicalName.getReference();
     CanonicalName setterCanonicalName = readCanonicalNameReference();
-    Reference setterReference = setterCanonicalName.getReference();
+    Reference setterReference = setterCanonicalName?.getReference();
     Field node = getterReference.node;
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
     if (node == null) {
-      node = new Field(null,
-          getterReference: getterReference, setterReference: setterReference);
+      if (setterReference != null) {
+        node = new Field.mutable(null,
+            getterReference: getterReference, setterReference: setterReference);
+      } else {
+        node = new Field.immutable(null, getterReference: getterReference);
+      }
     }
     Uri fileUri = readUriReference();
     int fileOffset = readOffset();
@@ -1487,7 +1494,7 @@
     node.stubKind = stubKind;
     node.stubTargetReference = stubTargetReference;
 
-    assert((node.stubKind == ProcedureStubKind.ForwardingSuperStub &&
+    assert((node.stubKind == ProcedureStubKind.ConcreteForwardingStub &&
             node.stubTargetReference != null) ||
         !(node.isForwardingStub && node.function.body != null));
     assert(!(node.isMemberSignature && node.stubTargetReference == null),
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 6c09178..9a698fb 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1214,13 +1214,12 @@
     assert(!(node.isMemberSignature && node.stubTargetReference == null),
         "No member signature origin for member signature $node.");
     assert(
-        !(node.forwardingStubInterfaceTarget is Procedure &&
-            (node.forwardingStubInterfaceTarget as Procedure)
-                .isMemberSignature),
+        !(node.abstractForwardingStubTarget is Procedure &&
+            (node.abstractForwardingStubTarget as Procedure).isMemberSignature),
         "Forwarding stub interface target is member signature: $node.");
     assert(
-        !(node.forwardingStubSuperTarget is Procedure &&
-            (node.forwardingStubSuperTarget as Procedure).isMemberSignature),
+        !(node.concreteForwardingStubTarget is Procedure &&
+            (node.concreteForwardingStubTarget as Procedure).isMemberSignature),
         "Forwarding stub super target is member signature: $node.");
 
     procedureOffsets.add(getBufferOffset());
@@ -1253,20 +1252,27 @@
 
     _currentlyInNonimplementation = currentlyInNonimplementationSaved;
     assert(
-        (node.forwardingStubSuperTarget != null) ||
+        (node.concreteForwardingStubTarget != null) ||
             !(node.isForwardingStub && node.function.body != null),
         "Invalid forwarding stub $node.");
   }
 
   @override
   void visitField(Field node) {
-    if (node.getterCanonicalName == null || node.setterCanonicalName == null) {
+    if (node.getterCanonicalName == null) {
+      throw new ArgumentError('Missing canonical name for $node');
+    }
+    if (node.hasSetter && node.setterCanonicalName == null) {
       throw new ArgumentError('Missing canonical name for $node');
     }
     enterScope(memberScope: true);
     writeByte(Tag.Field);
     writeNonNullCanonicalNameReference(getCanonicalNameOfMemberGetter(node));
-    writeNonNullCanonicalNameReference(getCanonicalNameOfMemberSetter(node));
+    if (node.hasSetter) {
+      writeNonNullCanonicalNameReference(getCanonicalNameOfMemberSetter(node));
+    } else {
+      writeNullAllowedReference(null);
+    }
     writeUriReference(node.fileUri);
     writeOffset(node.fileOffset);
     writeOffset(node.fileEndOffset);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 6c9b2c1..8e32adb 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -172,7 +172,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 53;
+  static const int BinaryFormatVersion = 54;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index 6a1a469..a5d6446 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -183,10 +183,18 @@
   }
 
   void removeChild(String name) {
-    _children?.remove(name);
+    if (_children != null) {
+      _children.remove(name);
+      if (_children.isEmpty) {
+        _children = null;
+      }
+    }
   }
 
   void bindTo(Reference target) {
+    if (target == null) {
+      throw '$this cannot be bound to null';
+    }
     if (reference == target) return;
     if (reference != null) {
       throw '$this is already bound';
@@ -200,6 +208,16 @@
   }
 
   void unbind() {
+    _unbindInternal();
+    // TODO(johnniwinther): To support replacement of fields with getters and
+    // setters (and the reverse) we need to remove canonical names from the
+    // canonical name tree. We need to establish better invariants about the
+    // state of the canonical name tree, since for instance [unbindAll] doesn't
+    // remove unneeded leaf nodes.
+    _parent.removeChild(name);
+  }
+
+  void _unbindInternal() {
     if (reference == null) return;
     assert(reference.canonicalName == this);
     if (reference.node is Class) {
@@ -213,7 +231,7 @@
   }
 
   void unbindAll() {
-    unbind();
+    _unbindInternal();
     Iterable<CanonicalName> children_ = childrenOrNull;
     if (children_ != null) {
       for (CanonicalName child in children_) {
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index dbe15bd..1a75d7e 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1200,47 +1200,51 @@
         setters ? info.lazyDeclaredSetters : info.lazyDeclaredGettersAndCalls;
     if (members != null) return members;
 
+    // To support that mixin application can declare their own members, for
+    // instance cloned mixin members and concrete forwarding stubs, we first
+    // collect the members in a map before creating the list of members, so that
+    // declared members can replace mixed in members.
+    Map<Name, Member> memberMap = {};
     if (classNode.mixedInType != null) {
       Class mixedInClassNode = classNode.mixedInType.classNode;
       _ClassInfo mixedInInfo = _infoMap[mixedInClassNode];
 
-      members = <Member>[];
       for (Member mixinMember in _buildDeclaredMembers(
           mixedInClassNode, mixedInInfo,
           setters: setters)) {
         if (mixinMember is! Procedure ||
             (mixinMember is Procedure &&
                 !mixinMember.isNoSuchMethodForwarder)) {
-          members.add(mixinMember);
+          memberMap[mixinMember.name] = mixinMember;
         }
       }
-    } else {
-      members = <Member>[];
-      for (Procedure procedure in classNode.procedures) {
-        if (procedure.isStatic) continue;
-        if (procedure.kind == ProcedureKind.Setter) {
-          if (setters) {
-            members.add(procedure);
-          }
-        } else {
-          if (!setters) {
-            members.add(procedure);
-          }
-        }
-      }
-      for (Field field in classNode.fields) {
-        if (field.isStatic) continue;
-        if (!setters && field.hasImplicitGetter) {
-          members.add(field);
-        }
-        if (setters && field.hasImplicitSetter) {
-          members.add(field);
-        }
-      }
-
-      members.sort(ClassHierarchy.compareMembers);
     }
 
+    for (Procedure procedure in classNode.procedures) {
+      if (procedure.isStatic) continue;
+      if (procedure.kind == ProcedureKind.Setter) {
+        if (setters) {
+          memberMap[procedure.name] = procedure;
+        }
+      } else {
+        if (!setters) {
+          memberMap[procedure.name] = procedure;
+        }
+      }
+    }
+    for (Field field in classNode.fields) {
+      if (field.isStatic) continue;
+      if (!setters) {
+        memberMap[field.name] = field;
+      }
+      if (setters && field.hasSetter) {
+        memberMap[field.name] = field;
+      }
+    }
+
+    members = memberMap.values.toList();
+    members.sort(ClassHierarchy.compareMembers);
+
     if (setters) {
       info.lazyDeclaredSetters = members;
     } else {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index e5fc340..4158c39 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -747,12 +747,12 @@
     return result;
   }
 
-  Procedure cloneProcedure(Procedure node, Procedure referenceFrom) {
+  Procedure cloneProcedure(Procedure node, Reference reference) {
     final Uri activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
     Procedure result = new Procedure(
         node.name, node.kind, super.clone(node.function),
-        reference: referenceFrom?.reference,
+        reference: reference,
         transformerFlags: node.transformerFlags,
         fileUri: _activeFileUri,
         stubKind: node.stubKind,
@@ -769,24 +769,33 @@
     return result;
   }
 
-  Field cloneField(Field node, Field referenceFrom) {
+  Field cloneField(
+      Field node, Reference getterReference, Reference setterReference) {
     final Uri activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
 
-    Field result = new Field(node.name,
-        type: visitType(node.type),
-        initializer: cloneOptional(node.initializer),
-        isCovariant: node.isCovariant,
-        isFinal: node.isFinal,
-        isConst: node.isConst,
-        isStatic: node.isStatic,
-        isLate: node.isLate,
-        hasImplicitGetter: node.hasImplicitGetter,
-        hasImplicitSetter: node.hasImplicitSetter,
-        transformerFlags: node.transformerFlags,
-        fileUri: _activeFileUri,
-        getterReference: referenceFrom?.getterReference,
-        setterReference: referenceFrom?.setterReference)
+    Field result;
+    if (node.hasSetter) {
+      result = new Field.mutable(node.name,
+          type: visitType(node.type),
+          initializer: cloneOptional(node.initializer),
+          transformerFlags: node.transformerFlags,
+          fileUri: _activeFileUri,
+          getterReference: getterReference,
+          setterReference: setterReference);
+    } else {
+      assert(
+          setterReference == null,
+          "Cannot use setter reference $setterReference "
+          "for clone of an immutable field.");
+      result = new Field.immutable(node.name,
+          type: visitType(node.type),
+          initializer: cloneOptional(node.initializer),
+          transformerFlags: node.transformerFlags,
+          fileUri: _activeFileUri,
+          getterReference: getterReference);
+    }
+    result
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[]
@@ -828,6 +837,93 @@
   }
 }
 
+/// Cloner that resolves super calls in mixin declarations.
+class MixinApplicationCloner extends CloneVisitorWithMembers {
+  final Class mixinApplicationClass;
+  Map<Name, Member> _getterMap;
+  Map<Name, Member> _setterMap;
+
+  MixinApplicationCloner(this.mixinApplicationClass,
+      {Map<TypeParameter, DartType> typeSubstitution,
+      Map<TypeParameter, TypeParameter> typeParams,
+      bool cloneAnnotations = true})
+      : super(
+            typeSubstitution: typeSubstitution,
+            typeParams: typeParams,
+            cloneAnnotations: cloneAnnotations);
+
+  Member _findSuperMember(Name name, {bool isSetter}) {
+    assert(isSetter != null);
+    Map<Name, Member> cache;
+    if (isSetter) {
+      cache = _setterMap ??= {};
+    } else {
+      cache = _getterMap ??= {};
+    }
+    Member member = cache[name];
+    if (member != null) {
+      return member;
+    }
+    Class superClass = mixinApplicationClass.superclass;
+    while (superClass != null) {
+      for (Procedure procedure in superClass.procedures) {
+        if (procedure.name == name) {
+          if (isSetter) {
+            if (procedure.kind == ProcedureKind.Setter &&
+                !procedure.isAbstract) {
+              return cache[name] = procedure;
+            }
+          } else {
+            if (procedure.kind != ProcedureKind.Setter &&
+                !procedure.isAbstract) {
+              return cache[name] = procedure;
+            }
+          }
+        }
+      }
+      for (Field field in superClass.fields) {
+        if (field.name == name) {
+          if (isSetter) {
+            if (field.hasSetter) {
+              return cache[name] = field;
+            }
+          } else {
+            return cache[name] = field;
+          }
+        }
+      }
+
+      superClass = superClass.superclass;
+    }
+    // TODO(johnniwinther): Throw instead when the CFE reports missing concrete
+    // super members.
+    // throw new StateError(
+    //     'No super member found for $name in $mixinApplicationClass');
+    return null;
+  }
+
+  @override
+  SuperMethodInvocation visitSuperMethodInvocation(SuperMethodInvocation node) {
+    SuperMethodInvocation cloned = super.visitSuperMethodInvocation(node);
+    cloned.interfaceTarget = _findSuperMember(node.name, isSetter: false);
+    return cloned;
+  }
+
+  @override
+  SuperPropertyGet visitSuperPropertyGet(SuperPropertyGet node) {
+    SuperPropertyGet cloned = super.visitSuperPropertyGet(node);
+    cloned.interfaceTarget = _findSuperMember(node.name, isSetter: false);
+    return cloned;
+  }
+
+  @override
+  SuperPropertySet visitSuperPropertySet(SuperPropertySet node) {
+    SuperPropertySet cloned = super.visitSuperPropertySet(node);
+    cloned.interfaceTarget = _findSuperMember(node.name, isSetter: true);
+    return cloned;
+  }
+}
+
 class CloneProcedureWithoutBody extends CloneVisitorWithMembers {
   CloneProcedureWithoutBody(
       {Map<TypeParameter, DartType> typeSubstitution,
diff --git a/pkg/kernel/lib/kernel.dart b/pkg/kernel/lib/kernel.dart
index f30a6cd..45ccce9 100644
--- a/pkg/kernel/lib/kernel.dart
+++ b/pkg/kernel/lib/kernel.dart
@@ -60,6 +60,12 @@
   return future;
 }
 
+List<int> writeComponentToBytes(Component component) {
+  BytesSink sink = new BytesSink();
+  new BinaryPrinter(sink).writeComponentFile(component);
+  return sink.builder.toBytes();
+}
+
 void writeLibraryToText(Library library, {String path}) {
   StringBuffer buffer = new StringBuffer();
   new Printer(buffer).writeLibraryFile(library);
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 709fbb5..6257e3d 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -3,7 +3,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import "ast.dart"
-    show Class, Constructor, Extension, Field, Library, Procedure, Typedef;
+    show
+        Class,
+        Constructor,
+        Extension,
+        Field,
+        Library,
+        Reference,
+        Procedure,
+        Typedef;
 
 class ReferenceFromIndex {
   Map<Library, IndexedLibrary> _indexedLibraries =
@@ -19,17 +27,43 @@
   IndexedLibrary lookupLibrary(Library library) => _indexedLibraries[library];
 }
 
-class IndexedLibrary {
+abstract class IndexedContainer {
+  final Map<String, Reference> _getterReferences = new Map<String, Reference>();
+  final Map<String, Reference> _setterReferences = new Map<String, Reference>();
+
+  Reference lookupGetterReference(String name) => _getterReferences[name];
+  Reference lookupSetterReference(String name) => _setterReferences[name];
+
+  void _addProcedures(List<Procedure> procedures) {
+    for (int i = 0; i < procedures.length; i++) {
+      Procedure procedure = procedures[i];
+      String name = procedure.name.text;
+      if (procedure.isSetter) {
+        _setterReferences[name] = procedure.reference;
+      } else {
+        _getterReferences[name] = procedure.reference;
+      }
+    }
+  }
+
+  void _addFields(List<Field> fields) {
+    for (int i = 0; i < fields.length; i++) {
+      Field field = fields[i];
+      String name = field.name.text;
+      _getterReferences[name] = field.getterReference;
+      if (field.hasSetter) {
+        _setterReferences[name] = field.setterReference;
+      }
+    }
+  }
+}
+
+class IndexedLibrary extends IndexedContainer {
   final Map<String, Typedef> _typedefs = new Map<String, Typedef>();
   final Map<String, Class> _classes = new Map<String, Class>();
   final Map<String, IndexedClass> _indexedClasses =
       new Map<String, IndexedClass>();
   final Map<String, Extension> _extensions = new Map<String, Extension>();
-  final Map<String, Procedure> _proceduresNotSetters =
-      new Map<String, Procedure>();
-  final Map<String, Procedure> _proceduresSetters =
-      new Map<String, Procedure>();
-  final Map<String, Field> _fields = new Map<String, Field>();
 
   IndexedLibrary(Library library) {
     for (int i = 0; i < library.typedefs.length; i++) {
@@ -45,60 +79,27 @@
       Extension extension = library.extensions[i];
       _extensions[extension.name] = extension;
     }
-    for (int i = 0; i < library.procedures.length; i++) {
-      Procedure procedure = library.procedures[i];
-      if (procedure.isSetter) {
-        _proceduresSetters[procedure.name.text] = procedure;
-      } else {
-        _proceduresNotSetters[procedure.name.text] = procedure;
-      }
-    }
-    for (int i = 0; i < library.fields.length; i++) {
-      Field field = library.fields[i];
-      _fields[field.name.text] = field;
-    }
+    _addProcedures(library.procedures);
+    _addFields(library.fields);
   }
 
   Typedef lookupTypedef(String name) => _typedefs[name];
   Class lookupClass(String name) => _classes[name];
   IndexedClass lookupIndexedClass(String name) => _indexedClasses[name];
   Extension lookupExtension(String name) => _extensions[name];
-  Procedure lookupProcedureNotSetter(String name) =>
-      _proceduresNotSetters[name];
-  Procedure lookupProcedureSetter(String name) => _proceduresSetters[name];
-  Field lookupField(String name) => _fields[name];
 }
 
-class IndexedClass {
+class IndexedClass extends IndexedContainer {
   final Map<String, Constructor> _constructors = new Map<String, Constructor>();
-  final Map<String, Procedure> _proceduresNotSetters =
-      new Map<String, Procedure>();
-  final Map<String, Procedure> _proceduresSetters =
-      new Map<String, Procedure>();
-  final Map<String, Field> _fields = new Map<String, Field>();
 
   IndexedClass._(Class c) {
     for (int i = 0; i < c.constructors.length; i++) {
       Constructor constructor = c.constructors[i];
       _constructors[constructor.name.text] = constructor;
     }
-    for (int i = 0; i < c.procedures.length; i++) {
-      Procedure procedure = c.procedures[i];
-      if (procedure.isSetter) {
-        _proceduresSetters[procedure.name.text] = procedure;
-      } else {
-        _proceduresNotSetters[procedure.name.text] = procedure;
-      }
-    }
-    for (int i = 0; i < c.fields.length; i++) {
-      Field field = c.fields[i];
-      _fields[field.name.text] = field;
-    }
+    _addProcedures(c.procedures);
+    _addFields(c.fields);
   }
 
   Constructor lookupConstructor(String name) => _constructors[name];
-  Procedure lookupProcedureNotSetter(String name) =>
-      _proceduresNotSetters[name];
-  Procedure lookupProcedureSetter(String name) => _proceduresSetters[name];
-  Field lookupField(String name) => _fields[name];
 }
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index fe7b594..2250af1 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1077,16 +1077,8 @@
     writeModifier(node.isConst, 'const');
     // Only show implicit getter/setter modifiers in cases where they are
     // out of the ordinary.
-    if (node.isStatic) {
-      writeModifier(node.hasImplicitGetter, '[getter]');
-      writeModifier(node.hasImplicitSetter, '[setter]');
-    } else {
-      writeModifier(!node.hasImplicitGetter, '[no-getter]');
-      if (node.isFinal) {
-        writeModifier(node.hasImplicitSetter, '[setter]');
-      } else {
-        writeModifier(!node.hasImplicitSetter, '[no-setter]');
-      }
+    if (node.isFinal) {
+      writeModifier(node.hasSetter, '[setter]');
     }
     writeWord('field');
     writeSpace();
@@ -1125,8 +1117,24 @@
     writeModifier(node.isAbstract, 'abstract');
     writeModifier(node.isForwardingStub, 'forwarding-stub');
     writeModifier(node.isForwardingSemiStub, 'forwarding-semi-stub');
-    writeModifier(node.isMemberSignature, 'member-signature');
-    writeModifier(node.isNoSuchMethodForwarder, 'no-such-method-forwarder');
+    switch (node.stubKind) {
+      case ProcedureStubKind.Regular:
+      case ProcedureStubKind.AbstractForwardingStub:
+      case ProcedureStubKind.ConcreteForwardingStub:
+        break;
+      case ProcedureStubKind.NoSuchMethodForwarder:
+        writeWord('no-such-method-forwarder');
+        break;
+      case ProcedureStubKind.MemberSignature:
+        writeWord('member-signature');
+        break;
+      case ProcedureStubKind.AbstractMixinStub:
+        writeWord('mixin-stub');
+        break;
+      case ProcedureStubKind.ConcreteMixinStub:
+        writeWord('mixin-super-stub');
+        break;
+    }
     writeWord(procedureKindToString(node.kind));
     List<String> features = <String>[];
     if (node.enclosingLibrary.isNonNullableByDefault !=
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index a1c93ab..be1e4cf 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1460,8 +1460,6 @@
   Field.FlagFinal: "final",
   Field.FlagConst: "const",
   Field.FlagStatic: "static",
-  Field.FlagHasImplicitGetter: "has-implicit-getter",
-  Field.FlagHasImplicitSetter: "has-implicit-setter",
   Field.FlagCovariant: "covariant",
   Field.FlagGenericCovariantImpl: "generic-covariant-impl",
   Field.FlagLate: "late",
@@ -1537,7 +1535,7 @@
 
   String tag(Member node) {
     if (node is Field) {
-      return "field";
+      return node.hasSetter ? "mutable-field" : "immutable-field";
     } else if (node is Constructor) {
       return "constructor";
     } else if (node is RedirectingFactoryConstructor) {
@@ -1563,10 +1561,18 @@
   }
 }
 
-TextSerializer<Field> fieldSerializer =
+TextSerializer<Field> mutableFieldSerializer =
     Wrapped<Tuple4<Name, int, DartType, Expression>, Field>(
         (w) => Tuple4(w.name, w.flags, w.type, w.initializer),
-        (u) => Field(u.first, type: u.third, initializer: u.fourth)
+        (u) => Field.mutable(u.first, type: u.third, initializer: u.fourth)
+          ..flags = u.second,
+        Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
+            dartTypeSerializer, Optional(expressionSerializer)));
+
+TextSerializer<Field> immutableFieldSerializer =
+    Wrapped<Tuple4<Name, int, DartType, Expression>, Field>(
+        (w) => Tuple4(w.name, w.flags, w.type, w.initializer),
+        (u) => Field.immutable(u.first, type: u.third, initializer: u.fourth)
           ..flags = u.second,
         Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
             dartTypeSerializer, Optional(expressionSerializer)));
@@ -2191,7 +2197,8 @@
     "local-fun": functionDeclarationSerializer,
   });
   memberSerializer.registerTags({
-    "field": fieldSerializer,
+    "mutable-field": mutableFieldSerializer,
+    "immutable-field": immutableFieldSerializer,
     "method": methodSerializer,
     "getter": getterSerializer,
     "setter": setterSerializer,
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 345d452..92b0b16 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -99,38 +99,53 @@
     var substitution = getSubstitutionMap(class_.mixedInType);
     var cloner = new CloneVisitorWithMembers(typeSubstitution: substitution);
 
-    // When we copy a field from the mixed in class, we remove any
-    // forwarding-stub getters/setters from the superclass, but copy their
-    // covariance-bits onto the new field.
-    var nonSetters = <Name, Procedure>{};
-    var setters = <Name, Procedure>{};
-    for (var procedure in class_.procedures) {
-      if (procedure.isSetter) {
-        setters[procedure.name] = procedure;
-      } else {
-        nonSetters[procedure.name] = procedure;
-      }
-    }
-
     IndexedLibrary indexedLibrary =
         referenceFromIndex?.lookupLibrary(enclosingLibrary);
     IndexedClass indexedClass = indexedLibrary?.lookupIndexedClass(class_.name);
 
-    for (var field in class_.mixin.fields) {
-      Field clone =
-          cloner.cloneField(field, indexedClass?.lookupField(field.name.text));
-      Procedure setter = setters[field.name];
-      if (setter != null) {
-        setters.remove(field.name);
-        VariableDeclaration parameter =
-            setter.function.positionalParameters.first;
-        clone.isGenericCovariantImpl = parameter.isGenericCovariantImpl;
+    if (class_.mixin.fields.isNotEmpty) {
+      // When we copy a field from the mixed in class, we remove any
+      // forwarding-stub getters/setters from the superclass, but copy their
+      // covariance-bits onto the new field.
+      var nonSetters = <Name, Procedure>{};
+      var setters = <Name, Procedure>{};
+      for (var procedure in class_.procedures) {
+        if (procedure.isSetter) {
+          setters[procedure.name] = procedure;
+        } else {
+          nonSetters[procedure.name] = procedure;
+        }
       }
-      nonSetters.remove(field.name);
-      class_.addField(clone);
+
+      for (var field in class_.mixin.fields) {
+        Reference getterReference =
+            indexedClass?.lookupGetterReference(field.name.text);
+        Reference setterReference =
+            indexedClass?.lookupSetterReference(field.name.text);
+        if (getterReference == null) {
+          getterReference = nonSetters[field.name]?.reference;
+          getterReference?.canonicalName?.unbind();
+        }
+        if (setterReference == null) {
+          setterReference = setters[field.name]?.reference;
+          setterReference?.canonicalName?.unbind();
+        }
+        Field clone =
+            cloner.cloneField(field, getterReference, setterReference);
+        Procedure setter = setters[field.name];
+        if (setter != null) {
+          setters.remove(field.name);
+          VariableDeclaration parameter =
+              setter.function.positionalParameters.first;
+          clone.isCovariant = parameter.isCovariant;
+          clone.isGenericCovariantImpl = parameter.isGenericCovariantImpl;
+        }
+        nonSetters.remove(field.name);
+        class_.addField(clone);
+      }
+      class_.procedures.clear();
+      class_.procedures..addAll(nonSetters.values)..addAll(setters.values);
     }
-    class_.procedures.clear();
-    class_.procedures..addAll(nonSetters.values)..addAll(setters.values);
 
     // Existing procedures in the class should only be forwarding stubs.
     // Replace them with methods from the mixin class if they have the same
@@ -149,13 +164,11 @@
       // NoSuchMethod forwarders aren't cloned.
       if (procedure.isNoSuchMethodForwarder) continue;
 
-      Procedure referenceFrom;
+      Reference reference;
       if (procedure.isSetter) {
-        referenceFrom =
-            indexedClass?.lookupProcedureSetter(procedure.name.text);
+        reference = indexedClass?.lookupSetterReference(procedure.name.text);
       } else {
-        referenceFrom =
-            indexedClass?.lookupProcedureNotSetter(procedure.name.text);
+        reference = indexedClass?.lookupGetterReference(procedure.name.text);
       }
 
       // Linear search for a forwarding stub with the same name.
@@ -179,9 +192,9 @@
         }
       }
       if (originalIndex != null) {
-        referenceFrom ??= class_.procedures[originalIndex];
+        reference ??= class_.procedures[originalIndex]?.reference;
       }
-      Procedure clone = cloner.cloneProcedure(procedure, referenceFrom);
+      Procedure clone = cloner.cloneProcedure(procedure, reference);
       if (originalIndex != null) {
         Procedure originalProcedure = class_.procedures[originalIndex];
         FunctionNode src = originalProcedure.function;
@@ -196,10 +209,14 @@
         // TODO(kernel team): The named parameters are not sorted,
         // this might not be correct.
         for (int j = 0; j < src.namedParameters.length; ++j) {
-          dst.namedParameters[j].flags = src.namedParameters[j].flags;
+          dst.namedParameters[j].isCovariant =
+              src.namedParameters[j].isCovariant;
+          dst.namedParameters[j].isGenericCovariantImpl =
+              src.namedParameters[j].isGenericCovariantImpl;
         }
 
         class_.procedures[originalIndex] = clone;
+        clone.parent = class_;
       } else {
         class_.addProcedure(clone);
       }
diff --git a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
index f68a5b6..0cdafba 100644
--- a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
+++ b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
@@ -375,15 +375,12 @@
       _locationFieldName,
       _hasCreationLocationClass.enclosingLibrary,
     );
-    final Field locationField = new Field(fieldName,
+    final Field locationField = new Field.immutable(fieldName,
         type:
             new InterfaceType(_locationClass, clazz.enclosingLibrary.nullable),
         isFinal: true,
         getterReference: clazz.reference.canonicalName
             ?.getChildFromFieldWithName(fieldName)
-            ?.reference,
-        setterReference: clazz.reference.canonicalName
-            ?.getChildFromFieldSetterWithName(fieldName)
             ?.reference);
     clazz.addField(locationField);
 
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 4ec2480..e40c0fc 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -1067,6 +1067,10 @@
 /// and Null are nullable, but aren't considered applications of the nullable
 /// type constructor.
 bool isNullableTypeConstructorApplication(DartType type) {
+  if (type is TypeParameterType && type.promotedBound != null) {
+    // Promoted types are never considered applications of ?.
+    return false;
+  }
   return type.declaredNullability == Nullability.nullable &&
       type is! DynamicType &&
       type is! VoidType &&
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 0db1f2b..ee38bc3 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -284,6 +284,27 @@
       problem(node, "The const field '${node.name.text}' should be static",
           context: node);
     }
+    bool isImmutable = node.isLate
+        ? (node.isFinal && node.initializer != null)
+        : (node.isFinal || node.isConst);
+    if (isImmutable == node.hasSetter) {
+      if (node.hasSetter) {
+        problem(node,
+            "The immutable field '${node.name.text}' has a setter reference",
+            context: node);
+      } else {
+        if (isOutline && node.isLate) {
+          // TODO(johnniwinther): Should we add a flag on Field for having
+          // a declared initializer?
+          // The initializer is not included in the outline so we can't tell
+          // whether it has an initializer or not.
+        } else {
+          problem(node,
+              "The mutable field '${node.name.text}' has no setter reference",
+              context: node);
+        }
+      }
+    }
     classTypeParametersAreInScope = !node.isStatic;
     node.initializer?.accept(this);
     node.type.accept(this);
@@ -322,14 +343,14 @@
       problem(
           node, "Member signature must have a member signature origin $node.");
     }
-    if (node.forwardingStubInterfaceTarget != null &&
+    if (node.abstractForwardingStubTarget != null &&
         !(node.isForwardingStub || node.isForwardingSemiStub)) {
       problem(
           node,
           "Only forwarding stubs can have a forwarding stub interface target "
           "$node.");
     }
-    if (node.forwardingStubSuperTarget != null &&
+    if (node.concreteForwardingStubTarget != null &&
         !(node.isForwardingStub || node.isForwardingSemiStub)) {
       problem(
           node,
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index bf078f8..8cfe61d 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -698,8 +698,8 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field(new Name('nonFinalField'));
-    var finalField = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
+    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
     var a = addClass(new Class(
         isAbstract: true,
         name: 'A',
@@ -929,8 +929,8 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field(new Name('nonFinalField'));
-    var finalField = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
+    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
     var a = addClass(new Class(
         isAbstract: true,
         name: 'A',
@@ -984,8 +984,8 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field(new Name('nonFinalField'));
-    var finalField = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
+    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
 
     var a = addClass(new Class(name: 'A', supertype: objectSuper, fields: [
       nonFinalField,
@@ -1049,13 +1049,15 @@
     var method_a = newEmptyMethod('method');
     var getter_a = newEmptyGetter('getter');
     var setter_a = newEmptySetter('setter');
-    var nonFinalField_a = new Field(new Name('nonFinalField'));
-    var finalField_a = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField_a = new Field.mutable(new Name('nonFinalField'));
+    var finalField_a =
+        new Field.immutable(new Name('finalField'), isFinal: true);
     var method_b = newEmptyMethod('method');
     var getter_b = newEmptyGetter('getter');
     var setter_b = newEmptySetter('setter');
-    var nonFinalField_b = new Field(new Name('nonFinalField'));
-    var finalField_b = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField_b = new Field.mutable(new Name('nonFinalField'));
+    var finalField_b =
+        new Field.immutable(new Name('finalField'), isFinal: true);
 
     var a = addClass(new Class(
         name: 'A',
@@ -1119,13 +1121,15 @@
     var getter_a = newEmptyGetter('getter');
     var setter_a = newEmptySetter('setter');
     var nonShadowedSetter_a = newEmptySetter('nonShadowedSetter');
-    var nonFinalField_a = new Field(new Name('nonFinalField'));
-    var finalField_a = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField_a = new Field.mutable(new Name('nonFinalField'));
+    var finalField_a =
+        new Field.immutable(new Name('finalField'), isFinal: true);
     var method_b = newEmptyMethod('method');
     var getter_b = newEmptyGetter('getter');
     var setter_b = newEmptySetter('setter');
-    var nonFinalField_b = new Field(new Name('nonFinalField'));
-    var finalField_b = new Field(new Name('finalField'), isFinal: true);
+    var nonFinalField_b = new Field.mutable(new Name('nonFinalField'));
+    var finalField_b =
+        new Field.immutable(new Name('finalField'), isFinal: true);
 
     var a = addClass(new Class(name: 'A', supertype: objectSuper, fields: [
       nonFinalField_a,
diff --git a/pkg/kernel/test/convert_field_to_setter_getter.dart b/pkg/kernel/test/convert_field_to_setter_getter.dart
index fc45c7b..6e0b797 100644
--- a/pkg/kernel/test/convert_field_to_setter_getter.dart
+++ b/pkg/kernel/test/convert_field_to_setter_getter.dart
@@ -10,7 +10,7 @@
 
 main() {
   final Library lib1 = new Library(Uri.parse('org-dartlang:///lib.dart'));
-  final Field field = new Field(new Name("f"));
+  final Field field = new Field.mutable(new Name("f"));
   lib1.addField(field);
   final Block libProcedureBody = new Block([
     new ExpressionStatement(new StaticSet(field, new IntLiteral(42))),
@@ -88,7 +88,7 @@
   // Replace getter/setter with field.
   lib1.procedures.remove(getter);
   lib1.procedures.remove(setter);
-  final Field fieldReplacement = new Field(new Name("f"),
+  final Field fieldReplacement = new Field.mutable(new Name("f"),
       getterReference: getter.reference, setterReference: setter.reference);
   // Important: Unbind any old canonical name
   // (nulling out the canonical name is not enough, see above).
diff --git a/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart b/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
index cd4ae4a..00d1973 100644
--- a/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
+++ b/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
@@ -119,7 +119,8 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field = new Field(new Name('field'), type: const DynamicType());
+      Field field =
+          new Field.immutable(new Name('field'), type: const DynamicType());
       Library library = new Library(
           new Uri(scheme: 'package', path: 'foo/bar.dart'),
           fields: <Field>[field]);
@@ -136,7 +137,26 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field = new Field(new Name('field'), type: const DynamicType());
+      Field field =
+          new Field.mutable(new Name('field'), type: const DynamicType());
+      Library library = new Library(
+          new Uri(scheme: 'package', path: 'foo/bar.dart'),
+          fields: <Field>[field]);
+      Component component = new Component(libraries: <Library>[library]);
+      component.computeCanonicalNames();
+      return new TestCase<Statement>(
+          name: '/* suppose top-level: dynamic field; */ field;',
+          node: new ExpressionStatement(new StaticGet(field)),
+          expectation: ''
+              '(expr (get-static "package:foo/bar.dart::@fields::field"))',
+          makeSerializationState: () => new SerializationState(null),
+          makeDeserializationState: () =>
+              new DeserializationState(null, component.root),
+          serializer: statementSerializer);
+    }(),
+    () {
+      Field field =
+          new Field.mutable(new Name('field'), type: const DynamicType());
       Library library = new Library(
           new Uri(scheme: 'package', path: 'foo/bar.dart'),
           fields: <Field>[field]);
@@ -208,7 +228,8 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field = new Field(new Name('field'), type: const DynamicType());
+      Field field =
+          new Field.immutable(new Name('field'), type: const DynamicType());
       Class klass = new Class(name: 'A', fields: <Field>[field]);
       Library library = new Library(
           new Uri(scheme: 'package', path: 'foo/bar.dart'),
@@ -236,7 +257,37 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field = new Field(new Name('field'), type: const DynamicType());
+      Field field =
+          new Field.mutable(new Name('field'), type: const DynamicType());
+      Class klass = new Class(name: 'A', fields: <Field>[field]);
+      Library library = new Library(
+          new Uri(scheme: 'package', path: 'foo/bar.dart'),
+          classes: <Class>[klass]);
+      Component component = new Component(libraries: <Library>[library]);
+      component.computeCanonicalNames();
+
+      VariableDeclaration x =
+          new VariableDeclaration('x', type: const DynamicType());
+      return new TestCase<Statement>(
+          name: '/* suppose A {dynamic field;} A x; */ x.{A::field};',
+          node: new ExpressionStatement(new PropertyGet.byReference(
+              new VariableGet(x), field.name, field.getterReference)),
+          expectation: ''
+              '(expr (get-prop (get-var "x^0" _) (public "field")))',
+          makeSerializationState: () =>
+              new SerializationState(new SerializationEnvironment(null)
+                ..addBinder(x, nameClue: 'x')
+                ..extend()),
+          makeDeserializationState: () => new DeserializationState(
+              new DeserializationEnvironment(null)
+                ..addBinder(x, "x^0")
+                ..extend(),
+              component.root),
+          serializer: statementSerializer);
+    }(),
+    () {
+      Field field =
+          new Field.mutable(new Name('field'), type: const DynamicType());
       Class klass = new Class(name: 'A', fields: <Field>[field]);
       Library library = new Library(
           new Uri(scheme: 'package', path: 'foo/bar.dart'),
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index 56ccfcf..5d3f20d 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -76,7 +76,7 @@
     'Member redeclared',
     (TestHarness test) {
       Field field =
-          new Field(new Name('field'), initializer: new NullLiteral());
+          new Field.mutable(new Name('field'), initializer: new NullLiteral());
       test.addNode(Class(
           name: 'Test',
           supertype: test.objectClass.asRawSupertype,
@@ -166,7 +166,7 @@
     'Class type parameter in static field',
     (TestHarness test) {
       TypeParameter node = test.classTypeParameter;
-      test.addNode(Field(new Name('field'),
+      test.addNode(Field.mutable(new Name('field'),
           initializer:
               new TypeLiteral(new TypeParameterType(node, Nullability.legacy)),
           isStatic: true));
@@ -235,7 +235,7 @@
   negative1Test(
     'Dangling field get',
     (TestHarness test) {
-      Field orphan = new Field(new Name('foo'));
+      Field orphan = new Field.mutable(new Name('foo'));
       test.addNode(new PropertyGet(new NullLiteral(), orphan.name, orphan));
       return orphan;
     },
@@ -421,7 +421,7 @@
           'Foo',
           new FunctionType(
               [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
-      var field = new Field(new Name('field'),
+      var field = new Field.mutable(new Name('field'),
           type: new TypedefType(typedef_, Nullability.legacy), isStatic: true);
       test.enclosingLibrary.addTypedef(typedef_);
       test.enclosingLibrary.addField(field);
@@ -632,8 +632,8 @@
       var foo =
           new Typedef('Foo', test.otherLegacyRawType, typeParameters: [param]);
       var typedefType = new TypedefType(foo, Nullability.legacy, []);
-      var field =
-          new Field(new Name('field'), type: typedefType, isStatic: true);
+      var field = new Field.mutable(new Name('field'),
+          type: typedefType, isStatic: true);
       test.enclosingLibrary.addTypedef(foo);
       test.enclosingLibrary.addField(field);
       return typedefType;
@@ -646,7 +646,7 @@
     'Dangling typedef reference',
     (TestHarness test) {
       var foo = new Typedef('Foo', test.otherLegacyRawType, typeParameters: []);
-      var field = new Field(new Name('field'),
+      var field = new Field.mutable(new Name('field'),
           type: new TypedefType(foo, Nullability.legacy, []), isStatic: true);
       test.enclosingLibrary.addField(field);
       return foo;
@@ -656,7 +656,7 @@
   negative1Test(
     'Non-static top-level field',
     (TestHarness test) {
-      var field = new Field(new Name('field'));
+      var field = new Field.mutable(new Name('field'));
       test.enclosingLibrary.addField(field);
       return null;
     },
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 868524b..fdaede1 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -676,8 +676,7 @@
     final Procedure getter = Procedure(field.name, ProcedureKind.Getter,
         FunctionNode(getterStatement, returnType: field.type),
         fileUri: field.fileUri,
-        reference:
-            indexedClass?.lookupProcedureNotSetter(field.name.text)?.reference)
+        reference: indexedClass?.lookupGetterReference(field.name.text))
       ..fileOffset = field.fileOffset
       ..isNonNullableByDefault = field.isNonNullableByDefault;
 
@@ -694,8 +693,7 @@
           FunctionNode(setterStatement,
               returnType: VoidType(), positionalParameters: [argument]),
           fileUri: field.fileUri,
-          reference:
-              indexedClass?.lookupProcedureSetter(field.name.text)?.reference)
+          reference: indexedClass?.lookupSetterReference(field.name.text))
         ..fileOffset = field.fileOffset
         ..isNonNullableByDefault = field.isNonNullableByDefault;
     }
@@ -711,15 +709,14 @@
   void _replaceSizeOfMethod(
       Class struct, Map<Abi, int> sizes, IndexedClass indexedClass) {
     var name = Name("#sizeOf");
-    var lookupField = indexedClass?.lookupField(name.text);
-    final Field sizeOf = Field(name,
+    var getterReference = indexedClass?.lookupGetterReference(name.text);
+    final Field sizeOf = Field.immutable(name,
         isStatic: true,
         isFinal: true,
         initializer: _runtimeBranchOnLayout(sizes),
         type: InterfaceType(intClass, Nullability.legacy),
         fileUri: struct.fileUri,
-        getterReference: lookupField?.getterReference,
-        setterReference: lookupField?.setterReference)
+        getterReference: getterReference)
       ..fileOffset = struct.fileOffset;
     _makeEntryPoint(sizeOf);
     struct.addField(sizeOf);
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index 295b92d..ae57831 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -337,8 +337,8 @@
     final nativeFunctionType = InterfaceType(
         nativeFunctionClass, Nullability.legacy, node.arguments.types);
     var name = Name("_#ffiCallback${callbackCount++}", currentLibrary);
-    var lookupField = currentLibraryIndex?.lookupField(name.text);
-    final Field field = Field(name,
+    var getterReference = currentLibraryIndex?.lookupGetterReference(name.text);
+    final Field field = Field.immutable(name,
         type: InterfaceType(
             pointerClass, Nullability.legacy, [nativeFunctionType]),
         initializer: StaticInvocation(
@@ -351,8 +351,7 @@
         isStatic: true,
         isFinal: true,
         fileUri: currentLibrary.fileUri,
-        getterReference: lookupField?.getterReference,
-        setterReference: lookupField?.setterReference)
+        getterReference: getterReference)
       ..fileOffset = node.fileOffset;
     currentLibrary.addField(field);
     return StaticGet(field);
diff --git a/pkg/vm/lib/transformations/mixin_deduplication.dart b/pkg/vm/lib/transformations/mixin_deduplication.dart
index 42e74cd..7f76626 100644
--- a/pkg/vm/lib/transformations/mixin_deduplication.dart
+++ b/pkg/vm/lib/transformations/mixin_deduplication.dart
@@ -167,6 +167,12 @@
   }
 
   @override
+  void visitProcedure(Procedure node) {
+    super.visitProcedure(node);
+    node.stubTarget = _resolveNewInterfaceTarget(node.stubTarget);
+  }
+
+  @override
   visitPropertyGet(PropertyGet node) {
     node.interfaceTarget = _resolveNewInterfaceTarget(node.interfaceTarget);
     super.visitPropertyGet(node);
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 51daa89..4a03d0f 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -675,18 +675,18 @@
           this, _summary, _receiver, _fnTypeVariables, _genericInterfacesInfo);
 
       // Handle forwarding stubs. We need to check types against the types of
-      // the forwarding stub's target, [member.forwardingStubSuperTarget].
+      // the forwarding stub's target, [member.concreteForwardingStubTarget].
       FunctionNode useTypesFrom = member.function;
       if (member is Procedure &&
           member.isForwardingStub &&
-          member.forwardingStubSuperTarget != null) {
-        final target = member.forwardingStubSuperTarget;
+          member.concreteForwardingStubTarget != null) {
+        final target = member.concreteForwardingStubTarget;
         if (target is Field) {
           useTypesFrom = FunctionNode(null, positionalParameters: [
             VariableDeclaration("value", type: target.type)
           ]);
         } else {
-          useTypesFrom = member.forwardingStubSuperTarget.function;
+          useTypesFrom = member.concreteForwardingStubTarget.function;
         }
       }
 
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 2ea1325..9f4dfd2 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -592,17 +592,17 @@
         m.type.accept(typeVisitor);
       } else if (m is Procedure) {
         func = m.function;
-        if (m.forwardingStubSuperTarget != null) {
+        if (m.concreteForwardingStubTarget != null) {
           m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
-              m.forwardingStubSuperTarget,
+              m.concreteForwardingStubTarget,
               isSetter: m.isSetter);
-          addUsedMember(m.forwardingStubSuperTarget);
+          addUsedMember(m.concreteForwardingStubTarget);
         }
-        if (m.forwardingStubInterfaceTarget != null) {
+        if (m.abstractForwardingStubTarget != null) {
           m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
-              m.forwardingStubInterfaceTarget,
+              m.abstractForwardingStubTarget,
               isSetter: m.isSetter);
-          addUsedMember(m.forwardingStubInterfaceTarget);
+          addUsedMember(m.abstractForwardingStubTarget);
         }
         if (m.memberSignatureOrigin != null) {
           m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
@@ -1328,8 +1328,8 @@
           _makeUnreachableBody(node.function);
         }
         node.function.asyncMarker = AsyncMarker.Sync;
-        if (node.forwardingStubSuperTarget != null ||
-            node.forwardingStubInterfaceTarget != null) {
+        if (node.concreteForwardingStubTarget != null ||
+            node.abstractForwardingStubTarget != null) {
           node.stubTarget = null;
         }
         Statistics.methodBodiesDropped++;
diff --git a/pkg/vm/test/modular_kernel_plus_aot_test.dart b/pkg/vm/test/modular_kernel_plus_aot_test.dart
index 6d0dc45..ee17639 100644
--- a/pkg/vm/test/modular_kernel_plus_aot_test.dart
+++ b/pkg/vm/test/modular_kernel_plus_aot_test.dart
@@ -69,6 +69,11 @@
 
     // Verify after running global transformations.
     verifyComponent(component, isOutline: false, afterConst: true);
+
+    // Verify that we can reserialize the component to ensure that all
+    // references are contained within the component.
+    writeComponentToBytes(
+        loadComponentFromBytes(writeComponentToBytes(component)));
   });
 }
 
@@ -90,7 +95,7 @@
       StandardFileSystem.instance, const <String>[], const <String, String>{});
 
   void onDiagnostic(fe.DiagnosticMessage message) {
-    print(message);
+    message.plainTextFormatted.forEach(print);
   }
 
   final Component component =
@@ -119,11 +124,16 @@
 Uri sdkRootFile(name) => Directory.current.uri.resolveUri(Uri.file(name));
 
 const String mainFile = r'''
+// @dart=2.9
+// This library is opt-out to provoke the creation of member signatures in
+// R that point to members of A2.
+
 import 'mixin.dart';
+
 class R extends A2 {
   void bar() {
     mixinProperty = '';
-    mixinProperty .foo();
+    mixinProperty.foo();
     mixinMethod('').foo();
     super.mixinProperty= '';
     super.mixinProperty.foo();
@@ -139,6 +149,7 @@
   a2.mixinProperty= '';
   a2.mixinProperty.foo();
   a2.mixinMethod('').foo();
+  R().bar();
 }
 ''';
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
index 001ee63..1431eb6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
@@ -20,7 +20,7 @@
     [@vm.direct-call.metadata=#lib::B.x] [@vm.inferred-type.metadata=!? (skip check)] this.{self::B::x} = 3;
   }
 }
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] [@vm.unboxing-info.metadata=(i)->i]late static final field core::int staticLateB;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] [@vm.unboxing-info.metadata=(i)->i]late static final [setter] field core::int staticLateB;
 static method main() → void {
   [@vm.direct-call.metadata=#lib::A.use] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::use}();
   [@vm.direct-call.metadata=#lib::B.use] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::use}();
diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn
index 360863c..022498e 100644
--- a/runtime/observatory/BUILD.gn
+++ b/runtime/observatory/BUILD.gn
@@ -37,7 +37,6 @@
     "-o",
     rebase_path(output),
     "--packages=" + rebase_path("../../.packages"),
-    "--enable-experiment=non-nullable",
     "--no-sound-null-safety",
   ]
   if (is_debug) {
diff --git a/runtime/observatory/analysis_options.yaml b/runtime/observatory/analysis_options.yaml
index f9cf4b3..e579874 100644
--- a/runtime/observatory/analysis_options.yaml
+++ b/runtime/observatory/analysis_options.yaml
@@ -1,7 +1,4 @@
 analyzer:
-  enable-experiment:
-    - non-nullable
-
   errors:
     dead_code: info
     getter_not_subtype_setter_types: info
diff --git a/runtime/observatory/pubspec.yaml b/runtime/observatory/pubspec.yaml
index ba282ab..ddf5b9c 100644
--- a/runtime/observatory/pubspec.yaml
+++ b/runtime/observatory/pubspec.yaml
@@ -1,6 +1,6 @@
 name: observatory
 environment:
-  sdk: '>=2.10.0 <3.0.0'
+  sdk: '>=2.12.0-0 <3.0.0'
 
 dependencies:
   usage: 'any'
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 74f4ecd..ad07173 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1114,7 +1114,7 @@
     procedure_helper.ReadUntilExcluding(ProcedureHelper::kFunction);
     if (procedure_helper.IsForwardingStub() && !procedure_helper.IsAbstract()) {
       const NameIndex target_name =
-          procedure_helper.forwarding_stub_super_target_;
+          procedure_helper.concrete_forwarding_stub_target_;
       ASSERT(target_name != NameIndex::kInvalidName);
       const String& name = function.IsSetterFunction()
                                ? H.DartSetterName(target_name)
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 794f917..a1ee75d 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1102,8 +1102,9 @@
     }
       FALL_THROUGH;
     case kStubTarget:
-      if (stub_kind_ == kForwardingSuperStubKind) {
-        forwarding_stub_super_target_ = helper_->ReadCanonicalNameReference();
+      if (stub_kind_ == kConcreteForwardingStubKind) {
+        concrete_forwarding_stub_target_ =
+            helper_->ReadCanonicalNameReference();
       } else {
         helper_->ReadCanonicalNameReference();
       }
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 72b3106..23db44d 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -456,10 +456,10 @@
     kFinal = 1 << 0,
     kConst = 1 << 1,
     kStatic = 1 << 2,
-    kIsCovariant = 1 << 5,
-    kIsGenericCovariantImpl = 1 << 6,
-    kIsLate = 1 << 7,
-    kExtensionMember = 1 << 8,
+    kIsCovariant = 1 << 3,
+    kIsGenericCovariantImpl = 1 << 4,
+    kIsLate = 1 << 5,
+    kExtensionMember = 1 << 6,
   };
 
   explicit FieldHelper(KernelReaderHelper* helper)
@@ -537,12 +537,12 @@
 
   enum StubKind {
     kRegularStubKind,
-    kForwardingStubKind,
-    kForwardingSuperStubKind,
+    kAbstractForwardingStubKind,
+    kConcreteForwardingStubKind,
     kNoSuchMethodForwarderStubKind,
     kMemberSignatureStubKind,
-    kMixinStubKind,
-    kMixinSuperStubKind,
+    kAbstractMixinStubKind,
+    kConcreteMixinStubKind,
   };
 
   enum Flag {
@@ -574,8 +574,8 @@
   bool IsExternal() const { return (flags_ & kExternal) != 0; }
   bool IsConst() const { return (flags_ & kConst) != 0; }
   bool IsForwardingStub() const {
-    return stub_kind_ == kForwardingStubKind ||
-           stub_kind_ == kForwardingSuperStubKind;
+    return stub_kind_ == kAbstractForwardingStubKind ||
+           stub_kind_ == kConcreteForwardingStubKind;
   }
   bool IsRedirectingFactoryConstructor() const {
     return (flags_ & kRedirectingFactoryConstructor) != 0;
@@ -599,7 +599,7 @@
   StubKind stub_kind_;
 
   // Only valid if the 'isForwardingStub' flag is set.
-  NameIndex forwarding_stub_super_target_;
+  NameIndex concrete_forwarding_stub_target_;
 
  private:
   KernelReaderHelper* helper_;
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 48e3231..bad9b38 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 53;
-static const uint32_t kMaxSupportedKernelFormatVersion = 53;
+static const uint32_t kMinSupportedKernelFormatVersion = 54;
+static const uint32_t kMaxSupportedKernelFormatVersion = 54;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 32ca631..f58c987 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -970,8 +970,8 @@
         converter.IsSimple(helper_.ReaderOffset() + 1);
     if (!has_simple_initializer || !converter.SimpleValue().IsNull()) {
       field.set_has_nontrivial_initializer(true);
-      return;
     }
+    return;
   }
   field.set_has_initializer(false);
   field.set_has_nontrivial_initializer(false);
diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
index c49608a..94d7cf8 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
@@ -813,3 +813,15 @@
   // TODO(jmesserly): is this equivalent to _nativeSymbol toString?
   toString() => 'Symbol("$_name")';
 }
+
+/// Asserts that if [value] is a function, it is a JavaScript function or has
+/// been wrapped by [allowInterop].
+///
+/// This function does not recurse if [value] is a collection.
+void assertInterop(Object? value) {
+  if (value is Function) dart.assertInterop(value);
+}
+
+/// Like [assertInterop], except iterates over a list of arguments
+/// non-recursively.
+void assertInteropArgs(List<Object?> args) => args.forEach(assertInterop);
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 570aa15..dc18038 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -3023,3 +3023,26 @@
 
 /// Called by generated code to throw a LateInitializationError.
 void throwLateInitializationError(String name) => throw LateError(name);
+
+/// Checks that [f] is a function that supports interop.
+@pragma('dart2js:tryInline')
+bool isJSFunction(Function f) => JS('bool', 'typeof(#) == "function"', f);
+
+/// Asserts that if [value] is a function, it is a JavaScript function or has
+/// been wrapped by [allowInterop].
+///
+/// This function does not recurse if [value] is a collection.
+void assertInterop(Object? value) {
+  assert(value is! Function || isJSFunction(value),
+      'Dart function requires `allowInterop` to be passed to JavaScript.');
+}
+
+/// Like [assertInterop], except iterates over a list of arguments
+/// non-recursively.
+///
+/// This function intentionally avoids using [assertInterop] so that this
+/// function can become a no-op if assertions are disabled.
+void assertInteropArgs(List<Object?> args) {
+  assert(args.every((arg) => arg is! Function || isJSFunction(arg)),
+      'Dart function requires `allowInterop` to be passed to JavaScript.');
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/js_patch.dart b/sdk/lib/_internal/js_runtime/lib/js_patch.dart
index 1ff2e55..98345e3 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_patch.dart
@@ -8,7 +8,8 @@
 
 import 'dart:_foreign_helper' show JS, DART_CLOSURE_TO_JS;
 import 'dart:_interceptors' show DART_CLOSURE_PROPERTY_NAME;
-import 'dart:_js_helper' show patch, Primitives, getIsolateAffinityTag;
+import 'dart:_js_helper'
+    show patch, Primitives, getIsolateAffinityTag, isJSFunction;
 import 'dart:_js' show isBrowserObject, convertFromBrowserObject;
 
 @patch
@@ -547,7 +548,7 @@
 
 @patch
 F allowInterop<F extends Function>(F f) {
-  if (JS('bool', 'typeof(#) == "function"', f)) {
+  if (isJSFunction(f)) {
     // Already supports interop, just use the existing function.
     return f;
   } else {
@@ -557,7 +558,7 @@
 
 @patch
 Function allowInteropCaptureThis(Function f) {
-  if (JS('bool', 'typeof(#) == "function"', f)) {
+  if (isJSFunction(f)) {
     // Behavior when the function is already a JS function is unspecified.
     throw ArgumentError(
         "Function is already a JS function so cannot capture this.");
diff --git a/sdk/lib/js_util/js_util.dart b/sdk/lib/js_util/js_util.dart
index 605f6d6..b1d0e27 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -14,7 +14,8 @@
 import 'dart:_foreign_helper' show JS;
 import 'dart:collection' show HashMap;
 import 'dart:async' show Completer;
-import 'dart:_js_helper' show convertDartClosureToJS;
+import 'dart:_js_helper'
+    show convertDartClosureToJS, assertInterop, assertInteropArgs;
 
 /// Recursively converts a JSON-like collection to JavaScript compatible
 /// representation.
@@ -70,11 +71,15 @@
 dynamic getProperty(Object o, Object name) =>
     JS('Object|Null', '#[#]', o, name);
 
-dynamic setProperty(Object o, Object name, Object? value) =>
-    JS('', '#[#]=#', o, name, value);
+dynamic setProperty(Object o, Object name, Object? value) {
+  assertInterop(value);
+  return JS('', '#[#]=#', o, name, value);
+}
 
-dynamic callMethod(Object o, String method, List<Object?> args) =>
-    JS('Object|Null', '#[#].apply(#, #)', o, method, o, args);
+dynamic callMethod(Object o, String method, List<Object?> args) {
+  assertInteropArgs(args);
+  return JS('Object|Null', '#[#].apply(#, #)', o, method, o, args);
+}
 
 /// Check whether [o] is an instance of [type].
 ///
@@ -83,9 +88,11 @@
 bool instanceof(Object? o, Object type) =>
     JS('bool', '# instanceof #', o, type);
 
-dynamic callConstructor(Object constr, List<Object?> arguments) {
+dynamic callConstructor(Object constr, List<Object?>? arguments) {
   if (arguments == null) {
     return JS('Object', 'new #()', constr);
+  } else {
+    assertInteropArgs(arguments);
   }
 
   if (JS('bool', '# instanceof Array', arguments)) {
diff --git a/tests/language/generic/super_bounded_types_and_nested_variance_test.dart b/tests/language/generic/super_bounded_types_and_nested_variance_test.dart
new file mode 100644
index 0000000..ab088ff
--- /dev/null
+++ b/tests/language/generic/super_bounded_types_and_nested_variance_test.dart
@@ -0,0 +1,252 @@
+// 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.
+
+// Testing that i2b and checks for correct super-boundedness are applied
+// to type arguments, taking the variance of type parameters into account.
+
+// Standard type comparison support.
+
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw 0;
+
+// Material specific to this test.
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+
+class Acov<X extends Fcov<Y>, Y> {}
+
+class Acon<X extends Fcon<Y>, Y> {}
+
+class Ainv<X extends Finv<Y>, Y> {}
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class AcovBound<X extends FcovBound<Y>, Y extends num> {}
+
+class AconBound<X extends FconBound<Y>, Y extends num> {}
+
+class AinvBound<X extends FinvBound<Y>, Y extends num> {}
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+
+class AcovCyclicBound<X extends FcovCyclicBound<Y>, Y extends A<Y>> {}
+
+class AconCyclicBound<X extends FconCyclicBound<Y>, Y extends A<Y>> {}
+
+class AinvCyclicBound<X extends FinvCyclicBound<Y>, Y extends A<Y>> {}
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AconCyclicCoBound<X extends FconCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class B<X> {}
+
+void testTypeAliasAsTypeArgument() {
+  // I2b: Use bounds (Fcov<Y>, dynamic), then replace covariant occurrence
+  // (of `Y` in `Acov<Fcov<Y>, _>`) by `Y`s value `dynamic`. Resulting type
+  // `Acov<Fcov<dynamic>, dynamic>` is regular-bounded.
+  void f1(Acov source1) {
+    var fsource1 = toF(source1);
+    F<Acov<Fcov<dynamic>, dynamic>> target1 = fsource1;
+  }
+
+  // I2b: Use bounds (Fcon<Y>, dynamic), then replace contravariant occurrence
+  // (of `Y` in `Acon<Fcon<Y>, _>`) by `Never`. Resulting type
+  // is super-bounded: Acon<Fcon<Object?>, Never> is regular-bounded.
+  void f2(Acon source2) {
+    var fsource2 = toF(source2);
+    F<Acon<Fcon<Never>, dynamic>> target2 = fsource2;
+  }
+
+  // I2b: Use bounds (Finv<Y>, dynamic) then replace invariant occurrence
+  // (of `Y` in `Ainv<Finv<Y>, _>`) by `Y`s value `dynamic`. Resulting type
+  // `Ainv<Finv<dynamic>, dynamic>` is regular-bounded.
+  void f3(Ainv source3) {
+    var fsource3 = toF(source3);
+    F<Ainv<Finv<dynamic>, dynamic>> target3 = fsource3;
+  }
+
+  // I2b: Use bounds (FcovBound<Y>, num), then replace covariant occurrence
+  // (of `Y` in `AcovBound<FcovBound<Y>, _>`) by `Y`s value `num`.
+  // Resulting type `AcovBound<FcovBound<num>, num>` is regular-bounded.
+  void f4(AcovBound source4) {
+    var fsource4 = toF(source4);
+    F<AcovBound<FcovBound<num>, num>> target4 = fsource4;
+  }
+
+  // I2b: Use bounds (FconBound<Y>, num), then replace contravariant occurrence
+  // of `Y` in `AconBound<FconBound<Y>, _>` by `Never`. Resulting type is
+  // super-bounded: AconBound<FconBound<Object?>, num> is regular-bounded.
+  void f5(AconBound source5) {
+    var fsource5 = toF(source5);
+    F<AconBound<FconBound<Never>, num>> target5 = fsource5;
+  }
+
+  // I2b: Use bounds (FinvBound<Y>, num), then replace invariant occurrence
+  // of `Y` in `AinvBound<FinvBound<Y>, _>` by `Y`s value `num`. Resulting
+  // type `AinvBound<FinvBound<num>, num>` is regular-bounded.
+  void f6(AinvBound source6) {
+    var fsource6 = toF(source6);
+    F<AinvBound<FinvBound<num>, num>> target6 = fsource6;
+  }
+
+  // I2b: Use bounds (FcovCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AcovCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace covariant occurrence of `Y` in
+  // `AcovCyclicBound<FcovCyclicBound<Y>, _>` by `Y`s value `A<dynamic>`.
+  // Resulting type `AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>>`
+  // is regular-bounded.
+  void f7(AcovCyclicBound source7) {
+    var fsource7 = toF(source7);
+    F<AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>> target7 =
+        fsource7;
+  }
+
+  // I2b: Use bounds (FconCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AconCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace contravariant occurrence of `Y` in
+  // `AconCyclicBound<FconCyclicBound<Y>, _>` by `Never`.
+  // Resulting type `AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>>` is
+  // super-bounded: `AconCyclicBound<FconCyclicBound<Object?>, A<Never>>>`
+  // is regular-bounded.
+  void f8(AconCyclicBound source8) {
+    var fsource8 = toF(source8);
+    F<AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>> target8 = fsource8;
+  }
+
+  // I2b: Use bounds (FinvCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AinvCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace invariant occurrence of `Y` in
+  // `AinvCyclicBound<FinvCyclicBound<Y>, _>` by `Y`s value `A<dynamic>`.
+  // Resulting type `AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>>`
+  // is regular-bounded, and contains `FinvCyclicBound<A<dynamic>>` which
+  // is super-bounded.
+  void f9(AinvCyclicBound source9) {
+    var fsource9 = toF(source9);
+    F<AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>> target9 =
+        fsource9;
+  }
+
+  // I2b: Use bounds (FcovCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AcovCyclicCoBound<_, Function(Y)>` by `Never`; then replace covariant
+  // occurrence of `Y` in `AcovCyclicCoBound<FcovCyclicCoBound<Y>, _>` by `Y`s
+  // value `Function(Never)`. Resulting type
+  // `AcovCyclicCoBound<FcovCyclicCoBound<Function(Never)>, Function(Never)>`
+  // is regular-bounded, with subterm `FcovCyclicCoBound<Function(Never)>` which
+  // is super-bounded because `FcovCyclicCoBound<Function(Object?)>` is
+  // regular-bounded.
+  void f10(AcovCyclicCoBound source10) {
+    var fsource10 = toF(source10);
+    F<AcovCyclicCoBound<FcovCyclicCoBound<Function(Never)>, Function(Never)>>
+        target10 = fsource10;
+  }
+
+  // I2b: Use bounds (FconCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AconCyclicCoBound<_, Function(Y)>` by `Never`; then replace contravariant
+  // occurrence of `Y` in `AconCyclicCoBound<FconCyclicCoBound<Y>, _>` by
+  // `Never`. Resulting type
+  // `AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>` is
+  // super-bounded because
+  // `AconCyclicCoBound<FconCyclicCoBound<Object?>, Function(Object?)>` is
+  // regular-bounded.
+  void f11(AconCyclicCoBound source11) {
+    var fsource11 = toF(source11);
+    F<AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>> target11 =
+        fsource11;
+  }
+
+  var funs = [f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11];
+}
+
+void testNested() {
+  // Everything gets the same treatment when the cases from `testTopLevel`
+  // are duplicated at the nested level in a covariant position.
+
+  void f1(B<Acov> source1) {
+    var fsource1 = toF(source1);
+    F<B<Acov<Fcov<dynamic>, dynamic>>> target1 = fsource1;
+  }
+
+  void f2(B<Acon> source2) {
+    var fsource2 = toF(source2);
+    F<B<Acon<Fcon<Never>, dynamic>>> target2 = fsource2;
+  }
+
+  void f3(B<Ainv> source3) {
+    var fsource3 = toF(source3);
+    F<B<Ainv<Finv<dynamic>, dynamic>>> target3 = fsource3;
+  }
+
+  void f4(B<AcovBound> source4) {
+    var fsource4 = toF(source4);
+    F<B<AcovBound<FcovBound<num>, num>>> target4 = fsource4;
+  }
+
+  void f5(B<AconBound> source5) {
+    var fsource5 = toF(source5);
+    F<B<AconBound<FconBound<Never>, num>>> target5 = fsource5;
+  }
+
+  void f6(B<AinvBound> source6) {
+    var fsource6 = toF(source6);
+    F<B<AinvBound<FinvBound<num>, num>>> target6 = fsource6;
+  }
+
+  void f7(B<AcovCyclicBound> source7) {
+    var fsource7 = toF(source7);
+    F<B<AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>>> target7 =
+        fsource7;
+  }
+
+  void f8(B<AconCyclicBound> source8) {
+    var fsource8 = toF(source8);
+    F<B<AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>>> target8 =
+        fsource8;
+  }
+
+  void f9(B<AinvCyclicBound> source9) {
+    var fsource9 = toF(source9);
+    F<B<AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>>> target9 =
+        fsource9;
+  }
+
+  void f10(B<AcovCyclicCoBound> source10) {
+    var fsource10 = toF(source10);
+    F<B<AcovCyclicCoBound<FcovCyclicCoBound<Function(Never)>, Function(Never)>>>
+        target10 = fsource10;
+  }
+
+  void f11(B<AconCyclicCoBound> source11) {
+    var fsource11 = toF(source11);
+    F<B<AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>>>
+        target11 = fsource11;
+  }
+
+
+  var funs = [f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11];
+}
+
+main() {
+  testTypeAliasAsTypeArgument();
+  testNested();
+}
diff --git a/tests/language/generic/super_bounded_types_and_variance_test.dart b/tests/language/generic/super_bounded_types_and_variance_test.dart
new file mode 100644
index 0000000..53fd9a5
--- /dev/null
+++ b/tests/language/generic/super_bounded_types_and_variance_test.dart
@@ -0,0 +1,190 @@
+// 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.
+
+// Testing that instantiate-to-bound and super-bounded types take the
+// variance of formal type parameters into account when a type alias is
+// used as a raw type.
+
+// Standard type comparison support.
+
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw 0;
+
+// Material specific to this test.
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class B<X> {}
+
+void testTopLevel() {
+  // I2b initial value for a covariant type parameter w/o bound: dynamic.
+  void f1(Fcov source1) {
+    var fsource1 = toF(source1);
+    F<Fcov<dynamic>> target1 = fsource1;
+  }
+
+  // I2b initial value for a contravariant type parameter w/o bound: dynamic.
+  void f2(Fcon source2) {
+    var fsource2 = toF(source2);
+    F<Fcon<dynamic>> target2 = fsource2;
+  }
+
+  // I2b initial value for an invariant type parameter w/o bound: dynamic.
+  void f3(Finv source3) {
+    var fsource3 = toF(source3);
+    F<Finv<dynamic>> target3 = fsource3;
+  }
+
+  // I2b initial value for a covariant type parameter: bound.
+  void f4(FcovBound source4) {
+    var fsource4 = toF(source4);
+    F<FcovBound<num>> target4 = fsource4;
+  }
+
+  // I2b initial value for a contravariant type parameter: bound.
+  void f5(FconBound source5) {
+    var fsource5 = toF(source5);
+    F<FconBound<num>> target5 = fsource5;
+  }
+
+  // I2b initial value for an invariant type parameter: bound.
+  void f6(FinvBound source6) {
+    var fsource6 = toF(source6);
+    F<FinvBound<num>> target6 = fsource6;
+  }
+
+  // I2b for a covariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing covariant occurrence by `dynamic`. Resulting type
+  // is super-bounded: FcovCyclicBound<A<Never>> is regular-bounded.
+  void f7(FcovCyclicBound source7) {
+    var fsource7 = toF(source7);
+    F<FcovCyclicBound<A<dynamic>>> target7 = fsource7;
+  }
+
+  // I2b for a contravariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing contravariant occurrence by `Never`. Resulting type
+  // is super-bounded: FconCyclicBound<A<Object?>> is regular-bounded.
+  void f8(FconCyclicBound source8) {
+    var fsource8 = toF(source8);
+    F<FconCyclicBound<A<Never>>> target8 = fsource8;
+  }
+
+  // I2b for an invariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing invariant occurrence by `dynamic`. Resulting type is
+  // super-bounded: FinvCyclicBound<A<Never>> is regular-bounded.
+  void f9(FinvCyclicBound source9) {
+    var fsource9 = toF(source9);
+    F<FinvCyclicBound<A<dynamic>>> target9 = fsource9;
+  }
+
+  // I2b for a covariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing contravariant occurrence by `Never`. Resulting type
+  // is super-bounded: FcovCyclicBound<Function(Object?)> is regular-bounded.
+  void f10(FcovCyclicCoBound source10) {
+    var fsource10 = toF(source10);
+    F<FcovCyclicCoBound<Function(Never)>> target10 = fsource10;
+  }
+
+  // I2b for a contravariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing covariant occurrence by `dynamic`. Resulting type
+  // FconCyclicCoBound<Function(dynamic)> is regular-bounded.
+  void f11(FconCyclicCoBound source11) {
+    var fsource11 = toF(source11);
+    F<FconCyclicCoBound<Function(dynamic)>> target11 = fsource11;
+  }
+
+  // I2b for an invariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing invariant occurrence by `dynamic`. Resulting type
+  // F<FinvCyclicCoBound<Function(dynamic)>> is regular-bounded.
+  void f12(FinvCyclicCoBound source12) {
+    var fsource12 = toF(source12);
+    F<FinvCyclicCoBound<Function(dynamic)>> target12 = fsource12;
+  }
+}
+
+void testNested() {
+  // Everything gets the same treatment when the cases from
+  // `testTopLevel` are duplicated at the nested level.
+
+  void f1(B<Fcov> source1) {
+    var fsource1 = toF(source1);
+    F<B<Fcov<dynamic>>> target1 = fsource1;
+  }
+
+  void f2(B<Fcon> source2) {
+    var fsource2 = toF(source2);
+    F<B<Fcon<dynamic>>> target2 = fsource2;
+  }
+
+  void f3(B<Finv> source3) {
+    var fsource3 = toF(source3);
+    F<B<Finv<dynamic>>> target3 = fsource3;
+  }
+
+  void f4(B<FcovBound> source4) {
+    var fsource4 = toF(source4);
+    F<B<FcovBound<num>>> target4 = fsource4;
+  }
+
+  void f5(B<FconBound> source5) {
+    var fsource5 = toF(source5);
+    F<B<FconBound<num>>> target5 = fsource5;
+  }
+
+  void f6(B<FinvBound> source6) {
+    var fsource6 = toF(source6);
+    F<B<FinvBound<num>>> target6 = fsource6;
+  }
+
+  void f7(B<FcovCyclicBound> source7) {
+    var fsource7 = toF(source7);
+    F<B<FcovCyclicBound<A<dynamic>>>> target7 = fsource7;
+  }
+
+  void f8(B<FconCyclicBound> source8) {
+    var fsource8 = toF(source8);
+    F<B<FconCyclicBound<A<Never>>>> target8 = fsource8;
+  }
+
+  void f9(B<FinvCyclicBound> source9) {
+    var fsource9 = toF(source9);
+    F<B<FinvCyclicBound<A<dynamic>>>> target9 = fsource9;
+  }
+
+  void f10(B<FcovCyclicCoBound> source10) {
+    var fsource10 = toF(source10);
+    F<B<FcovCyclicCoBound<Function(Never)>>> target10 = fsource10;
+  }
+
+  void f11(B<FconCyclicCoBound> source11) {
+    var fsource11 = toF(source11);
+    F<B<FconCyclicCoBound<Function(dynamic)>>> target11 = fsource11;
+  }
+
+  void f12(B<FinvCyclicCoBound> source12) {
+    var fsource12 = toF(source12);
+    F<B<FinvCyclicCoBound<Function(dynamic)>>> target12 = fsource12;
+  }
+}
+
+main() {
+  testTopLevel();
+  testNested();
+}
diff --git a/tests/language/generic/super_bounded_types_error2_test.dart b/tests/language/generic/super_bounded_types_error2_test.dart
new file mode 100644
index 0000000..39d9d4c
--- /dev/null
+++ b/tests/language/generic/super_bounded_types_error2_test.dart
@@ -0,0 +1,2338 @@
+// 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.
+
+// Test that various types cause an error when it violates its bounds and
+// is not correctly super-bounded.
+
+import 'dart:async';
+
+class A<X> {}
+
+class B<X extends B<X>> extends A<X> {}
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+typedef Funu<X> = Function();
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+typedef FunuBound<X extends num> = Function();
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FunuCyclicBound<X extends A<X>> = Function();
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+typedef FunuCyclicCoBound<X extends Function(X)> = Function();
+
+class CFcov<X extends Fcov<X>> {}
+
+class CFcon<X extends Fcon<X>> {}
+
+class CFinv<X extends Finv<X>> {}
+
+class CFunu<X extends Funu<X>> {}
+
+class CcovBound<X extends num> {}
+
+class CcovCyclicBound<X extends A<X>> {}
+
+class CcovCyclicCoBound<X extends Function(X)> {}
+
+void testContravariantSuperboundError<N extends Null>() {
+  // --- Near-bottom type in a contravariant position, not super-bounded.
+  FcovCyclicCoBound<Function(Never?)> x1;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Null)> x2;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(N)> x3;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  CFcon<Fcon<Never?>> x4;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<Fcon<Null>> x5;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<Fcon<N>> x6;
+//^
+// [analyzer] unspecified
+//               ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CcovCyclicCoBound<Function(Never?)> x7;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Null)> x8;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(N)> x9;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+
+  // --- Same non-super-bounded types in a context.
+  A<FcovCyclicCoBound<Function(Never?)>> x10;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<FcovCyclicCoBound<Function(Null)>> x11;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<FcovCyclicCoBound<Function(N)>> x12;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<CFcon<Fcon<Never?>>> x13;
+//^
+// [analyzer] unspecified
+//                       ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  A<CFcon<Fcon<Null>>> x14;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  A<CFcon<Fcon<N>>> x15;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  A<CcovCyclicCoBound<Function(Never?)>> x16;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  A<CcovCyclicCoBound<Function(Null)>> x17;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  A<CcovCyclicCoBound<Function(N)>> x18;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Never?)> Function() x19;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Null)> Function() x20;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(N)> Function() x21;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  CFcon<Fcon<Never?>> Function() x22;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<Fcon<Null>> Function() x23;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<Fcon<N>> Function() x24;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CcovCyclicCoBound<Function(Never?)> Function() x25;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Null)> Function() x26;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(N)> Function() x27;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(FcovCyclicCoBound<Function(Never?)>)) x28;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(FcovCyclicCoBound<Function(Null)>)) x29;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(FcovCyclicCoBound<Function(N)>)) x30;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(CFcon<Fcon<Never?>>)) x31;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(void Function(CFcon<Fcon<Null>>)) x32;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(void Function(CFcon<Fcon<N>>)) x33;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(void Function(CcovCyclicCoBound<Function(Never?)>)) x34;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(CcovCyclicCoBound<Function(Null)>)) x35;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(CcovCyclicCoBound<Function(N)>)) x36;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Never?)>) x37;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Null)>) x38;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(N)>) x39;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(CFcon<Fcon<Never?>>) x40;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<Fcon<Null>>) x41;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<Fcon<N>>) x42;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CcovCyclicCoBound<Function(Never?)>) x43;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Null)>) x44;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(N)>) x45;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Never?)>) Function() x46;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Null)>) Function() x47;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(N)>) Function() x48;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(CFcon<Fcon<Never?>>) Function() x49;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<Fcon<Null>>) Function() x50;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<Fcon<N>>) Function() x51;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CcovCyclicCoBound<Function(Never?)>) Function() x52;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Null)>) Function() x53;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(N)>) Function() x54;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends FcovCyclicCoBound<Function(Never?)>>() x55;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends FcovCyclicCoBound<Function(Null)>>() x56;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends FcovCyclicCoBound<Function(N)>>() x57;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends CFcon<Fcon<Never?>>>() x58;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends CFcon<Fcon<Null>>>() x59;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends CFcon<Fcon<N>>>() x60;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends CcovCyclicCoBound<Function(Never?)>>() x61;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends CcovCyclicCoBound<Function(Null)>>() x62;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends CcovCyclicCoBound<Function(N)>>() x63;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<FcovCyclicCoBound<Function(Never?)>>>() x64;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<FcovCyclicCoBound<Function(Null)>>>() x65;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<FcovCyclicCoBound<Function(N)>>>() x66;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<CFcon<Fcon<Never?>>>>() x67;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends A<CFcon<Fcon<Null>>>>() x68;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends A<CFcon<Fcon<N>>>>() x69;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends A<CcovCyclicCoBound<Function(Never?)>>>() x70;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<CcovCyclicCoBound<Function(Null)>>>() x71;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<CcovCyclicCoBound<Function(N)>>>() x72;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<Function(Never?)>> x73;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<Function(Null)>> x74;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<Function(N)>> x75;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<CFcon<Fcon<Never?>>> x76;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Finv<CFcon<Fcon<Null>>> x77;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Finv<CFcon<Fcon<N>>> x78;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Finv<CcovCyclicCoBound<Function(Never?)>> x79;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<CcovCyclicCoBound<Function(Null)>> x80;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<CcovCyclicCoBound<Function(N)>> x81;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<Function(Never?)>> x82;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<Function(Null)>> x83;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<Function(N)>> x84;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<CFcon<Fcon<Never?>>> x85;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Funu<CFcon<Fcon<Null>>> x86;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Funu<CFcon<Fcon<N>>> x87;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Funu<CcovCyclicCoBound<Function(Never?)>> x88;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic Function(Never?)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<CcovCyclicCoBound<Function(Null)>> x89;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'dynamic Function(Null)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<CcovCyclicCoBound<Function(N)>> x90;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+
+  // --- Top type in a contravariant position, not super-bounded.
+  FconBound<dynamic> x91;
+//^
+// [analyzer] unspecified
+//                   ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<void> x92;
+//^
+// [analyzer] unspecified
+//                ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<Object?> x93;
+//^
+// [analyzer] unspecified
+//                   ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<dynamic>> x94;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<void>> x95;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<Object?>> x96;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconCyclicBound<dynamic> x97;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<void> x98;
+//^
+// [analyzer] unspecified
+//                      ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<Object?> x99;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<dynamic>> x100;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<void>> x101;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<Object?>> x102;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<dynamic>> x103;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<void>> x104;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<Object?>> x105;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<dynamic>>> x106;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<void>>> x107;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<Object?>>> x108;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<dynamic>>> x109;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<void>>> x110;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<Object?>>> x111;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<dynamic>>>> x112;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<void>>>> x113;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<Object?>>>> x114;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicCoBound<dynamic> x115;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<void> x116;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Object?> x117;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<dynamic>> x118;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<void>> x119;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<Object?>> x120;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(dynamic))> x121;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(void))> x122;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(Object?))> x123;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<dynamic>))> x124;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<void>))> x125;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<Object?>))> x126;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+
+  // --- Same non-super-bounded types in a context.
+  A<FconBound<dynamic>> x127;
+//^
+// [analyzer] unspecified
+//                      ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconBound<void>> x128;
+//^
+// [analyzer] unspecified
+//                   ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconBound<Object?>> x129;
+//^
+// [analyzer] unspecified
+//                      ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconBound<FutureOr<dynamic>>> x130;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconBound<FutureOr<void>>> x131;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconBound<FutureOr<Object?>>> x132;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  A<FconCyclicBound<dynamic>> x133;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<void>> x134;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<Object?>> x135;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<FutureOr<dynamic>>> x136;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<FutureOr<void>>> x137;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<FutureOr<Object?>>> x138;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<dynamic>>> x139;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<void>>> x140;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<Object?>>> x141;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<FutureOr<dynamic>>>> x142;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<FutureOr<void>>>> x143;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<FutureOr<Object?>>>> x144;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<dynamic>>>> x145;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<void>>>> x146;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<Object?>>>> x147;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x148;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<FutureOr<void>>>>> x149;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicBound<A<A<FutureOr<Object?>>>>> x150;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  A<FconCyclicCoBound<dynamic>> x151;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<void>> x152;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Object?>> x153;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<FutureOr<dynamic>>> x154;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<FutureOr<void>>> x155;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<FutureOr<Object?>>> x156;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(dynamic))>> x157;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(void))>> x158;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(Object?))>> x159;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x160;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x161;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  A<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x162;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconBound<dynamic> Function() x163;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<void> Function() x164;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<Object?> Function() x165;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<dynamic>> Function() x166;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<void>> Function() x167;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconBound<FutureOr<Object?>> Function() x168;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  FconCyclicBound<dynamic> Function() x169;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<void> Function() x170;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<Object?> Function() x171;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<dynamic>> Function() x172;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<void>> Function() x173;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<FutureOr<Object?>> Function() x174;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<dynamic>> Function() x175;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<void>> Function() x176;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<Object?>> Function() x177;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<dynamic>>> Function() x178;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<void>>> Function() x179;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<FutureOr<Object?>>> Function() x180;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<dynamic>>> Function() x181;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<void>>> Function() x182;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<Object?>>> Function() x183;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<dynamic>>>> Function() x184;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<void>>>> Function() x185;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicBound<A<A<FutureOr<Object?>>>> Function() x186;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  FconCyclicCoBound<dynamic> Function() x187;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<void> Function() x188;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Object?> Function() x189;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<dynamic>> Function() x190;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<void>> Function() x191;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<FutureOr<Object?>> Function() x192;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(dynamic))> Function() x193;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(void))> Function() x194;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(Object?))> Function() x195;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x196;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<void>))> Function() x197;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  FconCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x198;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconBound<dynamic>)) x199;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconBound<void>)) x200;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconBound<Object?>)) x201;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconBound<FutureOr<dynamic>>)) x202;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconBound<FutureOr<void>>)) x203;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconBound<FutureOr<Object?>>)) x204;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(void Function(FconCyclicBound<dynamic>)) x205;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<void>)) x206;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<Object?>)) x207;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<FutureOr<dynamic>>)) x208;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<FutureOr<void>>)) x209;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<FutureOr<Object?>>)) x210;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<dynamic>>)) x211;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<void>>)) x212;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<Object?>>)) x213;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<FutureOr<dynamic>>>)) x214;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<FutureOr<void>>>)) x215;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<FutureOr<Object?>>>)) x216;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<dynamic>>>)) x217;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<void>>>)) x218;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<Object?>>>)) x219;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>)) x220;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<FutureOr<void>>>>)) x221;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>)) x222;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(void Function(FconCyclicCoBound<dynamic>)) x223;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<void>)) x224;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<Object?>)) x225;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<FutureOr<dynamic>>)) x226;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<FutureOr<void>>)) x227;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<FutureOr<Object?>>)) x228;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<Function(Function(dynamic))>))
+//^
+// [analyzer] unspecified
+      x229;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<Function(Function(void))>))
+//^
+// [analyzer] unspecified
+      x230;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(void Function(FconCyclicCoBound<Function(Function(Object?))>))
+//^
+// [analyzer] unspecified
+      x231;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(
+      void Function(
+          FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x232;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(
+          void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>))
+//^
+// [analyzer] unspecified
+      x233;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(
+      void Function(
+          FconCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x234;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconBound<dynamic>) x235;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<void>) x236;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<Object?>) x237;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<dynamic>>) x238;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<void>>) x239;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<Object?>>) x240;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconCyclicBound<dynamic>) x241;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<void>) x242;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<Object?>) x243;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<dynamic>>) x244;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<void>>) x245;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<Object?>>) x246;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<dynamic>>) x247;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<void>>) x248;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<Object?>>) x249;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<dynamic>>>) x250;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<void>>>) x251;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<Object?>>>) x252;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<dynamic>>>) x253;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<void>>>) x254;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<Object?>>>) x255;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>) x256;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<void>>>>) x257;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>) x258;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicCoBound<dynamic>) x259;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<void>) x260;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Object?>) x261;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<dynamic>>) x262;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<void>>) x263;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<Object?>>) x264;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(dynamic))>) x265;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(void))>) x266;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(Object?))>) x267;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x268;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>) x269;
+//^
+// [analyzer] unspecified
+//                                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<Object?>))>) x270;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconBound<dynamic>) Function() x271;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<void>) Function() x272;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<Object?>) Function() x273;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<dynamic>>) Function() x274;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<void>>) Function() x275;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconBound<FutureOr<Object?>>) Function() x276;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function(FconCyclicBound<dynamic>) Function() x277;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<void>) Function() x278;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<Object?>) Function() x279;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<dynamic>>) Function() x280;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<void>>) Function() x281;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<FutureOr<Object?>>) Function() x282;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<dynamic>>) Function() x283;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<void>>) Function() x284;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<Object?>>) Function() x285;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<dynamic>>>) Function() x286;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<void>>>) Function() x287;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<FutureOr<Object?>>>) Function() x288;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<dynamic>>>) Function() x289;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<void>>>) Function() x290;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<Object?>>>) Function() x291;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x292;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<void>>>>) Function() x293;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicBound<A<A<FutureOr<Object?>>>>) Function() x294;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function(FconCyclicCoBound<dynamic>) Function() x295;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<void>) Function() x296;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Object?>) Function() x297;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<dynamic>>) Function() x298;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<void>>) Function() x299;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<FutureOr<Object?>>) Function() x300;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(dynamic))>) Function() x301;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(void))>) Function() x302;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(Object?))>) Function() x303;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
+//^
+// [analyzer] unspecified
+      Function() x304;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<void>))>)
+//^
+// [analyzer] unspecified
+      Function() x305;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function(FconCyclicCoBound<Function(Function(FutureOr<Object?>))>)
+//^
+// [analyzer] unspecified
+      Function() x306;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconBound<dynamic>>() x307;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconBound<void>>() x308;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconBound<Object?>>() x309;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconBound<FutureOr<dynamic>>>() x310;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconBound<FutureOr<void>>>() x311;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconBound<FutureOr<Object?>>>() x312;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends FconCyclicBound<dynamic>>() x313;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<void>>() x314;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<Object?>>() x315;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<FutureOr<dynamic>>>() x316;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<FutureOr<void>>>() x317;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<FutureOr<Object?>>>() x318;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<dynamic>>>() x319;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<void>>>() x320;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<Object?>>>() x321;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<FutureOr<dynamic>>>>() x322;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<FutureOr<void>>>>() x323;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<FutureOr<Object?>>>>() x324;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<dynamic>>>>() x325;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<void>>>>() x326;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<Object?>>>>() x327;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<FutureOr<dynamic>>>>>() x328;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<FutureOr<void>>>>>() x329;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicBound<A<A<FutureOr<Object?>>>>>() x330;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends FconCyclicCoBound<dynamic>>() x331;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<void>>() x332;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<Object?>>() x333;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<FutureOr<dynamic>>>() x334;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<FutureOr<void>>>() x335;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<FutureOr<Object?>>>() x336;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<Function(Function(dynamic))>>()
+//^
+// [analyzer] unspecified
+      x337;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<Function(Function(void))>>() x338;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends FconCyclicCoBound<Function(Function(Object?))>>()
+//^
+// [analyzer] unspecified
+      x339;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+          Y extends FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
+//^
+// [analyzer] unspecified
+      x340;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+      Y extends FconCyclicCoBound<Function(Function(FutureOr<void>))>>() x341;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+          Y extends FconCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
+//^
+// [analyzer] unspecified
+      x342;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconBound<dynamic>>>() x343;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconBound<void>>>() x344;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconBound<Object?>>>() x345;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconBound<FutureOr<dynamic>>>>() x346;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconBound<FutureOr<void>>>>() x347;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconBound<FutureOr<Object?>>>>() x348;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  void Function<Y extends A<FconCyclicBound<dynamic>>>() x349;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<void>>>() x350;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<Object?>>>() x351;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<FutureOr<dynamic>>>>() x352;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<FutureOr<void>>>>() x353;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<FutureOr<Object?>>>>() x354;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<dynamic>>>>() x355;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<void>>>>() x356;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<Object?>>>>() x357;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<FutureOr<dynamic>>>>>() x358;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<FutureOr<void>>>>>() x359;
+//^
+// [analyzer] unspecified
+//                                                                 ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<FutureOr<Object?>>>>>() x360;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<dynamic>>>>>() x361;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<void>>>>>() x362;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<Object?>>>>>() x363;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<FutureOr<dynamic>>>>>>() x364;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<FutureOr<void>>>>>>() x365;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicBound<A<A<FutureOr<Object?>>>>>>() x366;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  void Function<Y extends A<FconCyclicCoBound<dynamic>>>() x367;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<void>>>() x368;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<Object?>>>() x369;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<FutureOr<dynamic>>>>() x370;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<FutureOr<void>>>>() x371;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<FutureOr<Object?>>>>() x372;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<Function(Function(dynamic))>>>()
+//^
+// [analyzer] unspecified
+      x373;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<Function(Function(void))>>>()
+//^
+// [analyzer] unspecified
+      x374;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<Y extends A<FconCyclicCoBound<Function(Function(Object?))>>>()
+//^
+// [analyzer] unspecified
+      x375;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+      Y extends A<
+          FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x376;
+//^
+// [analyzer] unspecified
+//                                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+          Y extends A<FconCyclicCoBound<Function(Function(FutureOr<void>))>>>()
+//^
+// [analyzer] unspecified
+      x377;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  void Function<
+      Y extends A<
+          FconCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x378;
+//^
+// [analyzer] unspecified
+//                                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconBound<dynamic>> x379;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconBound<void>> x380;
+//^
+// [analyzer] unspecified
+//                      ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconBound<Object?>> x381;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconBound<FutureOr<dynamic>>> x382;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconBound<FutureOr<void>>> x383;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconBound<FutureOr<Object?>>> x384;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Finv<FconCyclicBound<dynamic>> x385;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<void>> x386;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<Object?>> x387;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<FutureOr<dynamic>>> x388;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<FutureOr<void>>> x389;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<FutureOr<Object?>>> x390;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<dynamic>>> x391;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<void>>> x392;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<Object?>>> x393;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<FutureOr<dynamic>>>> x394;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<FutureOr<void>>>> x395;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<FutureOr<Object?>>>> x396;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<dynamic>>>> x397;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<void>>>> x398;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<Object?>>>> x399;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x400;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<FutureOr<void>>>>> x401;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicBound<A<A<FutureOr<Object?>>>>> x402;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Finv<FconCyclicCoBound<dynamic>> x403;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<void>> x404;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Object?>> x405;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<FutureOr<dynamic>>> x406;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<FutureOr<void>>> x407;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<FutureOr<Object?>>> x408;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(dynamic))>> x409;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(void))>> x410;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(Object?))>> x411;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x412;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x413;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Finv<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x414;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconBound<dynamic>> x415;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconBound<void>> x416;
+//^
+// [analyzer] unspecified
+//                      ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconBound<Object?>> x417;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconBound<FutureOr<dynamic>>> x418;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconBound<FutureOr<void>>> x419;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconBound<FutureOr<Object?>>> x420;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'num' of the type variable 'X' on 'FconBound'.
+  Funu<FconCyclicBound<dynamic>> x421;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<void>> x422;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<Object?>> x423;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<FutureOr<dynamic>>> x424;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<FutureOr<void>>> x425;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<FutureOr<Object?>>> x426;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<dynamic>>> x427;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<void>>> x428;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'A<void>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<Object?>>> x429;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<FutureOr<dynamic>>>> x430;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<FutureOr<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<FutureOr<void>>>> x431;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<FutureOr<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<FutureOr<Object?>>>> x432;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<FutureOr<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<dynamic>>>> x433;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<A<dynamic>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<void>>>> x434;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'A<A<void>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<Object?>>>> x435;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<A<Object?>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<FutureOr<dynamic>>>>> x436;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'A<A<FutureOr<dynamic>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<FutureOr<void>>>>> x437;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'A<A<FutureOr<void>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicBound<A<A<FutureOr<Object?>>>>> x438;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'A<A<FutureOr<Object?>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FconCyclicBound'.
+  Funu<FconCyclicCoBound<dynamic>> x439;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'dynamic' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<void>> x440;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'void' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Object?>> x441;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<FutureOr<dynamic>>> x442;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<dynamic>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<FutureOr<void>>> x443;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<void>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<FutureOr<Object?>>> x444;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object?>?' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(dynamic))>> x445;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(dynamic))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(void))>> x446;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(void))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(Object?))>> x447;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object?))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x448;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<dynamic>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(FutureOr<void>))>> x449;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<void>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+  Funu<FconCyclicCoBound<Function(Function(FutureOr<Object?>))>> x450;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object?>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FconCyclicCoBound'.
+}
+
+void main() {
+  testContravariantSuperboundError<Null>();
+}
diff --git a/tests/language/generic/super_bounded_types_error_test.dart b/tests/language/generic/super_bounded_types_error_test.dart
new file mode 100644
index 0000000..63434cd
--- /dev/null
+++ b/tests/language/generic/super_bounded_types_error_test.dart
@@ -0,0 +1,3195 @@
+// 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.
+
+// Test that various types cause an error when it violates its bounds and
+// is not correctly super-bounded.
+
+import 'dart:async';
+
+class A<X> {}
+
+class B<X extends B<X>> extends A<X> {}
+
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw 0;
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+typedef Funu<X> = Function();
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+typedef FunuBound<X extends num> = Function();
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FunuCyclicBound<X extends A<X>> = Function();
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+typedef FunuCyclicCoBound<X extends Function(X)> = Function();
+
+class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AconCyclicCoBound<X extends FconCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class CFcov<X extends Fcov<X>> {}
+
+class CFcon<X extends Fcon<X>> {}
+
+class CFinv<X extends Finv<X>> {}
+
+class CFunu<X extends Funu<X>> {}
+
+class CcovBound<X extends num> {}
+
+class CcovCyclicBound<X extends A<X>> {}
+
+class CcovCyclicCoBound<X extends Function(X)> {}
+
+void testCovariantSuperboundError<N extends Null>() {
+  // --- Near-top type in a covariant position, not super-bounded.
+  FcovBound<Object> x1;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  FcovBound<FutureOr<Object>> x2;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  FcovCyclicBound<Object> x3;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<FutureOr<Object>> x4;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<Object>> x5;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<FutureOr<Object>>> x6;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<A<Object>>> x7;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<A<FutureOr<Object>>>> x8;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicCoBound<Object> x9;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<FutureOr<Object>> x10;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Function(Object))> x11;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Function(FutureOr<Object>))> x12;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  CFcov<Object> x13;
+//^
+// [analyzer] unspecified
+//              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<FutureOr<Object>> x14;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Object>> x15;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<FutureOr<Object>>> x16;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Fcov<Object>>> x17;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Fcov<FutureOr<Object>>>> x18;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcon<Object> x19;
+//^
+// [analyzer] unspecified
+//              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<FutureOr<Object>> x20;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFinv<Object> x21;
+//^
+// [analyzer] unspecified
+//              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  CFinv<FutureOr<Object>> x22;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  CFunu<Object> x23;
+//^
+// [analyzer] unspecified
+//              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  CFunu<FutureOr<Object>> x24;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  CcovBound<Object> x25;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  CcovBound<FutureOr<Object>> x26;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  CcovCyclicBound<Object> x27;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<FutureOr<Object>> x28;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<Object>> x29;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<FutureOr<Object>>> x30;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<A<Object>>> x31;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<A<FutureOr<Object>>>> x32;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicCoBound<Object> x33;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<FutureOr<Object>> x34;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Function(Object))> x35;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Function(FutureOr<Object>))> x36;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+
+  // --- Same non-super-bounded types in a context.
+  A<FcovBound<Object>> x37;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  A<FcovBound<FutureOr<Object>>> x38;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  A<FcovCyclicBound<Object>> x39;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicBound<FutureOr<Object>>> x40;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicBound<A<Object>>> x41;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicBound<A<FutureOr<Object>>>> x42;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicBound<A<A<Object>>>> x43;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicBound<A<A<FutureOr<Object>>>>> x44;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  A<FcovCyclicCoBound<Object>> x45;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<FcovCyclicCoBound<FutureOr<Object>>> x46;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<FcovCyclicCoBound<Function(Function(Object))>> x47;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x48;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  A<CFcov<Object>> x49;
+//^
+// [analyzer] unspecified
+//                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcov<FutureOr<Object>>> x50;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcov<Fcov<Object>>> x51;
+//^
+// [analyzer] unspecified
+//                       ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcov<Fcov<FutureOr<Object>>>> x52;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcov<Fcov<Fcov<Object>>>> x53;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x54;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  A<CFcon<Object>> x55;
+//^
+// [analyzer] unspecified
+//                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  A<CFcon<FutureOr<Object>>> x56;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  A<CFinv<Object>> x57;
+//^
+// [analyzer] unspecified
+//                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  A<CFinv<FutureOr<Object>>> x58;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  A<CFunu<Object>> x59;
+//^
+// [analyzer] unspecified
+//                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  A<CFunu<FutureOr<Object>>> x60;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  A<CcovBound<Object>> x61;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  A<CcovBound<FutureOr<Object>>> x62;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  A<CcovCyclicBound<Object>> x63;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicBound<FutureOr<Object>>> x64;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicBound<A<Object>>> x65;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicBound<A<FutureOr<Object>>>> x66;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicBound<A<A<Object>>>> x67;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicBound<A<A<FutureOr<Object>>>>> x68;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  A<CcovCyclicCoBound<Object>> x69;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  A<CcovCyclicCoBound<FutureOr<Object>>> x70;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  A<CcovCyclicCoBound<Function(Function(Object))>> x71;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  A<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x72;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  FcovBound<Object> Function() x73;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  FcovBound<FutureOr<Object>> Function() x74;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  FcovCyclicBound<Object> Function() x75;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<FutureOr<Object>> Function() x76;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<Object>> Function() x77;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<FutureOr<Object>>> Function() x78;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<A<Object>>> Function() x79;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicBound<A<A<FutureOr<Object>>>> Function() x80;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  FcovCyclicCoBound<Object> Function() x81;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<FutureOr<Object>> Function() x82;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Function(Object))> Function() x83;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  FcovCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x84;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  CFcov<Object> Function() x85;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<FutureOr<Object>> Function() x86;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Object>> Function() x87;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<FutureOr<Object>>> Function() x88;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Fcov<Object>>> Function() x89;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcov<Fcov<Fcov<FutureOr<Object>>>> Function() x90;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  CFcon<Object> Function() x91;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFcon<FutureOr<Object>> Function() x92;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  CFinv<Object> Function() x93;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  CFinv<FutureOr<Object>> Function() x94;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  CFunu<Object> Function() x95;
+//^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  CFunu<FutureOr<Object>> Function() x96;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  CcovBound<Object> Function() x97;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  CcovBound<FutureOr<Object>> Function() x98;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  CcovCyclicBound<Object> Function() x99;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<FutureOr<Object>> Function() x100;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<Object>> Function() x101;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<FutureOr<Object>>> Function() x102;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<A<Object>>> Function() x103;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicBound<A<A<FutureOr<Object>>>> Function() x104;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  CcovCyclicCoBound<Object> Function() x105;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<FutureOr<Object>> Function() x106;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Function(Object))> Function() x107;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  CcovCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x108;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(FcovBound<Object>)) x109;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(void Function(FcovBound<FutureOr<Object>>)) x110;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(void Function(FcovCyclicBound<Object>)) x111;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicBound<FutureOr<Object>>)) x112;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicBound<A<Object>>)) x113;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicBound<A<FutureOr<Object>>>)) x114;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicBound<A<A<Object>>>)) x115;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>)) x116;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(void Function(FcovCyclicCoBound<Object>)) x117;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(FcovCyclicCoBound<FutureOr<Object>>)) x118;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(FcovCyclicCoBound<Function(Function(Object))>))
+//^
+// [analyzer] unspecified
+      x119;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(
+      void Function(
+          FcovCyclicCoBound<Function(Function(FutureOr<Object>))>)) x120;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(void Function(CFcov<Object>)) x121;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcov<FutureOr<Object>>)) x122;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcov<Fcov<Object>>)) x123;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcov<Fcov<FutureOr<Object>>>)) x124;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcov<Fcov<Fcov<Object>>>)) x125;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>)) x126;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(void Function(CFcon<Object>)) x127;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(void Function(CFcon<FutureOr<Object>>)) x128;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(void Function(CFinv<Object>)) x129;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(void Function(CFinv<FutureOr<Object>>)) x130;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(void Function(CFunu<Object>)) x131;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(void Function(CFunu<FutureOr<Object>>)) x132;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(void Function(CcovBound<Object>)) x133;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(void Function(CcovBound<FutureOr<Object>>)) x134;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(void Function(CcovCyclicBound<Object>)) x135;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicBound<FutureOr<Object>>)) x136;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicBound<A<Object>>)) x137;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicBound<A<FutureOr<Object>>>)) x138;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicBound<A<A<Object>>>)) x139;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>)) x140;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(void Function(CcovCyclicCoBound<Object>)) x141;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(CcovCyclicCoBound<FutureOr<Object>>)) x142;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(void Function(CcovCyclicCoBound<Function(Function(Object))>))
+//^
+// [analyzer] unspecified
+      x143;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(
+      void Function(
+          CcovCyclicCoBound<Function(Function(FutureOr<Object>))>)) x144;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(FcovBound<Object>) x145;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(FcovBound<FutureOr<Object>>) x146;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(FcovCyclicBound<Object>) x147;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<FutureOr<Object>>) x148;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<Object>>) x149;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<FutureOr<Object>>>) x150;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<A<Object>>>) x151;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>) x152;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicCoBound<Object>) x153;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<FutureOr<Object>>) x154;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Function(Object))>) x155;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object>))>) x156;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(CFcov<Object>) x157;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<FutureOr<Object>>) x158;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Object>>) x159;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<FutureOr<Object>>>) x160;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Fcov<Object>>>) x161;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>) x162;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcon<Object>) x163;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<FutureOr<Object>>) x164;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFinv<Object>) x165;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(CFinv<FutureOr<Object>>) x166;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(CFunu<Object>) x167;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(CFunu<FutureOr<Object>>) x168;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(CcovBound<Object>) x169;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(CcovBound<FutureOr<Object>>) x170;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(CcovCyclicBound<Object>) x171;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<FutureOr<Object>>) x172;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<Object>>) x173;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<FutureOr<Object>>>) x174;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<A<Object>>>) x175;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>) x176;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicCoBound<Object>) x177;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<FutureOr<Object>>) x178;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Function(Object))>) x179;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object>))>) x180;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(FcovBound<Object>) Function() x181;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(FcovBound<FutureOr<Object>>) Function() x182;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function(FcovCyclicBound<Object>) Function() x183;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<FutureOr<Object>>) Function() x184;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<Object>>) Function() x185;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<FutureOr<Object>>>) Function() x186;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<A<Object>>>) Function() x187;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicBound<A<A<FutureOr<Object>>>>) Function() x188;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function(FcovCyclicCoBound<Object>) Function() x189;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<FutureOr<Object>>) Function() x190;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Function(Object))>) Function() x191;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object>))>)
+//^
+// [analyzer] unspecified
+      Function() x192;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function(CFcov<Object>) Function() x193;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<FutureOr<Object>>) Function() x194;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Object>>) Function() x195;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<FutureOr<Object>>>) Function() x196;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Fcov<Object>>>) Function() x197;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcov<Fcov<Fcov<FutureOr<Object>>>>) Function() x198;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function(CFcon<Object>) Function() x199;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFcon<FutureOr<Object>>) Function() x200;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function(CFinv<Object>) Function() x201;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(CFinv<FutureOr<Object>>) Function() x202;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function(CFunu<Object>) Function() x203;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(CFunu<FutureOr<Object>>) Function() x204;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function(CcovBound<Object>) Function() x205;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(CcovBound<FutureOr<Object>>) Function() x206;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function(CcovCyclicBound<Object>) Function() x207;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<FutureOr<Object>>) Function() x208;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<Object>>) Function() x209;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<FutureOr<Object>>>) Function() x210;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<A<Object>>>) Function() x211;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicBound<A<A<FutureOr<Object>>>>) Function() x212;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function(CcovCyclicCoBound<Object>) Function() x213;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<FutureOr<Object>>) Function() x214;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Function(Object))>) Function() x215;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object>))>)
+//^
+// [analyzer] unspecified
+      Function() x216;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends FcovBound<Object>>() x217;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function<Y extends FcovBound<FutureOr<Object>>>() x218;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function<Y extends FcovCyclicBound<Object>>() x219;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicBound<FutureOr<Object>>>() x220;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicBound<A<Object>>>() x221;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicBound<A<FutureOr<Object>>>>() x222;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicBound<A<A<Object>>>>() x223;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicBound<A<A<FutureOr<Object>>>>>() x224;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends FcovCyclicCoBound<Object>>() x225;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends FcovCyclicCoBound<FutureOr<Object>>>() x226;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends FcovCyclicCoBound<Function(Function(Object))>>() x227;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<
+      Y extends FcovCyclicCoBound<Function(Function(FutureOr<Object>))>>() x228;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends CFcov<Object>>() x229;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcov<FutureOr<Object>>>() x230;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcov<Fcov<Object>>>() x231;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcov<Fcov<FutureOr<Object>>>>() x232;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcov<Fcov<Fcov<Object>>>>() x233;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcov<Fcov<Fcov<FutureOr<Object>>>>>() x234;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends CFcon<Object>>() x235;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends CFcon<FutureOr<Object>>>() x236;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends CFinv<Object>>() x237;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function<Y extends CFinv<FutureOr<Object>>>() x238;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function<Y extends CFunu<Object>>() x239;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function<Y extends CFunu<FutureOr<Object>>>() x240;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function<Y extends CcovBound<Object>>() x241;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function<Y extends CcovBound<FutureOr<Object>>>() x242;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function<Y extends CcovCyclicBound<Object>>() x243;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicBound<FutureOr<Object>>>() x244;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicBound<A<Object>>>() x245;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicBound<A<FutureOr<Object>>>>() x246;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicBound<A<A<Object>>>>() x247;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicBound<A<A<FutureOr<Object>>>>>() x248;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends CcovCyclicCoBound<Object>>() x249;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends CcovCyclicCoBound<FutureOr<Object>>>() x250;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends CcovCyclicCoBound<Function(Function(Object))>>() x251;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<
+      Y extends CcovCyclicCoBound<Function(Function(FutureOr<Object>))>>() x252;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<FcovBound<Object>>>() x253;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function<Y extends A<FcovBound<FutureOr<Object>>>>() x254;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  void Function<Y extends A<FcovCyclicBound<Object>>>() x255;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicBound<FutureOr<Object>>>>() x256;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicBound<A<Object>>>>() x257;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicBound<A<FutureOr<Object>>>>>() x258;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicBound<A<A<Object>>>>>() x259;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicBound<A<A<FutureOr<Object>>>>>>() x260;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  void Function<Y extends A<FcovCyclicCoBound<Object>>>() x261;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<FcovCyclicCoBound<FutureOr<Object>>>>() x262;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<FcovCyclicCoBound<Function(Function(Object))>>>()
+//^
+// [analyzer] unspecified
+      x263;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<
+      Y extends A<
+          FcovCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x264;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  void Function<Y extends A<CFcov<Object>>>() x265;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcov<FutureOr<Object>>>>() x266;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcov<Fcov<Object>>>>() x267;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcov<Fcov<FutureOr<Object>>>>>() x268;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcov<Fcov<Fcov<Object>>>>>() x269;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcov<Fcov<Fcov<FutureOr<Object>>>>>>() x270;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  void Function<Y extends A<CFcon<Object>>>() x271;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends A<CFcon<FutureOr<Object>>>>() x272;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  void Function<Y extends A<CFinv<Object>>>() x273;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function<Y extends A<CFinv<FutureOr<Object>>>>() x274;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  void Function<Y extends A<CFunu<Object>>>() x275;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function<Y extends A<CFunu<FutureOr<Object>>>>() x276;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  void Function<Y extends A<CcovBound<Object>>>() x277;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function<Y extends A<CcovBound<FutureOr<Object>>>>() x278;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  void Function<Y extends A<CcovCyclicBound<Object>>>() x279;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicBound<FutureOr<Object>>>>() x280;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicBound<A<Object>>>>() x281;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicBound<A<FutureOr<Object>>>>>() x282;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicBound<A<A<Object>>>>>() x283;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicBound<A<A<FutureOr<Object>>>>>>() x284;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  void Function<Y extends A<CcovCyclicCoBound<Object>>>() x285;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<CcovCyclicCoBound<FutureOr<Object>>>>() x286;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<Y extends A<CcovCyclicCoBound<Function(Function(Object))>>>()
+//^
+// [analyzer] unspecified
+      x287;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  void Function<
+      Y extends A<
+          CcovCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x288;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<FcovBound<Object>> x289;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  Finv<FcovBound<FutureOr<Object>>> x290;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  Finv<FcovCyclicBound<Object>> x291;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicBound<FutureOr<Object>>> x292;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicBound<A<Object>>> x293;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicBound<A<FutureOr<Object>>>> x294;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicBound<A<A<Object>>>> x295;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicBound<A<A<FutureOr<Object>>>>> x296;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Finv<FcovCyclicCoBound<Object>> x297;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<FutureOr<Object>>> x298;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<Function(Function(Object))>> x299;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x300;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Finv<CFcov<Object>> x301;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcov<FutureOr<Object>>> x302;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcov<Fcov<Object>>> x303;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcov<Fcov<FutureOr<Object>>>> x304;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcov<Fcov<Fcov<Object>>>> x305;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x306;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Finv<CFcon<Object>> x307;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Finv<CFcon<FutureOr<Object>>> x308;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Finv<CFinv<Object>> x309;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  Finv<CFinv<FutureOr<Object>>> x310;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  Finv<CFunu<Object>> x311;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  Finv<CFunu<FutureOr<Object>>> x312;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  Finv<CcovBound<Object>> x313;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  Finv<CcovBound<FutureOr<Object>>> x314;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  Finv<CcovCyclicBound<Object>> x315;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicBound<FutureOr<Object>>> x316;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicBound<A<Object>>> x317;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicBound<A<FutureOr<Object>>>> x318;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicBound<A<A<Object>>>> x319;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicBound<A<A<FutureOr<Object>>>>> x320;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Finv<CcovCyclicCoBound<Object>> x321;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<CcovCyclicCoBound<FutureOr<Object>>> x322;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<CcovCyclicCoBound<Function(Function(Object))>> x323;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Finv<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x324;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<FcovBound<Object>> x325;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  Funu<FcovBound<FutureOr<Object>>> x326;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FcovBound'.
+  Funu<FcovCyclicBound<Object>> x327;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicBound<FutureOr<Object>>> x328;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicBound<A<Object>>> x329;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicBound<A<FutureOr<Object>>>> x330;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicBound<A<A<Object>>>> x331;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicBound<A<A<FutureOr<Object>>>>> x332;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FcovCyclicBound'.
+  Funu<FcovCyclicCoBound<Object>> x333;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<FutureOr<Object>>> x334;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<Function(Function(Object))>> x335;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<FcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x336;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FcovCyclicCoBound'.
+  Funu<CFcov<Object>> x337;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcov<FutureOr<Object>>> x338;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcov<Fcov<Object>>> x339;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcov<Fcov<FutureOr<Object>>>> x340;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object> Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcov<Fcov<Fcov<Object>>>> x341;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcov<Fcov<Fcov<FutureOr<Object>>>>> x342;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object> Function() Function()' doesn't conform to the bound 'X Function()' of the type variable 'X' on 'CFcov'.
+  Funu<CFcon<Object>> x343;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Funu<CFcon<FutureOr<Object>>> x344;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CFcon'.
+  Funu<CFinv<Object>> x345;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  Funu<CFinv<FutureOr<Object>>> x346;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'X Function(X)' of the type variable 'X' on 'CFinv'.
+  Funu<CFunu<Object>> x347;
+//^
+// [analyzer] unspecified
+//                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  Funu<CFunu<FutureOr<Object>>> x348;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'CFunu'.
+  Funu<CcovBound<Object>> x349;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  Funu<CcovBound<FutureOr<Object>>> x350;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'CcovBound'.
+  Funu<CcovCyclicBound<Object>> x351;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicBound<FutureOr<Object>>> x352;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicBound<A<Object>>> x353;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicBound<A<FutureOr<Object>>>> x354;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicBound<A<A<Object>>>> x355;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicBound<A<A<FutureOr<Object>>>>> x356;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'CcovCyclicBound'.
+  Funu<CcovCyclicCoBound<Object>> x357;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<CcovCyclicCoBound<FutureOr<Object>>> x358;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<CcovCyclicCoBound<Function(Function(Object))>> x359;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+  Funu<CcovCyclicCoBound<Function(Function(FutureOr<Object>))>> x360;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'CcovCyclicCoBound'.
+}
+
+void testInvariantSuperboundError<N extends Null>() {
+  // --- Near-top type in an invariant position, not super-bounded.
+  FinvBound<Object> x1;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  FinvBound<FutureOr<Object>> x2;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  FinvCyclicBound<Object> x3;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<FutureOr<Object>> x4;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<Object>> x5;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<FutureOr<Object>>> x6;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<A<Object>>> x7;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<A<FutureOr<Object>>>> x8;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicCoBound<Object> x9;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<FutureOr<Object>> x10;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<Function(Function(Object))> x11;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<Function(Function(FutureOr<Object>))> x12;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+
+  // --- Same non-super-bounded types in a context.
+  A<FinvBound<Object>> x13;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  A<FinvBound<FutureOr<Object>>> x14;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  A<FinvCyclicBound<Object>> x15;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicBound<FutureOr<Object>>> x16;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicBound<A<Object>>> x17;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicBound<A<FutureOr<Object>>>> x18;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicBound<A<A<Object>>>> x19;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicBound<A<A<FutureOr<Object>>>>> x20;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  A<FinvCyclicCoBound<Object>> x21;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  A<FinvCyclicCoBound<FutureOr<Object>>> x22;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  A<FinvCyclicCoBound<Function(Function(Object))>> x23;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  A<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x24;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvBound<Object> Function() x25;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  FinvBound<FutureOr<Object>> Function() x26;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  FinvCyclicBound<Object> Function() x27;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<FutureOr<Object>> Function() x28;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<Object>> Function() x29;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<FutureOr<Object>>> Function() x30;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<A<Object>>> Function() x31;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicBound<A<A<FutureOr<Object>>>> Function() x32;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  FinvCyclicCoBound<Object> Function() x33;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<FutureOr<Object>> Function() x34;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<Function(Function(Object))> Function() x35;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  FinvCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x36;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(void Function(FinvBound<Object>)) x37;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(void Function(FinvBound<FutureOr<Object>>)) x38;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(void Function(FinvCyclicBound<Object>)) x39;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicBound<FutureOr<Object>>)) x40;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicBound<A<Object>>)) x41;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicBound<A<FutureOr<Object>>>)) x42;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicBound<A<A<Object>>>)) x43;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>)) x44;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(void Function(FinvCyclicCoBound<Object>)) x45;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(void Function(FinvCyclicCoBound<FutureOr<Object>>)) x46;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(void Function(FinvCyclicCoBound<Function(Function(Object))>))
+//^
+// [analyzer] unspecified
+      x47;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(
+      void Function(
+          FinvCyclicCoBound<Function(Function(FutureOr<Object>))>)) x48;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvBound<Object>) x49;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(FinvBound<FutureOr<Object>>) x50;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(FinvCyclicBound<Object>) x51;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<FutureOr<Object>>) x52;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<Object>>) x53;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<FutureOr<Object>>>) x54;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<A<Object>>>) x55;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>) x56;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicCoBound<Object>) x57;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<FutureOr<Object>>) x58;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<Function(Function(Object))>) x59;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object>))>) x60;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvBound<Object>) Function() x61;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(FinvBound<FutureOr<Object>>) Function() x62;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function(FinvCyclicBound<Object>) Function() x63;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<FutureOr<Object>>) Function() x64;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<Object>>) Function() x65;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<FutureOr<Object>>>) Function() x66;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<A<Object>>>) Function() x67;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicBound<A<A<FutureOr<Object>>>>) Function() x68;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function(FinvCyclicCoBound<Object>) Function() x69;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<FutureOr<Object>>) Function() x70;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<Function(Function(Object))>) Function() x71;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object>))>)
+//^
+// [analyzer] unspecified
+      Function() x72;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends FinvBound<Object>>() x73;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function<Y extends FinvBound<FutureOr<Object>>>() x74;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function<Y extends FinvCyclicBound<Object>>() x75;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicBound<FutureOr<Object>>>() x76;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicBound<A<Object>>>() x77;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicBound<A<FutureOr<Object>>>>() x78;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicBound<A<A<Object>>>>() x79;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicBound<A<A<FutureOr<Object>>>>>() x80;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends FinvCyclicCoBound<Object>>() x81;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends FinvCyclicCoBound<FutureOr<Object>>>() x82;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends FinvCyclicCoBound<Function(Function(Object))>>() x83;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<
+      Y extends FinvCyclicCoBound<Function(Function(FutureOr<Object>))>>() x84;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends A<FinvBound<Object>>>() x85;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function<Y extends A<FinvBound<FutureOr<Object>>>>() x86;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  void Function<Y extends A<FinvCyclicBound<Object>>>() x87;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicBound<FutureOr<Object>>>>() x88;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicBound<A<Object>>>>() x89;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicBound<A<FutureOr<Object>>>>>() x90;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicBound<A<A<Object>>>>>() x91;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicBound<A<A<FutureOr<Object>>>>>>() x92;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  void Function<Y extends A<FinvCyclicCoBound<Object>>>() x93;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends A<FinvCyclicCoBound<FutureOr<Object>>>>() x94;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<Y extends A<FinvCyclicCoBound<Function(Function(Object))>>>()
+//^
+// [analyzer] unspecified
+      x95;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  void Function<
+      Y extends A<
+          FinvCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x96;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Finv<FinvBound<Object>> x97;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  Finv<FinvBound<FutureOr<Object>>> x98;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  Finv<FinvCyclicBound<Object>> x99;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicBound<FutureOr<Object>>> x100;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicBound<A<Object>>> x101;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicBound<A<FutureOr<Object>>>> x102;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicBound<A<A<Object>>>> x103;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicBound<A<A<FutureOr<Object>>>>> x104;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Finv<FinvCyclicCoBound<Object>> x105;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Finv<FinvCyclicCoBound<FutureOr<Object>>> x106;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Finv<FinvCyclicCoBound<Function(Function(Object))>> x107;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Finv<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x108;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Funu<FinvBound<Object>> x109;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  Funu<FinvBound<FutureOr<Object>>> x110;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FinvBound'.
+  Funu<FinvCyclicBound<Object>> x111;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicBound<FutureOr<Object>>> x112;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicBound<A<Object>>> x113;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicBound<A<FutureOr<Object>>>> x114;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicBound<A<A<Object>>>> x115;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicBound<A<A<FutureOr<Object>>>>> x116;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FinvCyclicBound'.
+  Funu<FinvCyclicCoBound<Object>> x117;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Funu<FinvCyclicCoBound<FutureOr<Object>>> x118;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Funu<FinvCyclicCoBound<Function(Function(Object))>> x119;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  Funu<FinvCyclicCoBound<Function(Function(FutureOr<Object>))>> x120;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+}
+
+void testVarianceLessSuperboundError<N extends Null>() {
+  // --- Near-top type in a variance-less position, not super-bounded.
+  FunuBound<Object> x1;
+//^
+// [analyzer] unspecified
+//                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  FunuBound<FutureOr<Object>> x2;
+//^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  FunuCyclicBound<Object> x3;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<FutureOr<Object>> x4;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<Object>> x5;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<FutureOr<Object>>> x6;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<A<Object>>> x7;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<A<FutureOr<Object>>>> x8;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicCoBound<Object> x9;
+//^
+// [analyzer] unspecified
+//                          ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<FutureOr<Object>> x10;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<Function(Function(Object))> x13;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<Function(Function(FutureOr<Object>))> x14;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+
+  // --- Same non-super-bounded types in a context.
+  A<FunuBound<Object>> x19;
+//^
+// [analyzer] unspecified
+//                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  A<FunuBound<FutureOr<Object>>> x20;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  A<FunuCyclicBound<Object>> x21;
+//^
+// [analyzer] unspecified
+//                           ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicBound<FutureOr<Object>>> x22;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicBound<A<Object>>> x23;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicBound<A<FutureOr<Object>>>> x24;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicBound<A<A<Object>>>> x25;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicBound<A<A<FutureOr<Object>>>>> x26;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  A<FunuCyclicCoBound<Object>> x27;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  A<FunuCyclicCoBound<FutureOr<Object>>> x28;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  A<FunuCyclicCoBound<Function(Function(Object))>> x31;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  A<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x32;
+//^
+// [analyzer] unspecified
+//                                                           ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuBound<Object> Function() x37;
+//^
+// [analyzer] unspecified
+//                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  FunuBound<FutureOr<Object>> Function() x38;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  FunuCyclicBound<Object> Function() x39;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<FutureOr<Object>> Function() x40;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<Object>> Function() x41;
+//^
+// [analyzer] unspecified
+//                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<FutureOr<Object>>> Function() x42;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<A<Object>>> Function() x43;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicBound<A<A<FutureOr<Object>>>> Function() x44;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  FunuCyclicCoBound<Object> Function() x45;
+//^
+// [analyzer] unspecified
+//                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<FutureOr<Object>> Function() x46;
+//^
+// [analyzer] unspecified
+//                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<Function(Function(Object))> Function() x49;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<Function(Function(FutureOr<Object>))> Function() x50;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(void Function(FunuBound<Object>)) x55;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(void Function(FunuBound<FutureOr<Object>>)) x56;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(void Function(FunuCyclicBound<Object>)) x57;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicBound<FutureOr<Object>>)) x58;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicBound<A<Object>>)) x59;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicBound<A<FutureOr<Object>>>)) x60;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicBound<A<A<Object>>>)) x61;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>)) x62;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(void Function(FunuCyclicCoBound<Object>)) x63;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(void Function(FunuCyclicCoBound<FutureOr<Object>>)) x64;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(void Function(FunuCyclicCoBound<Function(Function(Object))>))
+//^
+// [analyzer] unspecified
+      x67;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(
+      void Function(
+          FunuCyclicCoBound<Function(Function(FutureOr<Object>))>)) x68;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuBound<Object>) x73;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(FunuBound<FutureOr<Object>>) x74;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(FunuCyclicBound<Object>) x75;
+//^
+// [analyzer] unspecified
+//                                       ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<FutureOr<Object>>) x76;
+//^
+// [analyzer] unspecified
+//                                                 ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<Object>>) x77;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<FutureOr<Object>>>) x78;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<A<Object>>>) x79;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>) x80;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicCoBound<Object>) x81;
+//^
+// [analyzer] unspecified
+//                                         ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<FutureOr<Object>>) x82;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<Function(Function(Object))>) x85;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object>))>) x86;
+//^
+// [analyzer] unspecified
+//                                                                       ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuBound<Object>) Function() x91;
+//^
+// [analyzer] unspecified
+//                                            ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(FunuBound<FutureOr<Object>>) Function() x92;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function(FunuCyclicBound<Object>) Function() x93;
+//^
+// [analyzer] unspecified
+//                                                  ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<FutureOr<Object>>) Function() x94;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<Object>>) Function() x95;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<FutureOr<Object>>>) Function() x96;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<A<Object>>>) Function() x97;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicBound<A<A<FutureOr<Object>>>>) Function() x98;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function(FunuCyclicCoBound<Object>) Function() x99;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<FutureOr<Object>>) Function() x100;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<Function(Function(Object))>) Function() x103;
+//^
+// [analyzer] unspecified
+//                                                                        ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object>))>)
+//^
+// [analyzer] unspecified
+      Function() x104;
+//               ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends FunuBound<Object>>() x109;
+//^
+// [analyzer] unspecified
+//                                             ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function<Y extends FunuBound<FutureOr<Object>>>() x110;
+//^
+// [analyzer] unspecified
+//                                                       ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function<Y extends FunuCyclicBound<Object>>() x111;
+//^
+// [analyzer] unspecified
+//                                                   ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicBound<FutureOr<Object>>>() x112;
+//^
+// [analyzer] unspecified
+//                                                             ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicBound<A<Object>>>() x113;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicBound<A<FutureOr<Object>>>>() x114;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicBound<A<A<Object>>>>() x115;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicBound<A<A<FutureOr<Object>>>>>() x116;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends FunuCyclicCoBound<Object>>() x117;
+//^
+// [analyzer] unspecified
+//                                                     ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends FunuCyclicCoBound<FutureOr<Object>>>() x118;
+//^
+// [analyzer] unspecified
+//                                                               ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends FunuCyclicCoBound<Function(Function(Object))>>() x121;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<
+      Y extends FunuCyclicCoBound<Function(Function(FutureOr<Object>))>>() x122;
+//^
+// [analyzer] unspecified
+//                                                                         ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends A<FunuBound<Object>>>() x127;
+//^
+// [analyzer] unspecified
+//                                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function<Y extends A<FunuBound<FutureOr<Object>>>>() x128;
+//^
+// [analyzer] unspecified
+//                                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  void Function<Y extends A<FunuCyclicBound<Object>>>() x129;
+//^
+// [analyzer] unspecified
+//                                                      ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicBound<FutureOr<Object>>>>() x130;
+//^
+// [analyzer] unspecified
+//                                                                ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicBound<A<Object>>>>() x131;
+//^
+// [analyzer] unspecified
+//                                                         ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicBound<A<FutureOr<Object>>>>>() x132;
+//^
+// [analyzer] unspecified
+//                                                                   ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicBound<A<A<Object>>>>>() x133;
+//^
+// [analyzer] unspecified
+//                                                            ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicBound<A<A<FutureOr<Object>>>>>>() x134;
+//^
+// [analyzer] unspecified
+//                                                                      ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  void Function<Y extends A<FunuCyclicCoBound<Object>>>() x135;
+//^
+// [analyzer] unspecified
+//                                                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends A<FunuCyclicCoBound<FutureOr<Object>>>>() x136;
+//^
+// [analyzer] unspecified
+//                                                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<Y extends A<FunuCyclicCoBound<Function(Function(Object))>>>()
+//^
+// [analyzer] unspecified
+      x139;
+//    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  void Function<
+      Y extends A<
+          FunuCyclicCoBound<Function(Function(FutureOr<Object>))>>>() x140;
+//^
+// [analyzer] unspecified
+//                                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Finv<FunuBound<Object>> x145;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  Finv<FunuBound<FutureOr<Object>>> x146;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  Finv<FunuCyclicBound<Object>> x147;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicBound<FutureOr<Object>>> x148;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicBound<A<Object>>> x149;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicBound<A<FutureOr<Object>>>> x150;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicBound<A<A<Object>>>> x151;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicBound<A<A<FutureOr<Object>>>>> x152;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Finv<FunuCyclicCoBound<Object>> x153;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Finv<FunuCyclicCoBound<FutureOr<Object>>> x154;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Finv<FunuCyclicCoBound<Function(Function(Object))>> x157;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Finv<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x158;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Funu<FunuBound<Object>> x163;
+//^
+// [analyzer] unspecified
+//                        ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  Funu<FunuBound<FutureOr<Object>>> x164;
+//^
+// [analyzer] unspecified
+//                                  ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'num' of the type variable 'X' on 'FunuBound'.
+  Funu<FunuCyclicBound<Object>> x165;
+//^
+// [analyzer] unspecified
+//                              ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicBound<FutureOr<Object>>> x166;
+//^
+// [analyzer] unspecified
+//                                        ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicBound<A<Object>>> x167;
+//^
+// [analyzer] unspecified
+//                                 ^
+// [cfe] Type argument 'A<Object>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicBound<A<FutureOr<Object>>>> x168;
+//^
+// [analyzer] unspecified
+//                                           ^
+// [cfe] Type argument 'A<FutureOr<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicBound<A<A<Object>>>> x169;
+//^
+// [analyzer] unspecified
+//                                    ^
+// [cfe] Type argument 'A<A<Object>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicBound<A<A<FutureOr<Object>>>>> x170;
+//^
+// [analyzer] unspecified
+//                                              ^
+// [cfe] Type argument 'A<A<FutureOr<Object>>>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'FunuCyclicBound'.
+  Funu<FunuCyclicCoBound<Object>> x171;
+//^
+// [analyzer] unspecified
+//                                ^
+// [cfe] Type argument 'Object' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Funu<FunuCyclicCoBound<FutureOr<Object>>> x172;
+//^
+// [analyzer] unspecified
+//                                          ^
+// [cfe] Type argument 'FutureOr<Object>' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Funu<FunuCyclicCoBound<Function(Function(Object))>> x175;
+//^
+// [analyzer] unspecified
+//                                                    ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(Object))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  Funu<FunuCyclicCoBound<Function(Function(FutureOr<Object>))>> x176;
+//^
+// [analyzer] unspecified
+//                                                              ^
+// [cfe] Type argument 'dynamic Function(dynamic Function(FutureOr<Object>))' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+}
+
+void testVarianceLessSuperbound<N extends Never>() {
+  FunuCyclicCoBound<Function(Never)> x1;
+//^
+// [analyzer] unspecified
+//                                   ^
+// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+  FunuCyclicCoBound<Function(N)> x2;
+//^
+// [analyzer] unspecified
+//                               ^
+// [cfe] Type argument 'dynamic Function(N)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FunuCyclicCoBound'.
+}
+
+void testTypeAliasAsTypeArgument() {
+  // I2b: Use bounds (FinvCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AinvCyclicCoBound<_, Function(Y)>` by `Never`; then replace invariant
+  // occurrence of `Y` in `AinvCyclicCoBound<FinvCyclicCoBound<Y>, _>` by `Y`s
+  // value `Function(Never)`.
+  // Resulting type
+  // `AinvCyclicCoBound<FinvCyclicCoBound<Function(Never)>, Function(Never)>>`
+  // looks regular-bounded, but contains `FinvCyclicCoBound<Function(Never)>`
+  // which is not well-bounded.
+  void f(AinvCyclicCoBound source) {
+//       ^
+// [analyzer] unspecified
+//                         ^
+// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+    var fsource = toF(source);
+//  ^
+// [analyzer] unspecified
+//      ^
+// [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+//                ^
+// [analyzer] unspecified
+// [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+    F<AinvCyclicCoBound<FinvCyclicCoBound<Function(Never)>, Function(Never)>>
+//  ^
+// [analyzer] unspecified
+        target = fsource;
+//      ^
+// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  }
+}
+
+void testNested() {
+  void f(B<AinvCyclicCoBound> source) {
+//       ^
+// [analyzer] unspecified
+//         ^
+// [analyzer] unspecified
+//                            ^
+// [cfe] Type argument 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
+//                            ^
+// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+    var fsource = toF(source);
+//  ^
+// [analyzer] unspecified
+//      ^
+// [cfe] Inferred type argument 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
+//      ^
+// [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+//                ^
+// [analyzer] unspecified
+// [cfe] Inferred type argument 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
+//                ^
+// [cfe] Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+    F<B<AinvCyclicCoBound<FinvCyclicCoBound<Function(Never)>, Function(Never)>>>
+//  ^
+// [analyzer] unspecified
+        target = fsource;
+//      ^
+// [cfe] Type argument 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' doesn't conform to the bound 'B<X>' of the type variable 'X' on 'B'.
+//      ^
+// [cfe] Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+  }
+}
+
+void main() {
+  testCovariantSuperboundError<Null>();
+  testInvariantSuperboundError<Null>();
+  testVarianceLessSuperboundError<Null>();
+  testVarianceLessSuperbound();
+  testTypeAliasAsTypeArgument();
+  testNested();
+}
diff --git a/tests/language/generic/super_bounded_types_test.dart b/tests/language/generic/super_bounded_types_test.dart
new file mode 100644
index 0000000..f1cd6cb
--- /dev/null
+++ b/tests/language/generic/super_bounded_types_test.dart
@@ -0,0 +1,2326 @@
+// 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.
+
+// Test that various super-bounded types are accepted.
+
+import 'dart:async';
+
+class A<X> {}
+
+class B<X extends B<X>> extends A<X> {}
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+typedef Funu<X> = Function();
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+typedef FunuBound<X extends num> = Function();
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FunuCyclicBound<X extends A<X>> = Function();
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+typedef FunuCyclicCoBound<X extends Function(X)> = Function();
+
+class CFcov<X extends Fcov<X>> {}
+
+class CFcon<X extends Fcon<X>> {}
+
+class CFinv<X extends Finv<X>> {}
+
+class CFunu<X extends Funu<X>> {}
+
+class CcovBound<X extends num> {}
+
+class CcovCyclicBound<X extends A<X>> {}
+
+class CcovCyclicCoBound<X extends Function(X)> {}
+
+void testCovariantSuperbound<N extends Never>() {
+  // Bottom type in a covariant position, regular-bounded.
+  FcovBound<Never> x1;
+  FcovBound<N> x2;
+  FcovCyclicBound<Never> x3;
+  FcovCyclicBound<N> x4;
+  FcovCyclicBound<A<Never>> x5;
+  FcovCyclicBound<A<N>> x6;
+  FcovCyclicBound<A<A<Never>>> x7;
+  FcovCyclicBound<A<A<N>>> x8;
+  FcovCyclicCoBound<Never> x9;
+  FcovCyclicCoBound<N> x10;
+  FcovCyclicCoBound<Function(Function(Never))> x11;
+  FcovCyclicCoBound<Function(Function(N))> x12;
+  CFcov<Never> x13;
+  CFcov<N> x14;
+  CFcov<Fcov<Never>> x15;
+  CFcov<Fcov<N>> x16;
+  CFcov<Fcov<Fcov<Never>>> x17;
+  CFcov<Fcov<Fcov<N>>> x18;
+  CFcon<Never> x19;
+  CFcon<N> x20;
+  CFinv<Never> x21;
+  CFinv<N> x22;
+  CFunu<Never> x23;
+  CFunu<N> x24;
+  CcovBound<Never> x25;
+  CcovBound<N> x26;
+  CcovCyclicBound<Never> x27;
+  CcovCyclicBound<N> x28;
+  CcovCyclicBound<A<Never>> x29;
+  CcovCyclicBound<A<N>> x30;
+  CcovCyclicBound<A<A<Never>>> x31;
+  CcovCyclicBound<A<A<N>>> x32;
+  CcovCyclicCoBound<Never> x33;
+  CcovCyclicCoBound<N> x34;
+  CcovCyclicCoBound<Function(Function(Never))> x35;
+  CcovCyclicCoBound<Function(Function(N))> x36;
+
+  // Top type in a covariant position, super-bounded.
+  FcovBound<dynamic> x37;
+  FcovBound<void> x38;
+  FcovBound<Object?> x39;
+  FcovBound<FutureOr<dynamic>> x40;
+  FcovBound<FutureOr<void>> x41;
+  FcovBound<FutureOr<Object?>> x42;
+  FcovCyclicBound<dynamic> x43;
+  FcovCyclicBound<void> x44;
+  FcovCyclicBound<Object?> x45;
+  FcovCyclicBound<FutureOr<dynamic>> x46;
+  FcovCyclicBound<FutureOr<void>> x47;
+  FcovCyclicBound<FutureOr<Object?>> x48;
+  FcovCyclicBound<A<dynamic>> x49;
+  FcovCyclicBound<A<void>> x50;
+  FcovCyclicBound<A<Object?>> x51;
+  FcovCyclicBound<A<FutureOr<dynamic>>> x52;
+  FcovCyclicBound<A<FutureOr<void>>> x53;
+  FcovCyclicBound<A<FutureOr<Object?>>> x54;
+  FcovCyclicBound<A<A<dynamic>>> x55;
+  FcovCyclicBound<A<A<void>>> x56;
+  FcovCyclicBound<A<A<Object?>>> x57;
+  FcovCyclicBound<A<A<FutureOr<dynamic>>>> x58;
+  FcovCyclicBound<A<A<FutureOr<void>>>> x59;
+  FcovCyclicBound<A<A<FutureOr<Object?>>>> x60;
+  FcovCyclicCoBound<dynamic> x61;
+  FcovCyclicCoBound<void> x62;
+  FcovCyclicCoBound<Object?> x63;
+  FcovCyclicCoBound<FutureOr<dynamic>> x64;
+  FcovCyclicCoBound<FutureOr<void>> x65;
+  FcovCyclicCoBound<FutureOr<Object?>> x66;
+  FcovCyclicCoBound<Function(Function(dynamic))> x67;
+  FcovCyclicCoBound<Function(Function(void))> x68;
+  FcovCyclicCoBound<Function(Function(Object?))> x69;
+  FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))> x70;
+  FcovCyclicCoBound<Function(Function(FutureOr<void>))> x71;
+  FcovCyclicCoBound<Function(Function(FutureOr<Object?>))> x72;
+  CFcov<dynamic> x73;
+  CFcov<void> x74;
+  CFcov<Object?> x75;
+  CFcov<FutureOr<dynamic>> x76;
+  CFcov<FutureOr<void>> x77;
+  CFcov<FutureOr<Object?>> x78;
+  CFcov<Fcov<dynamic>> x79;
+  CFcov<Fcov<void>> x80;
+  CFcov<Fcov<Object?>> x81;
+  CFcov<Fcov<FutureOr<dynamic>>> x82;
+  CFcov<Fcov<FutureOr<void>>> x83;
+  CFcov<Fcov<FutureOr<Object?>>> x84;
+  CFcov<Fcov<Fcov<dynamic>>> x85;
+  CFcov<Fcov<Fcov<void>>> x86;
+  CFcov<Fcov<Fcov<Object?>>> x87;
+  CFcov<Fcov<Fcov<FutureOr<dynamic>>>> x88;
+  CFcov<Fcov<Fcov<FutureOr<void>>>> x89;
+  CFcov<Fcov<Fcov<FutureOr<Object?>>>> x90;
+  CFcon<dynamic> x91;
+  CFcon<void> x92;
+  CFcon<Object?> x93;
+  CFcon<FutureOr<dynamic>> x94;
+  CFcon<FutureOr<void>> x95;
+  CFcon<FutureOr<Object?>> x96;
+  CFinv<dynamic> x97;
+  CFinv<void> x98;
+  CFinv<Object?> x99;
+  CFinv<FutureOr<dynamic>> x100;
+  CFinv<FutureOr<void>> x101;
+  CFinv<FutureOr<Object?>> x102;
+  CFunu<dynamic> x103;
+  CFunu<void> x104;
+  CFunu<Object?> x105;
+  CFunu<FutureOr<dynamic>> x106;
+  CFunu<FutureOr<void>> x107;
+  CFunu<FutureOr<Object?>> x108;
+  CcovBound<dynamic> x109;
+  CcovBound<void> x110;
+  CcovBound<Object?> x111;
+  CcovBound<FutureOr<dynamic>> x112;
+  CcovBound<FutureOr<void>> x113;
+  CcovBound<FutureOr<Object?>> x114;
+  CcovCyclicBound<dynamic> x115;
+  CcovCyclicBound<void> x116;
+  CcovCyclicBound<Object?> x117;
+  CcovCyclicBound<FutureOr<dynamic>> x118;
+  CcovCyclicBound<FutureOr<void>> x119;
+  CcovCyclicBound<FutureOr<Object?>> x120;
+  CcovCyclicBound<A<dynamic>> x121;
+  CcovCyclicBound<A<void>> x122;
+  CcovCyclicBound<A<Object?>> x123;
+  CcovCyclicBound<A<FutureOr<dynamic>>> x124;
+  CcovCyclicBound<A<FutureOr<void>>> x125;
+  CcovCyclicBound<A<FutureOr<Object?>>> x126;
+  CcovCyclicBound<A<A<dynamic>>> x127;
+  CcovCyclicBound<A<A<void>>> x128;
+  CcovCyclicBound<A<A<Object?>>> x129;
+  CcovCyclicBound<A<A<FutureOr<dynamic>>>> x130;
+  CcovCyclicBound<A<A<FutureOr<void>>>> x131;
+  CcovCyclicBound<A<A<FutureOr<Object?>>>> x132;
+  CcovCyclicCoBound<dynamic> x133;
+  CcovCyclicCoBound<void> x134;
+  CcovCyclicCoBound<Object?> x135;
+  CcovCyclicCoBound<FutureOr<dynamic>> x136;
+  CcovCyclicCoBound<FutureOr<void>> x137;
+  CcovCyclicCoBound<FutureOr<Object?>> x138;
+  CcovCyclicCoBound<Function(Function(dynamic))> x139;
+  CcovCyclicCoBound<Function(Function(void))> x140;
+  CcovCyclicCoBound<Function(Function(Object?))> x141;
+  CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))> x142;
+  CcovCyclicCoBound<Function(Function(FutureOr<void>))> x143;
+  CcovCyclicCoBound<Function(Function(FutureOr<Object?>))> x144;
+
+  // Super-bounded types in a context.
+  A<FcovBound<dynamic>> x145;
+  A<FcovBound<void>> x146;
+  A<FcovBound<Object?>> x147;
+  A<FcovBound<FutureOr<dynamic>>> x148;
+  A<FcovBound<FutureOr<void>>> x149;
+  A<FcovBound<FutureOr<Object?>>> x150;
+  A<FcovCyclicBound<dynamic>> x151;
+  A<FcovCyclicBound<void>> x152;
+  A<FcovCyclicBound<Object?>> x153;
+  A<FcovCyclicBound<FutureOr<dynamic>>> x154;
+  A<FcovCyclicBound<FutureOr<void>>> x155;
+  A<FcovCyclicBound<FutureOr<Object?>>> x156;
+  A<FcovCyclicBound<A<dynamic>>> x157;
+  A<FcovCyclicBound<A<void>>> x158;
+  A<FcovCyclicBound<A<Object?>>> x159;
+  A<FcovCyclicBound<A<FutureOr<dynamic>>>> x160;
+  A<FcovCyclicBound<A<FutureOr<void>>>> x161;
+  A<FcovCyclicBound<A<FutureOr<Object?>>>> x162;
+  A<FcovCyclicBound<A<A<dynamic>>>> x163;
+  A<FcovCyclicBound<A<A<void>>>> x164;
+  A<FcovCyclicBound<A<A<Object?>>>> x165;
+  A<FcovCyclicBound<A<A<FutureOr<dynamic>>>>> x166;
+  A<FcovCyclicBound<A<A<FutureOr<void>>>>> x167;
+  A<FcovCyclicBound<A<A<FutureOr<Object?>>>>> x168;
+  A<FcovCyclicCoBound<dynamic>> x169;
+  A<FcovCyclicCoBound<void>> x170;
+  A<FcovCyclicCoBound<Object?>> x171;
+  A<FcovCyclicCoBound<FutureOr<dynamic>>> x172;
+  A<FcovCyclicCoBound<FutureOr<void>>> x173;
+  A<FcovCyclicCoBound<FutureOr<Object?>>> x174;
+  A<FcovCyclicCoBound<Function(Function(dynamic))>> x175;
+  A<FcovCyclicCoBound<Function(Function(void))>> x176;
+  A<FcovCyclicCoBound<Function(Function(Object?))>> x177;
+  A<FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x178;
+  A<FcovCyclicCoBound<Function(Function(FutureOr<void>))>> x179;
+  A<FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x180;
+  A<CFcov<dynamic>> x181;
+  A<CFcov<void>> x182;
+  A<CFcov<Object?>> x183;
+  A<CFcov<FutureOr<dynamic>>> x184;
+  A<CFcov<FutureOr<void>>> x185;
+  A<CFcov<FutureOr<Object?>>> x186;
+  A<CFcov<Fcov<dynamic>>> x187;
+  A<CFcov<Fcov<void>>> x188;
+  A<CFcov<Fcov<Object?>>> x189;
+  A<CFcov<Fcov<FutureOr<dynamic>>>> x190;
+  A<CFcov<Fcov<FutureOr<void>>>> x191;
+  A<CFcov<Fcov<FutureOr<Object?>>>> x192;
+  A<CFcov<Fcov<Fcov<dynamic>>>> x193;
+  A<CFcov<Fcov<Fcov<void>>>> x194;
+  A<CFcov<Fcov<Fcov<Object?>>>> x195;
+  A<CFcov<Fcov<Fcov<FutureOr<dynamic>>>>> x196;
+  A<CFcov<Fcov<Fcov<FutureOr<void>>>>> x197;
+  A<CFcov<Fcov<Fcov<FutureOr<Object?>>>>> x198;
+  A<CFcon<dynamic>> x199;
+  A<CFcon<void>> x200;
+  A<CFcon<Object?>> x201;
+  A<CFcon<FutureOr<dynamic>>> x202;
+  A<CFcon<FutureOr<void>>> x203;
+  A<CFcon<FutureOr<Object?>>> x204;
+  A<CFinv<dynamic>> x205;
+  A<CFinv<void>> x206;
+  A<CFinv<Object?>> x207;
+  A<CFinv<FutureOr<dynamic>>> x208;
+  A<CFinv<FutureOr<void>>> x209;
+  A<CFinv<FutureOr<Object?>>> x210;
+  A<CFunu<dynamic>> x211;
+  A<CFunu<void>> x212;
+  A<CFunu<Object?>> x213;
+  A<CFunu<FutureOr<dynamic>>> x214;
+  A<CFunu<FutureOr<void>>> x215;
+  A<CFunu<FutureOr<Object?>>> x216;
+  A<CcovBound<dynamic>> x217;
+  A<CcovBound<void>> x218;
+  A<CcovBound<Object?>> x219;
+  A<CcovBound<FutureOr<dynamic>>> x220;
+  A<CcovBound<FutureOr<void>>> x221;
+  A<CcovBound<FutureOr<Object?>>> x222;
+  A<CcovCyclicBound<dynamic>> x223;
+  A<CcovCyclicBound<void>> x224;
+  A<CcovCyclicBound<Object?>> x225;
+  A<CcovCyclicBound<FutureOr<dynamic>>> x226;
+  A<CcovCyclicBound<FutureOr<void>>> x227;
+  A<CcovCyclicBound<FutureOr<Object?>>> x228;
+  A<CcovCyclicBound<A<dynamic>>> x229;
+  A<CcovCyclicBound<A<void>>> x230;
+  A<CcovCyclicBound<A<Object?>>> x231;
+  A<CcovCyclicBound<A<FutureOr<dynamic>>>> x232;
+  A<CcovCyclicBound<A<FutureOr<void>>>> x233;
+  A<CcovCyclicBound<A<FutureOr<Object?>>>> x234;
+  A<CcovCyclicBound<A<A<dynamic>>>> x235;
+  A<CcovCyclicBound<A<A<void>>>> x236;
+  A<CcovCyclicBound<A<A<Object?>>>> x237;
+  A<CcovCyclicBound<A<A<FutureOr<dynamic>>>>> x238;
+  A<CcovCyclicBound<A<A<FutureOr<void>>>>> x239;
+  A<CcovCyclicBound<A<A<FutureOr<Object?>>>>> x240;
+  A<CcovCyclicCoBound<dynamic>> x241;
+  A<CcovCyclicCoBound<void>> x242;
+  A<CcovCyclicCoBound<Object?>> x243;
+  A<CcovCyclicCoBound<FutureOr<dynamic>>> x244;
+  A<CcovCyclicCoBound<FutureOr<void>>> x245;
+  A<CcovCyclicCoBound<FutureOr<Object?>>> x246;
+  A<CcovCyclicCoBound<Function(Function(dynamic))>> x247;
+  A<CcovCyclicCoBound<Function(Function(void))>> x248;
+  A<CcovCyclicCoBound<Function(Function(Object?))>> x249;
+  A<CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x250;
+  A<CcovCyclicCoBound<Function(Function(FutureOr<void>))>> x251;
+  A<CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x252;
+  FcovBound<dynamic> Function() x253;
+  FcovBound<void> Function() x254;
+  FcovBound<Object?> Function() x255;
+  FcovBound<FutureOr<dynamic>> Function() x256;
+  FcovBound<FutureOr<void>> Function() x257;
+  FcovBound<FutureOr<Object?>> Function() x258;
+  FcovCyclicBound<dynamic> Function() x259;
+  FcovCyclicBound<void> Function() x260;
+  FcovCyclicBound<Object?> Function() x261;
+  FcovCyclicBound<FutureOr<dynamic>> Function() x262;
+  FcovCyclicBound<FutureOr<void>> Function() x263;
+  FcovCyclicBound<FutureOr<Object?>> Function() x264;
+  FcovCyclicBound<A<dynamic>> Function() x265;
+  FcovCyclicBound<A<void>> Function() x266;
+  FcovCyclicBound<A<Object?>> Function() x267;
+  FcovCyclicBound<A<FutureOr<dynamic>>> Function() x268;
+  FcovCyclicBound<A<FutureOr<void>>> Function() x269;
+  FcovCyclicBound<A<FutureOr<Object?>>> Function() x270;
+  FcovCyclicBound<A<A<dynamic>>> Function() x271;
+  FcovCyclicBound<A<A<void>>> Function() x272;
+  FcovCyclicBound<A<A<Object?>>> Function() x273;
+  FcovCyclicBound<A<A<FutureOr<dynamic>>>> Function() x274;
+  FcovCyclicBound<A<A<FutureOr<void>>>> Function() x275;
+  FcovCyclicBound<A<A<FutureOr<Object?>>>> Function() x276;
+  FcovCyclicCoBound<dynamic> Function() x277;
+  FcovCyclicCoBound<void> Function() x278;
+  FcovCyclicCoBound<Object?> Function() x279;
+  FcovCyclicCoBound<FutureOr<dynamic>> Function() x280;
+  FcovCyclicCoBound<FutureOr<void>> Function() x281;
+  FcovCyclicCoBound<FutureOr<Object?>> Function() x282;
+  FcovCyclicCoBound<Function(Function(dynamic))> Function() x283;
+  FcovCyclicCoBound<Function(Function(void))> Function() x284;
+  FcovCyclicCoBound<Function(Function(Object?))> Function() x285;
+  FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x286;
+  FcovCyclicCoBound<Function(Function(FutureOr<void>))> Function() x287;
+  FcovCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x288;
+  CFcov<dynamic> Function() x289;
+  CFcov<void> Function() x290;
+  CFcov<Object?> Function() x291;
+  CFcov<FutureOr<dynamic>> Function() x292;
+  CFcov<FutureOr<void>> Function() x293;
+  CFcov<FutureOr<Object?>> Function() x294;
+  CFcov<Fcov<dynamic>> Function() x295;
+  CFcov<Fcov<void>> Function() x296;
+  CFcov<Fcov<Object?>> Function() x297;
+  CFcov<Fcov<FutureOr<dynamic>>> Function() x298;
+  CFcov<Fcov<FutureOr<void>>> Function() x299;
+  CFcov<Fcov<FutureOr<Object?>>> Function() x300;
+  CFcov<Fcov<Fcov<dynamic>>> Function() x301;
+  CFcov<Fcov<Fcov<void>>> Function() x302;
+  CFcov<Fcov<Fcov<Object?>>> Function() x303;
+  CFcov<Fcov<Fcov<FutureOr<dynamic>>>> Function() x304;
+  CFcov<Fcov<Fcov<FutureOr<void>>>> Function() x305;
+  CFcov<Fcov<Fcov<FutureOr<Object?>>>> Function() x306;
+  CFcon<dynamic> Function() x307;
+  CFcon<void> Function() x308;
+  CFcon<Object?> Function() x309;
+  CFcon<FutureOr<dynamic>> Function() x310;
+  CFcon<FutureOr<void>> Function() x311;
+  CFcon<FutureOr<Object?>> Function() x312;
+  CFinv<dynamic> Function() x313;
+  CFinv<void> Function() x314;
+  CFinv<Object?> Function() x315;
+  CFinv<FutureOr<dynamic>> Function() x316;
+  CFinv<FutureOr<void>> Function() x317;
+  CFinv<FutureOr<Object?>> Function() x318;
+  CFunu<dynamic> Function() x319;
+  CFunu<void> Function() x320;
+  CFunu<Object?> Function() x321;
+  CFunu<FutureOr<dynamic>> Function() x322;
+  CFunu<FutureOr<void>> Function() x323;
+  CFunu<FutureOr<Object?>> Function() x324;
+  CcovBound<dynamic> Function() x325;
+  CcovBound<void> Function() x326;
+  CcovBound<Object?> Function() x327;
+  CcovBound<FutureOr<dynamic>> Function() x328;
+  CcovBound<FutureOr<void>> Function() x329;
+  CcovBound<FutureOr<Object?>> Function() x330;
+  CcovCyclicBound<dynamic> Function() x331;
+  CcovCyclicBound<void> Function() x332;
+  CcovCyclicBound<Object?> Function() x333;
+  CcovCyclicBound<FutureOr<dynamic>> Function() x334;
+  CcovCyclicBound<FutureOr<void>> Function() x335;
+  CcovCyclicBound<FutureOr<Object?>> Function() x336;
+  CcovCyclicBound<A<dynamic>> Function() x337;
+  CcovCyclicBound<A<void>> Function() x338;
+  CcovCyclicBound<A<Object?>> Function() x339;
+  CcovCyclicBound<A<FutureOr<dynamic>>> Function() x340;
+  CcovCyclicBound<A<FutureOr<void>>> Function() x341;
+  CcovCyclicBound<A<FutureOr<Object?>>> Function() x342;
+  CcovCyclicBound<A<A<dynamic>>> Function() x343;
+  CcovCyclicBound<A<A<void>>> Function() x344;
+  CcovCyclicBound<A<A<Object?>>> Function() x345;
+  CcovCyclicBound<A<A<FutureOr<dynamic>>>> Function() x346;
+  CcovCyclicBound<A<A<FutureOr<void>>>> Function() x347;
+  CcovCyclicBound<A<A<FutureOr<Object?>>>> Function() x348;
+  CcovCyclicCoBound<dynamic> Function() x349;
+  CcovCyclicCoBound<void> Function() x350;
+  CcovCyclicCoBound<Object?> Function() x351;
+  CcovCyclicCoBound<FutureOr<dynamic>> Function() x352;
+  CcovCyclicCoBound<FutureOr<void>> Function() x353;
+  CcovCyclicCoBound<FutureOr<Object?>> Function() x354;
+  CcovCyclicCoBound<Function(Function(dynamic))> Function() x355;
+  CcovCyclicCoBound<Function(Function(void))> Function() x356;
+  CcovCyclicCoBound<Function(Function(Object?))> Function() x357;
+  CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x358;
+  CcovCyclicCoBound<Function(Function(FutureOr<void>))> Function() x359;
+  CcovCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x360;
+  void Function(void Function(FcovBound<dynamic>)) x361;
+  void Function(void Function(FcovBound<void>)) x362;
+  void Function(void Function(FcovBound<Object?>)) x363;
+  void Function(void Function(FcovBound<FutureOr<dynamic>>)) x364;
+  void Function(void Function(FcovBound<FutureOr<void>>)) x365;
+  void Function(void Function(FcovBound<FutureOr<Object?>>)) x366;
+  void Function(void Function(FcovCyclicBound<dynamic>)) x367;
+  void Function(void Function(FcovCyclicBound<void>)) x368;
+  void Function(void Function(FcovCyclicBound<Object?>)) x369;
+  void Function(void Function(FcovCyclicBound<FutureOr<dynamic>>)) x370;
+  void Function(void Function(FcovCyclicBound<FutureOr<void>>)) x371;
+  void Function(void Function(FcovCyclicBound<FutureOr<Object?>>)) x372;
+  void Function(void Function(FcovCyclicBound<A<dynamic>>)) x373;
+  void Function(void Function(FcovCyclicBound<A<void>>)) x374;
+  void Function(void Function(FcovCyclicBound<A<Object?>>)) x375;
+  void Function(void Function(FcovCyclicBound<A<FutureOr<dynamic>>>)) x376;
+  void Function(void Function(FcovCyclicBound<A<FutureOr<void>>>)) x377;
+  void Function(void Function(FcovCyclicBound<A<FutureOr<Object?>>>)) x378;
+  void Function(void Function(FcovCyclicBound<A<A<dynamic>>>)) x379;
+  void Function(void Function(FcovCyclicBound<A<A<void>>>)) x380;
+  void Function(void Function(FcovCyclicBound<A<A<Object?>>>)) x381;
+  void Function(void Function(FcovCyclicBound<A<A<FutureOr<dynamic>>>>)) x382;
+  void Function(void Function(FcovCyclicBound<A<A<FutureOr<void>>>>)) x383;
+  void Function(void Function(FcovCyclicBound<A<A<FutureOr<Object?>>>>)) x384;
+  void Function(void Function(FcovCyclicCoBound<dynamic>)) x385;
+  void Function(void Function(FcovCyclicCoBound<void>)) x386;
+  void Function(void Function(FcovCyclicCoBound<Object?>)) x387;
+  void Function(void Function(FcovCyclicCoBound<FutureOr<dynamic>>)) x388;
+  void Function(void Function(FcovCyclicCoBound<FutureOr<void>>)) x389;
+  void Function(void Function(FcovCyclicCoBound<FutureOr<Object?>>)) x390;
+  void Function(void Function(FcovCyclicCoBound<Function(Function(dynamic))>))
+      x391;
+  void Function(void Function(FcovCyclicCoBound<Function(Function(void))>))
+      x392;
+  void Function(void Function(FcovCyclicCoBound<Function(Function(Object?))>))
+      x393;
+  void Function(
+      void Function(
+          FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x394;
+  void Function(
+          void Function(FcovCyclicCoBound<Function(Function(FutureOr<void>))>))
+      x395;
+  void Function(
+      void Function(
+          FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x396;
+  void Function(void Function(CFcov<dynamic>)) x397;
+  void Function(void Function(CFcov<void>)) x398;
+  void Function(void Function(CFcov<Object?>)) x399;
+  void Function(void Function(CFcov<FutureOr<dynamic>>)) x400;
+  void Function(void Function(CFcov<FutureOr<void>>)) x401;
+  void Function(void Function(CFcov<FutureOr<Object?>>)) x402;
+  void Function(void Function(CFcov<Fcov<dynamic>>)) x403;
+  void Function(void Function(CFcov<Fcov<void>>)) x404;
+  void Function(void Function(CFcov<Fcov<Object?>>)) x405;
+  void Function(void Function(CFcov<Fcov<FutureOr<dynamic>>>)) x406;
+  void Function(void Function(CFcov<Fcov<FutureOr<void>>>)) x407;
+  void Function(void Function(CFcov<Fcov<FutureOr<Object?>>>)) x408;
+  void Function(void Function(CFcov<Fcov<Fcov<dynamic>>>)) x409;
+  void Function(void Function(CFcov<Fcov<Fcov<void>>>)) x410;
+  void Function(void Function(CFcov<Fcov<Fcov<Object?>>>)) x411;
+  void Function(void Function(CFcov<Fcov<Fcov<FutureOr<dynamic>>>>)) x412;
+  void Function(void Function(CFcov<Fcov<Fcov<FutureOr<void>>>>)) x413;
+  void Function(void Function(CFcov<Fcov<Fcov<FutureOr<Object?>>>>)) x414;
+  void Function(void Function(CFcon<dynamic>)) x415;
+  void Function(void Function(CFcon<void>)) x416;
+  void Function(void Function(CFcon<Object?>)) x417;
+  void Function(void Function(CFcon<FutureOr<dynamic>>)) x418;
+  void Function(void Function(CFcon<FutureOr<void>>)) x419;
+  void Function(void Function(CFcon<FutureOr<Object?>>)) x420;
+  void Function(void Function(CFinv<dynamic>)) x421;
+  void Function(void Function(CFinv<void>)) x422;
+  void Function(void Function(CFinv<Object?>)) x423;
+  void Function(void Function(CFinv<FutureOr<dynamic>>)) x424;
+  void Function(void Function(CFinv<FutureOr<void>>)) x425;
+  void Function(void Function(CFinv<FutureOr<Object?>>)) x426;
+  void Function(void Function(CFunu<dynamic>)) x427;
+  void Function(void Function(CFunu<void>)) x428;
+  void Function(void Function(CFunu<Object?>)) x429;
+  void Function(void Function(CFunu<FutureOr<dynamic>>)) x430;
+  void Function(void Function(CFunu<FutureOr<void>>)) x431;
+  void Function(void Function(CFunu<FutureOr<Object?>>)) x432;
+  void Function(void Function(CcovBound<dynamic>)) x433;
+  void Function(void Function(CcovBound<void>)) x434;
+  void Function(void Function(CcovBound<Object?>)) x435;
+  void Function(void Function(CcovBound<FutureOr<dynamic>>)) x436;
+  void Function(void Function(CcovBound<FutureOr<void>>)) x437;
+  void Function(void Function(CcovBound<FutureOr<Object?>>)) x438;
+  void Function(void Function(CcovCyclicBound<dynamic>)) x439;
+  void Function(void Function(CcovCyclicBound<void>)) x440;
+  void Function(void Function(CcovCyclicBound<Object?>)) x441;
+  void Function(void Function(CcovCyclicBound<FutureOr<dynamic>>)) x442;
+  void Function(void Function(CcovCyclicBound<FutureOr<void>>)) x443;
+  void Function(void Function(CcovCyclicBound<FutureOr<Object?>>)) x444;
+  void Function(void Function(CcovCyclicBound<A<dynamic>>)) x445;
+  void Function(void Function(CcovCyclicBound<A<void>>)) x446;
+  void Function(void Function(CcovCyclicBound<A<Object?>>)) x447;
+  void Function(void Function(CcovCyclicBound<A<FutureOr<dynamic>>>)) x448;
+  void Function(void Function(CcovCyclicBound<A<FutureOr<void>>>)) x449;
+  void Function(void Function(CcovCyclicBound<A<FutureOr<Object?>>>)) x450;
+  void Function(void Function(CcovCyclicBound<A<A<dynamic>>>)) x451;
+  void Function(void Function(CcovCyclicBound<A<A<void>>>)) x452;
+  void Function(void Function(CcovCyclicBound<A<A<Object?>>>)) x453;
+  void Function(void Function(CcovCyclicBound<A<A<FutureOr<dynamic>>>>)) x454;
+  void Function(void Function(CcovCyclicBound<A<A<FutureOr<void>>>>)) x455;
+  void Function(void Function(CcovCyclicBound<A<A<FutureOr<Object?>>>>)) x456;
+  void Function(void Function(CcovCyclicCoBound<dynamic>)) x457;
+  void Function(void Function(CcovCyclicCoBound<void>)) x458;
+  void Function(void Function(CcovCyclicCoBound<Object?>)) x459;
+  void Function(void Function(CcovCyclicCoBound<FutureOr<dynamic>>)) x460;
+  void Function(void Function(CcovCyclicCoBound<FutureOr<void>>)) x461;
+  void Function(void Function(CcovCyclicCoBound<FutureOr<Object?>>)) x462;
+  void Function(void Function(CcovCyclicCoBound<Function(Function(dynamic))>))
+      x463;
+  void Function(void Function(CcovCyclicCoBound<Function(Function(void))>))
+      x464;
+  void Function(void Function(CcovCyclicCoBound<Function(Function(Object?))>))
+      x465;
+  void Function(
+      void Function(
+          CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x466;
+  void Function(
+          void Function(CcovCyclicCoBound<Function(Function(FutureOr<void>))>))
+      x467;
+  void Function(
+      void Function(
+          CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x468;
+  void Function(FcovBound<dynamic>) x469;
+  void Function(FcovBound<void>) x470;
+  void Function(FcovBound<Object?>) x471;
+  void Function(FcovBound<FutureOr<dynamic>>) x472;
+  void Function(FcovBound<FutureOr<void>>) x473;
+  void Function(FcovBound<FutureOr<Object?>>) x474;
+  void Function(FcovCyclicBound<dynamic>) x475;
+  void Function(FcovCyclicBound<void>) x476;
+  void Function(FcovCyclicBound<Object?>) x477;
+  void Function(FcovCyclicBound<FutureOr<dynamic>>) x478;
+  void Function(FcovCyclicBound<FutureOr<void>>) x479;
+  void Function(FcovCyclicBound<FutureOr<Object?>>) x480;
+  void Function(FcovCyclicBound<A<dynamic>>) x481;
+  void Function(FcovCyclicBound<A<void>>) x482;
+  void Function(FcovCyclicBound<A<Object?>>) x483;
+  void Function(FcovCyclicBound<A<FutureOr<dynamic>>>) x484;
+  void Function(FcovCyclicBound<A<FutureOr<void>>>) x485;
+  void Function(FcovCyclicBound<A<FutureOr<Object?>>>) x486;
+  void Function(FcovCyclicBound<A<A<dynamic>>>) x487;
+  void Function(FcovCyclicBound<A<A<void>>>) x488;
+  void Function(FcovCyclicBound<A<A<Object?>>>) x489;
+  void Function(FcovCyclicBound<A<A<FutureOr<dynamic>>>>) x490;
+  void Function(FcovCyclicBound<A<A<FutureOr<void>>>>) x491;
+  void Function(FcovCyclicBound<A<A<FutureOr<Object?>>>>) x492;
+  void Function(FcovCyclicCoBound<dynamic>) x493;
+  void Function(FcovCyclicCoBound<void>) x494;
+  void Function(FcovCyclicCoBound<Object?>) x495;
+  void Function(FcovCyclicCoBound<FutureOr<dynamic>>) x496;
+  void Function(FcovCyclicCoBound<FutureOr<void>>) x497;
+  void Function(FcovCyclicCoBound<FutureOr<Object?>>) x498;
+  void Function(FcovCyclicCoBound<Function(Function(dynamic))>) x499;
+  void Function(FcovCyclicCoBound<Function(Function(void))>) x500;
+  void Function(FcovCyclicCoBound<Function(Function(Object?))>) x501;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x502;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<void>))>) x503;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>) x504;
+  void Function(CFcov<dynamic>) x505;
+  void Function(CFcov<void>) x506;
+  void Function(CFcov<Object?>) x507;
+  void Function(CFcov<FutureOr<dynamic>>) x508;
+  void Function(CFcov<FutureOr<void>>) x509;
+  void Function(CFcov<FutureOr<Object?>>) x510;
+  void Function(CFcov<Fcov<dynamic>>) x511;
+  void Function(CFcov<Fcov<void>>) x512;
+  void Function(CFcov<Fcov<Object?>>) x513;
+  void Function(CFcov<Fcov<FutureOr<dynamic>>>) x514;
+  void Function(CFcov<Fcov<FutureOr<void>>>) x515;
+  void Function(CFcov<Fcov<FutureOr<Object?>>>) x516;
+  void Function(CFcov<Fcov<Fcov<dynamic>>>) x517;
+  void Function(CFcov<Fcov<Fcov<void>>>) x518;
+  void Function(CFcov<Fcov<Fcov<Object?>>>) x519;
+  void Function(CFcov<Fcov<Fcov<FutureOr<dynamic>>>>) x520;
+  void Function(CFcov<Fcov<Fcov<FutureOr<void>>>>) x521;
+  void Function(CFcov<Fcov<Fcov<FutureOr<Object?>>>>) x522;
+  void Function(CFcon<dynamic>) x523;
+  void Function(CFcon<void>) x524;
+  void Function(CFcon<Object?>) x525;
+  void Function(CFcon<FutureOr<dynamic>>) x526;
+  void Function(CFcon<FutureOr<void>>) x527;
+  void Function(CFcon<FutureOr<Object?>>) x528;
+  void Function(CFinv<dynamic>) x529;
+  void Function(CFinv<void>) x530;
+  void Function(CFinv<Object?>) x531;
+  void Function(CFinv<FutureOr<dynamic>>) x532;
+  void Function(CFinv<FutureOr<void>>) x533;
+  void Function(CFinv<FutureOr<Object?>>) x534;
+  void Function(CFunu<dynamic>) x535;
+  void Function(CFunu<void>) x536;
+  void Function(CFunu<Object?>) x537;
+  void Function(CFunu<FutureOr<dynamic>>) x538;
+  void Function(CFunu<FutureOr<void>>) x539;
+  void Function(CFunu<FutureOr<Object?>>) x540;
+  void Function(CcovBound<dynamic>) x541;
+  void Function(CcovBound<void>) x542;
+  void Function(CcovBound<Object?>) x543;
+  void Function(CcovBound<FutureOr<dynamic>>) x544;
+  void Function(CcovBound<FutureOr<void>>) x545;
+  void Function(CcovBound<FutureOr<Object?>>) x546;
+  void Function(CcovCyclicBound<dynamic>) x547;
+  void Function(CcovCyclicBound<void>) x548;
+  void Function(CcovCyclicBound<Object?>) x549;
+  void Function(CcovCyclicBound<FutureOr<dynamic>>) x550;
+  void Function(CcovCyclicBound<FutureOr<void>>) x551;
+  void Function(CcovCyclicBound<FutureOr<Object?>>) x552;
+  void Function(CcovCyclicBound<A<dynamic>>) x553;
+  void Function(CcovCyclicBound<A<void>>) x554;
+  void Function(CcovCyclicBound<A<Object?>>) x555;
+  void Function(CcovCyclicBound<A<FutureOr<dynamic>>>) x556;
+  void Function(CcovCyclicBound<A<FutureOr<void>>>) x557;
+  void Function(CcovCyclicBound<A<FutureOr<Object?>>>) x558;
+  void Function(CcovCyclicBound<A<A<dynamic>>>) x559;
+  void Function(CcovCyclicBound<A<A<void>>>) x560;
+  void Function(CcovCyclicBound<A<A<Object?>>>) x561;
+  void Function(CcovCyclicBound<A<A<FutureOr<dynamic>>>>) x562;
+  void Function(CcovCyclicBound<A<A<FutureOr<void>>>>) x563;
+  void Function(CcovCyclicBound<A<A<FutureOr<Object?>>>>) x564;
+  void Function(CcovCyclicCoBound<dynamic>) x565;
+  void Function(CcovCyclicCoBound<void>) x566;
+  void Function(CcovCyclicCoBound<Object?>) x567;
+  void Function(CcovCyclicCoBound<FutureOr<dynamic>>) x568;
+  void Function(CcovCyclicCoBound<FutureOr<void>>) x569;
+  void Function(CcovCyclicCoBound<FutureOr<Object?>>) x570;
+  void Function(CcovCyclicCoBound<Function(Function(dynamic))>) x571;
+  void Function(CcovCyclicCoBound<Function(Function(void))>) x572;
+  void Function(CcovCyclicCoBound<Function(Function(Object?))>) x573;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x574;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<void>))>) x575;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>) x576;
+  void Function(FcovBound<dynamic>) Function() x577;
+  void Function(FcovBound<void>) Function() x578;
+  void Function(FcovBound<Object?>) Function() x579;
+  void Function(FcovBound<FutureOr<dynamic>>) Function() x580;
+  void Function(FcovBound<FutureOr<void>>) Function() x581;
+  void Function(FcovBound<FutureOr<Object?>>) Function() x582;
+  void Function(FcovCyclicBound<dynamic>) Function() x583;
+  void Function(FcovCyclicBound<void>) Function() x584;
+  void Function(FcovCyclicBound<Object?>) Function() x585;
+  void Function(FcovCyclicBound<FutureOr<dynamic>>) Function() x586;
+  void Function(FcovCyclicBound<FutureOr<void>>) Function() x587;
+  void Function(FcovCyclicBound<FutureOr<Object?>>) Function() x588;
+  void Function(FcovCyclicBound<A<dynamic>>) Function() x589;
+  void Function(FcovCyclicBound<A<void>>) Function() x590;
+  void Function(FcovCyclicBound<A<Object?>>) Function() x591;
+  void Function(FcovCyclicBound<A<FutureOr<dynamic>>>) Function() x592;
+  void Function(FcovCyclicBound<A<FutureOr<void>>>) Function() x593;
+  void Function(FcovCyclicBound<A<FutureOr<Object?>>>) Function() x594;
+  void Function(FcovCyclicBound<A<A<dynamic>>>) Function() x595;
+  void Function(FcovCyclicBound<A<A<void>>>) Function() x596;
+  void Function(FcovCyclicBound<A<A<Object?>>>) Function() x597;
+  void Function(FcovCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x598;
+  void Function(FcovCyclicBound<A<A<FutureOr<void>>>>) Function() x599;
+  void Function(FcovCyclicBound<A<A<FutureOr<Object?>>>>) Function() x600;
+  void Function(FcovCyclicCoBound<dynamic>) Function() x601;
+  void Function(FcovCyclicCoBound<void>) Function() x602;
+  void Function(FcovCyclicCoBound<Object?>) Function() x603;
+  void Function(FcovCyclicCoBound<FutureOr<dynamic>>) Function() x604;
+  void Function(FcovCyclicCoBound<FutureOr<void>>) Function() x605;
+  void Function(FcovCyclicCoBound<FutureOr<Object?>>) Function() x606;
+  void Function(FcovCyclicCoBound<Function(Function(dynamic))>) Function() x607;
+  void Function(FcovCyclicCoBound<Function(Function(void))>) Function() x608;
+  void Function(FcovCyclicCoBound<Function(Function(Object?))>) Function() x609;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
+      Function() x610;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<void>))>)
+      Function() x611;
+  void Function(FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>)
+      Function() x612;
+  void Function(CFcov<dynamic>) Function() x613;
+  void Function(CFcov<void>) Function() x614;
+  void Function(CFcov<Object?>) Function() x615;
+  void Function(CFcov<FutureOr<dynamic>>) Function() x616;
+  void Function(CFcov<FutureOr<void>>) Function() x617;
+  void Function(CFcov<FutureOr<Object?>>) Function() x618;
+  void Function(CFcov<Fcov<dynamic>>) Function() x619;
+  void Function(CFcov<Fcov<void>>) Function() x620;
+  void Function(CFcov<Fcov<Object?>>) Function() x621;
+  void Function(CFcov<Fcov<FutureOr<dynamic>>>) Function() x622;
+  void Function(CFcov<Fcov<FutureOr<void>>>) Function() x623;
+  void Function(CFcov<Fcov<FutureOr<Object?>>>) Function() x624;
+  void Function(CFcov<Fcov<Fcov<dynamic>>>) Function() x625;
+  void Function(CFcov<Fcov<Fcov<void>>>) Function() x626;
+  void Function(CFcov<Fcov<Fcov<Object?>>>) Function() x627;
+  void Function(CFcov<Fcov<Fcov<FutureOr<dynamic>>>>) Function() x628;
+  void Function(CFcov<Fcov<Fcov<FutureOr<void>>>>) Function() x629;
+  void Function(CFcov<Fcov<Fcov<FutureOr<Object?>>>>) Function() x630;
+  void Function(CFcon<dynamic>) Function() x631;
+  void Function(CFcon<void>) Function() x632;
+  void Function(CFcon<Object?>) Function() x633;
+  void Function(CFcon<FutureOr<dynamic>>) Function() x634;
+  void Function(CFcon<FutureOr<void>>) Function() x635;
+  void Function(CFcon<FutureOr<Object?>>) Function() x636;
+  void Function(CFinv<dynamic>) Function() x637;
+  void Function(CFinv<void>) Function() x638;
+  void Function(CFinv<Object?>) Function() x639;
+  void Function(CFinv<FutureOr<dynamic>>) Function() x640;
+  void Function(CFinv<FutureOr<void>>) Function() x641;
+  void Function(CFinv<FutureOr<Object?>>) Function() x642;
+  void Function(CFunu<dynamic>) Function() x643;
+  void Function(CFunu<void>) Function() x644;
+  void Function(CFunu<Object?>) Function() x645;
+  void Function(CFunu<FutureOr<dynamic>>) Function() x646;
+  void Function(CFunu<FutureOr<void>>) Function() x647;
+  void Function(CFunu<FutureOr<Object?>>) Function() x648;
+  void Function(CcovBound<dynamic>) Function() x649;
+  void Function(CcovBound<void>) Function() x650;
+  void Function(CcovBound<Object?>) Function() x651;
+  void Function(CcovBound<FutureOr<dynamic>>) Function() x652;
+  void Function(CcovBound<FutureOr<void>>) Function() x653;
+  void Function(CcovBound<FutureOr<Object?>>) Function() x654;
+  void Function(CcovCyclicBound<dynamic>) Function() x655;
+  void Function(CcovCyclicBound<void>) Function() x656;
+  void Function(CcovCyclicBound<Object?>) Function() x657;
+  void Function(CcovCyclicBound<FutureOr<dynamic>>) Function() x658;
+  void Function(CcovCyclicBound<FutureOr<void>>) Function() x659;
+  void Function(CcovCyclicBound<FutureOr<Object?>>) Function() x660;
+  void Function(CcovCyclicBound<A<dynamic>>) Function() x661;
+  void Function(CcovCyclicBound<A<void>>) Function() x662;
+  void Function(CcovCyclicBound<A<Object?>>) Function() x663;
+  void Function(CcovCyclicBound<A<FutureOr<dynamic>>>) Function() x664;
+  void Function(CcovCyclicBound<A<FutureOr<void>>>) Function() x665;
+  void Function(CcovCyclicBound<A<FutureOr<Object?>>>) Function() x666;
+  void Function(CcovCyclicBound<A<A<dynamic>>>) Function() x667;
+  void Function(CcovCyclicBound<A<A<void>>>) Function() x668;
+  void Function(CcovCyclicBound<A<A<Object?>>>) Function() x669;
+  void Function(CcovCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x670;
+  void Function(CcovCyclicBound<A<A<FutureOr<void>>>>) Function() x671;
+  void Function(CcovCyclicBound<A<A<FutureOr<Object?>>>>) Function() x672;
+  void Function(CcovCyclicCoBound<dynamic>) Function() x673;
+  void Function(CcovCyclicCoBound<void>) Function() x674;
+  void Function(CcovCyclicCoBound<Object?>) Function() x675;
+  void Function(CcovCyclicCoBound<FutureOr<dynamic>>) Function() x676;
+  void Function(CcovCyclicCoBound<FutureOr<void>>) Function() x677;
+  void Function(CcovCyclicCoBound<FutureOr<Object?>>) Function() x678;
+  void Function(CcovCyclicCoBound<Function(Function(dynamic))>) Function() x679;
+  void Function(CcovCyclicCoBound<Function(Function(void))>) Function() x680;
+  void Function(CcovCyclicCoBound<Function(Function(Object?))>) Function() x681;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
+      Function() x682;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<void>))>)
+      Function() x683;
+  void Function(CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>)
+      Function() x684;
+  void Function<Y extends FcovBound<dynamic>>() x685;
+  void Function<Y extends FcovBound<void>>() x686;
+  void Function<Y extends FcovBound<Object?>>() x687;
+  void Function<Y extends FcovBound<FutureOr<dynamic>>>() x688;
+  void Function<Y extends FcovBound<FutureOr<void>>>() x689;
+  void Function<Y extends FcovBound<FutureOr<Object?>>>() x690;
+  void Function<Y extends FcovCyclicBound<dynamic>>() x691;
+  void Function<Y extends FcovCyclicBound<void>>() x692;
+  void Function<Y extends FcovCyclicBound<Object?>>() x693;
+  void Function<Y extends FcovCyclicBound<FutureOr<dynamic>>>() x694;
+  void Function<Y extends FcovCyclicBound<FutureOr<void>>>() x695;
+  void Function<Y extends FcovCyclicBound<FutureOr<Object?>>>() x696;
+  void Function<Y extends FcovCyclicBound<A<dynamic>>>() x697;
+  void Function<Y extends FcovCyclicBound<A<void>>>() x698;
+  void Function<Y extends FcovCyclicBound<A<Object?>>>() x699;
+  void Function<Y extends FcovCyclicBound<A<FutureOr<dynamic>>>>() x700;
+  void Function<Y extends FcovCyclicBound<A<FutureOr<void>>>>() x701;
+  void Function<Y extends FcovCyclicBound<A<FutureOr<Object?>>>>() x702;
+  void Function<Y extends FcovCyclicBound<A<A<dynamic>>>>() x703;
+  void Function<Y extends FcovCyclicBound<A<A<void>>>>() x704;
+  void Function<Y extends FcovCyclicBound<A<A<Object?>>>>() x705;
+  void Function<Y extends FcovCyclicBound<A<A<FutureOr<dynamic>>>>>() x706;
+  void Function<Y extends FcovCyclicBound<A<A<FutureOr<void>>>>>() x707;
+  void Function<Y extends FcovCyclicBound<A<A<FutureOr<Object?>>>>>() x708;
+  void Function<Y extends FcovCyclicCoBound<dynamic>>() x709;
+  void Function<Y extends FcovCyclicCoBound<void>>() x710;
+  void Function<Y extends FcovCyclicCoBound<Object?>>() x711;
+  void Function<Y extends FcovCyclicCoBound<FutureOr<dynamic>>>() x712;
+  void Function<Y extends FcovCyclicCoBound<FutureOr<void>>>() x713;
+  void Function<Y extends FcovCyclicCoBound<FutureOr<Object?>>>() x714;
+  void Function<Y extends FcovCyclicCoBound<Function(Function(dynamic))>>()
+      x715;
+  void Function<Y extends FcovCyclicCoBound<Function(Function(void))>>() x716;
+  void Function<Y extends FcovCyclicCoBound<Function(Function(Object?))>>()
+      x717;
+  void Function<
+          Y extends FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
+      x718;
+  void Function<
+      Y extends FcovCyclicCoBound<Function(Function(FutureOr<void>))>>() x719;
+  void Function<
+          Y extends FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
+      x720;
+  void Function<Y extends CFcov<dynamic>>() x721;
+  void Function<Y extends CFcov<void>>() x722;
+  void Function<Y extends CFcov<Object?>>() x723;
+  void Function<Y extends CFcov<FutureOr<dynamic>>>() x724;
+  void Function<Y extends CFcov<FutureOr<void>>>() x725;
+  void Function<Y extends CFcov<FutureOr<Object?>>>() x726;
+  void Function<Y extends CFcov<Fcov<dynamic>>>() x727;
+  void Function<Y extends CFcov<Fcov<void>>>() x728;
+  void Function<Y extends CFcov<Fcov<Object?>>>() x729;
+  void Function<Y extends CFcov<Fcov<FutureOr<dynamic>>>>() x730;
+  void Function<Y extends CFcov<Fcov<FutureOr<void>>>>() x731;
+  void Function<Y extends CFcov<Fcov<FutureOr<Object?>>>>() x732;
+  void Function<Y extends CFcov<Fcov<Fcov<dynamic>>>>() x733;
+  void Function<Y extends CFcov<Fcov<Fcov<void>>>>() x734;
+  void Function<Y extends CFcov<Fcov<Fcov<Object?>>>>() x735;
+  void Function<Y extends CFcov<Fcov<Fcov<FutureOr<dynamic>>>>>() x736;
+  void Function<Y extends CFcov<Fcov<Fcov<FutureOr<void>>>>>() x737;
+  void Function<Y extends CFcov<Fcov<Fcov<FutureOr<Object?>>>>>() x738;
+  void Function<Y extends CFcon<dynamic>>() x739;
+  void Function<Y extends CFcon<void>>() x740;
+  void Function<Y extends CFcon<Object?>>() x741;
+  void Function<Y extends CFcon<FutureOr<dynamic>>>() x742;
+  void Function<Y extends CFcon<FutureOr<void>>>() x743;
+  void Function<Y extends CFcon<FutureOr<Object?>>>() x744;
+  void Function<Y extends CFinv<dynamic>>() x745;
+  void Function<Y extends CFinv<void>>() x746;
+  void Function<Y extends CFinv<Object?>>() x747;
+  void Function<Y extends CFinv<FutureOr<dynamic>>>() x748;
+  void Function<Y extends CFinv<FutureOr<void>>>() x749;
+  void Function<Y extends CFinv<FutureOr<Object?>>>() x750;
+  void Function<Y extends CFunu<dynamic>>() x751;
+  void Function<Y extends CFunu<void>>() x752;
+  void Function<Y extends CFunu<Object?>>() x753;
+  void Function<Y extends CFunu<FutureOr<dynamic>>>() x754;
+  void Function<Y extends CFunu<FutureOr<void>>>() x755;
+  void Function<Y extends CFunu<FutureOr<Object?>>>() x756;
+  void Function<Y extends CcovBound<dynamic>>() x757;
+  void Function<Y extends CcovBound<void>>() x758;
+  void Function<Y extends CcovBound<Object?>>() x759;
+  void Function<Y extends CcovBound<FutureOr<dynamic>>>() x760;
+  void Function<Y extends CcovBound<FutureOr<void>>>() x761;
+  void Function<Y extends CcovBound<FutureOr<Object?>>>() x762;
+  void Function<Y extends CcovCyclicBound<dynamic>>() x763;
+  void Function<Y extends CcovCyclicBound<void>>() x764;
+  void Function<Y extends CcovCyclicBound<Object?>>() x765;
+  void Function<Y extends CcovCyclicBound<FutureOr<dynamic>>>() x766;
+  void Function<Y extends CcovCyclicBound<FutureOr<void>>>() x767;
+  void Function<Y extends CcovCyclicBound<FutureOr<Object?>>>() x768;
+  void Function<Y extends CcovCyclicBound<A<dynamic>>>() x769;
+  void Function<Y extends CcovCyclicBound<A<void>>>() x770;
+  void Function<Y extends CcovCyclicBound<A<Object?>>>() x771;
+  void Function<Y extends CcovCyclicBound<A<FutureOr<dynamic>>>>() x772;
+  void Function<Y extends CcovCyclicBound<A<FutureOr<void>>>>() x773;
+  void Function<Y extends CcovCyclicBound<A<FutureOr<Object?>>>>() x774;
+  void Function<Y extends CcovCyclicBound<A<A<dynamic>>>>() x775;
+  void Function<Y extends CcovCyclicBound<A<A<void>>>>() x776;
+  void Function<Y extends CcovCyclicBound<A<A<Object?>>>>() x777;
+  void Function<Y extends CcovCyclicBound<A<A<FutureOr<dynamic>>>>>() x778;
+  void Function<Y extends CcovCyclicBound<A<A<FutureOr<void>>>>>() x779;
+  void Function<Y extends CcovCyclicBound<A<A<FutureOr<Object?>>>>>() x780;
+  void Function<Y extends CcovCyclicCoBound<dynamic>>() x781;
+  void Function<Y extends CcovCyclicCoBound<void>>() x782;
+  void Function<Y extends CcovCyclicCoBound<Object?>>() x783;
+  void Function<Y extends CcovCyclicCoBound<FutureOr<dynamic>>>() x784;
+  void Function<Y extends CcovCyclicCoBound<FutureOr<void>>>() x785;
+  void Function<Y extends CcovCyclicCoBound<FutureOr<Object?>>>() x786;
+  void Function<Y extends CcovCyclicCoBound<Function(Function(dynamic))>>()
+      x787;
+  void Function<Y extends CcovCyclicCoBound<Function(Function(void))>>() x788;
+  void Function<Y extends CcovCyclicCoBound<Function(Function(Object?))>>()
+      x789;
+  void Function<
+          Y extends CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
+      x790;
+  void Function<
+      Y extends CcovCyclicCoBound<Function(Function(FutureOr<void>))>>() x791;
+  void Function<
+          Y extends CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
+      x792;
+  void Function<Y extends A<FcovBound<dynamic>>>() x793;
+  void Function<Y extends A<FcovBound<void>>>() x794;
+  void Function<Y extends A<FcovBound<Object?>>>() x795;
+  void Function<Y extends A<FcovBound<FutureOr<dynamic>>>>() x796;
+  void Function<Y extends A<FcovBound<FutureOr<void>>>>() x797;
+  void Function<Y extends A<FcovBound<FutureOr<Object?>>>>() x798;
+  void Function<Y extends A<FcovCyclicBound<dynamic>>>() x799;
+  void Function<Y extends A<FcovCyclicBound<void>>>() x800;
+  void Function<Y extends A<FcovCyclicBound<Object?>>>() x801;
+  void Function<Y extends A<FcovCyclicBound<FutureOr<dynamic>>>>() x802;
+  void Function<Y extends A<FcovCyclicBound<FutureOr<void>>>>() x803;
+  void Function<Y extends A<FcovCyclicBound<FutureOr<Object?>>>>() x804;
+  void Function<Y extends A<FcovCyclicBound<A<dynamic>>>>() x805;
+  void Function<Y extends A<FcovCyclicBound<A<void>>>>() x806;
+  void Function<Y extends A<FcovCyclicBound<A<Object?>>>>() x807;
+  void Function<Y extends A<FcovCyclicBound<A<FutureOr<dynamic>>>>>() x808;
+  void Function<Y extends A<FcovCyclicBound<A<FutureOr<void>>>>>() x809;
+  void Function<Y extends A<FcovCyclicBound<A<FutureOr<Object?>>>>>() x810;
+  void Function<Y extends A<FcovCyclicBound<A<A<dynamic>>>>>() x811;
+  void Function<Y extends A<FcovCyclicBound<A<A<void>>>>>() x812;
+  void Function<Y extends A<FcovCyclicBound<A<A<Object?>>>>>() x813;
+  void Function<Y extends A<FcovCyclicBound<A<A<FutureOr<dynamic>>>>>>() x814;
+  void Function<Y extends A<FcovCyclicBound<A<A<FutureOr<void>>>>>>() x815;
+  void Function<Y extends A<FcovCyclicBound<A<A<FutureOr<Object?>>>>>>() x816;
+  void Function<Y extends A<FcovCyclicCoBound<dynamic>>>() x817;
+  void Function<Y extends A<FcovCyclicCoBound<void>>>() x818;
+  void Function<Y extends A<FcovCyclicCoBound<Object?>>>() x819;
+  void Function<Y extends A<FcovCyclicCoBound<FutureOr<dynamic>>>>() x820;
+  void Function<Y extends A<FcovCyclicCoBound<FutureOr<void>>>>() x821;
+  void Function<Y extends A<FcovCyclicCoBound<FutureOr<Object?>>>>() x822;
+  void Function<Y extends A<FcovCyclicCoBound<Function(Function(dynamic))>>>()
+      x823;
+  void Function<Y extends A<FcovCyclicCoBound<Function(Function(void))>>>()
+      x824;
+  void Function<Y extends A<FcovCyclicCoBound<Function(Function(Object?))>>>()
+      x825;
+  void Function<
+      Y extends A<
+          FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x826;
+  void Function<
+          Y extends A<FcovCyclicCoBound<Function(Function(FutureOr<void>))>>>()
+      x827;
+  void Function<
+      Y extends A<
+          FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x828;
+  void Function<Y extends A<CFcov<dynamic>>>() x829;
+  void Function<Y extends A<CFcov<void>>>() x830;
+  void Function<Y extends A<CFcov<Object?>>>() x831;
+  void Function<Y extends A<CFcov<FutureOr<dynamic>>>>() x832;
+  void Function<Y extends A<CFcov<FutureOr<void>>>>() x833;
+  void Function<Y extends A<CFcov<FutureOr<Object?>>>>() x834;
+  void Function<Y extends A<CFcov<Fcov<dynamic>>>>() x835;
+  void Function<Y extends A<CFcov<Fcov<void>>>>() x836;
+  void Function<Y extends A<CFcov<Fcov<Object?>>>>() x837;
+  void Function<Y extends A<CFcov<Fcov<FutureOr<dynamic>>>>>() x838;
+  void Function<Y extends A<CFcov<Fcov<FutureOr<void>>>>>() x839;
+  void Function<Y extends A<CFcov<Fcov<FutureOr<Object?>>>>>() x840;
+  void Function<Y extends A<CFcov<Fcov<Fcov<dynamic>>>>>() x841;
+  void Function<Y extends A<CFcov<Fcov<Fcov<void>>>>>() x842;
+  void Function<Y extends A<CFcov<Fcov<Fcov<Object?>>>>>() x843;
+  void Function<Y extends A<CFcov<Fcov<Fcov<FutureOr<dynamic>>>>>>() x844;
+  void Function<Y extends A<CFcov<Fcov<Fcov<FutureOr<void>>>>>>() x845;
+  void Function<Y extends A<CFcov<Fcov<Fcov<FutureOr<Object?>>>>>>() x846;
+  void Function<Y extends A<CFcon<dynamic>>>() x847;
+  void Function<Y extends A<CFcon<void>>>() x848;
+  void Function<Y extends A<CFcon<Object?>>>() x849;
+  void Function<Y extends A<CFcon<FutureOr<dynamic>>>>() x850;
+  void Function<Y extends A<CFcon<FutureOr<void>>>>() x851;
+  void Function<Y extends A<CFcon<FutureOr<Object?>>>>() x852;
+  void Function<Y extends A<CFinv<dynamic>>>() x853;
+  void Function<Y extends A<CFinv<void>>>() x854;
+  void Function<Y extends A<CFinv<Object?>>>() x855;
+  void Function<Y extends A<CFinv<FutureOr<dynamic>>>>() x856;
+  void Function<Y extends A<CFinv<FutureOr<void>>>>() x857;
+  void Function<Y extends A<CFinv<FutureOr<Object?>>>>() x858;
+  void Function<Y extends A<CFunu<dynamic>>>() x859;
+  void Function<Y extends A<CFunu<void>>>() x860;
+  void Function<Y extends A<CFunu<Object?>>>() x861;
+  void Function<Y extends A<CFunu<FutureOr<dynamic>>>>() x862;
+  void Function<Y extends A<CFunu<FutureOr<void>>>>() x863;
+  void Function<Y extends A<CFunu<FutureOr<Object?>>>>() x864;
+  void Function<Y extends A<CcovBound<dynamic>>>() x865;
+  void Function<Y extends A<CcovBound<void>>>() x866;
+  void Function<Y extends A<CcovBound<Object?>>>() x867;
+  void Function<Y extends A<CcovBound<FutureOr<dynamic>>>>() x868;
+  void Function<Y extends A<CcovBound<FutureOr<void>>>>() x869;
+  void Function<Y extends A<CcovBound<FutureOr<Object?>>>>() x870;
+  void Function<Y extends A<CcovCyclicBound<dynamic>>>() x871;
+  void Function<Y extends A<CcovCyclicBound<void>>>() x872;
+  void Function<Y extends A<CcovCyclicBound<Object?>>>() x873;
+  void Function<Y extends A<CcovCyclicBound<FutureOr<dynamic>>>>() x874;
+  void Function<Y extends A<CcovCyclicBound<FutureOr<void>>>>() x875;
+  void Function<Y extends A<CcovCyclicBound<FutureOr<Object?>>>>() x876;
+  void Function<Y extends A<CcovCyclicBound<A<dynamic>>>>() x877;
+  void Function<Y extends A<CcovCyclicBound<A<void>>>>() x878;
+  void Function<Y extends A<CcovCyclicBound<A<Object?>>>>() x879;
+  void Function<Y extends A<CcovCyclicBound<A<FutureOr<dynamic>>>>>() x880;
+  void Function<Y extends A<CcovCyclicBound<A<FutureOr<void>>>>>() x881;
+  void Function<Y extends A<CcovCyclicBound<A<FutureOr<Object?>>>>>() x882;
+  void Function<Y extends A<CcovCyclicBound<A<A<dynamic>>>>>() x883;
+  void Function<Y extends A<CcovCyclicBound<A<A<void>>>>>() x884;
+  void Function<Y extends A<CcovCyclicBound<A<A<Object?>>>>>() x885;
+  void Function<Y extends A<CcovCyclicBound<A<A<FutureOr<dynamic>>>>>>() x886;
+  void Function<Y extends A<CcovCyclicBound<A<A<FutureOr<void>>>>>>() x887;
+  void Function<Y extends A<CcovCyclicBound<A<A<FutureOr<Object?>>>>>>() x888;
+  void Function<Y extends A<CcovCyclicCoBound<dynamic>>>() x889;
+  void Function<Y extends A<CcovCyclicCoBound<void>>>() x890;
+  void Function<Y extends A<CcovCyclicCoBound<Object?>>>() x891;
+  void Function<Y extends A<CcovCyclicCoBound<FutureOr<dynamic>>>>() x892;
+  void Function<Y extends A<CcovCyclicCoBound<FutureOr<void>>>>() x893;
+  void Function<Y extends A<CcovCyclicCoBound<FutureOr<Object?>>>>() x894;
+  void Function<Y extends A<CcovCyclicCoBound<Function(Function(dynamic))>>>()
+      x895;
+  void Function<Y extends A<CcovCyclicCoBound<Function(Function(void))>>>()
+      x896;
+  void Function<Y extends A<CcovCyclicCoBound<Function(Function(Object?))>>>()
+      x897;
+  void Function<
+      Y extends A<
+          CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x898;
+  void Function<
+          Y extends A<CcovCyclicCoBound<Function(Function(FutureOr<void>))>>>()
+      x899;
+  void Function<
+      Y extends A<
+          CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x900;
+  Finv<FcovBound<dynamic>> x901;
+  Finv<FcovBound<void>> x902;
+  Finv<FcovBound<Object?>> x903;
+  Finv<FcovBound<FutureOr<dynamic>>> x904;
+  Finv<FcovBound<FutureOr<void>>> x905;
+  Finv<FcovBound<FutureOr<Object?>>> x906;
+  Finv<FcovCyclicBound<dynamic>> x907;
+  Finv<FcovCyclicBound<void>> x908;
+  Finv<FcovCyclicBound<Object?>> x909;
+  Finv<FcovCyclicBound<FutureOr<dynamic>>> x910;
+  Finv<FcovCyclicBound<FutureOr<void>>> x911;
+  Finv<FcovCyclicBound<FutureOr<Object?>>> x912;
+  Finv<FcovCyclicBound<A<dynamic>>> x913;
+  Finv<FcovCyclicBound<A<void>>> x914;
+  Finv<FcovCyclicBound<A<Object?>>> x915;
+  Finv<FcovCyclicBound<A<FutureOr<dynamic>>>> x916;
+  Finv<FcovCyclicBound<A<FutureOr<void>>>> x917;
+  Finv<FcovCyclicBound<A<FutureOr<Object?>>>> x918;
+  Finv<FcovCyclicBound<A<A<dynamic>>>> x919;
+  Finv<FcovCyclicBound<A<A<void>>>> x920;
+  Finv<FcovCyclicBound<A<A<Object?>>>> x921;
+  Finv<FcovCyclicBound<A<A<FutureOr<dynamic>>>>> x922;
+  Finv<FcovCyclicBound<A<A<FutureOr<void>>>>> x923;
+  Finv<FcovCyclicBound<A<A<FutureOr<Object?>>>>> x924;
+  Finv<FcovCyclicCoBound<dynamic>> x925;
+  Finv<FcovCyclicCoBound<void>> x926;
+  Finv<FcovCyclicCoBound<Object?>> x927;
+  Finv<FcovCyclicCoBound<FutureOr<dynamic>>> x928;
+  Finv<FcovCyclicCoBound<FutureOr<void>>> x929;
+  Finv<FcovCyclicCoBound<FutureOr<Object?>>> x930;
+  Finv<FcovCyclicCoBound<Function(Function(dynamic))>> x931;
+  Finv<FcovCyclicCoBound<Function(Function(void))>> x932;
+  Finv<FcovCyclicCoBound<Function(Function(Object?))>> x933;
+  Finv<FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x934;
+  Finv<FcovCyclicCoBound<Function(Function(FutureOr<void>))>> x935;
+  Finv<FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x936;
+  Finv<CFcov<dynamic>> x937;
+  Finv<CFcov<void>> x938;
+  Finv<CFcov<Object?>> x939;
+  Finv<CFcov<FutureOr<dynamic>>> x940;
+  Finv<CFcov<FutureOr<void>>> x941;
+  Finv<CFcov<FutureOr<Object?>>> x942;
+  Finv<CFcov<Fcov<dynamic>>> x943;
+  Finv<CFcov<Fcov<void>>> x944;
+  Finv<CFcov<Fcov<Object?>>> x945;
+  Finv<CFcov<Fcov<FutureOr<dynamic>>>> x946;
+  Finv<CFcov<Fcov<FutureOr<void>>>> x947;
+  Finv<CFcov<Fcov<FutureOr<Object?>>>> x948;
+  Finv<CFcov<Fcov<Fcov<dynamic>>>> x949;
+  Finv<CFcov<Fcov<Fcov<void>>>> x950;
+  Finv<CFcov<Fcov<Fcov<Object?>>>> x951;
+  Finv<CFcov<Fcov<Fcov<FutureOr<dynamic>>>>> x952;
+  Finv<CFcov<Fcov<Fcov<FutureOr<void>>>>> x953;
+  Finv<CFcov<Fcov<Fcov<FutureOr<Object?>>>>> x954;
+  Finv<CFcon<dynamic>> x955;
+  Finv<CFcon<void>> x956;
+  Finv<CFcon<Object?>> x957;
+  Finv<CFcon<FutureOr<dynamic>>> x958;
+  Finv<CFcon<FutureOr<void>>> x959;
+  Finv<CFcon<FutureOr<Object?>>> x960;
+  Finv<CFinv<dynamic>> x961;
+  Finv<CFinv<void>> x962;
+  Finv<CFinv<Object?>> x963;
+  Finv<CFinv<FutureOr<dynamic>>> x964;
+  Finv<CFinv<FutureOr<void>>> x965;
+  Finv<CFinv<FutureOr<Object?>>> x966;
+  Finv<CFunu<dynamic>> x967;
+  Finv<CFunu<void>> x968;
+  Finv<CFunu<Object?>> x969;
+  Finv<CFunu<FutureOr<dynamic>>> x970;
+  Finv<CFunu<FutureOr<void>>> x971;
+  Finv<CFunu<FutureOr<Object?>>> x972;
+  Finv<CcovBound<dynamic>> x973;
+  Finv<CcovBound<void>> x974;
+  Finv<CcovBound<Object?>> x975;
+  Finv<CcovBound<FutureOr<dynamic>>> x976;
+  Finv<CcovBound<FutureOr<void>>> x977;
+  Finv<CcovBound<FutureOr<Object?>>> x978;
+  Finv<CcovCyclicBound<dynamic>> x979;
+  Finv<CcovCyclicBound<void>> x980;
+  Finv<CcovCyclicBound<Object?>> x981;
+  Finv<CcovCyclicBound<FutureOr<dynamic>>> x982;
+  Finv<CcovCyclicBound<FutureOr<void>>> x983;
+  Finv<CcovCyclicBound<FutureOr<Object?>>> x984;
+  Finv<CcovCyclicBound<A<dynamic>>> x985;
+  Finv<CcovCyclicBound<A<void>>> x986;
+  Finv<CcovCyclicBound<A<Object?>>> x987;
+  Finv<CcovCyclicBound<A<FutureOr<dynamic>>>> x988;
+  Finv<CcovCyclicBound<A<FutureOr<void>>>> x989;
+  Finv<CcovCyclicBound<A<FutureOr<Object?>>>> x990;
+  Finv<CcovCyclicBound<A<A<dynamic>>>> x991;
+  Finv<CcovCyclicBound<A<A<void>>>> x992;
+  Finv<CcovCyclicBound<A<A<Object?>>>> x993;
+  Finv<CcovCyclicBound<A<A<FutureOr<dynamic>>>>> x994;
+  Finv<CcovCyclicBound<A<A<FutureOr<void>>>>> x995;
+  Finv<CcovCyclicBound<A<A<FutureOr<Object?>>>>> x996;
+  Finv<CcovCyclicCoBound<dynamic>> x997;
+  Finv<CcovCyclicCoBound<void>> x998;
+  Finv<CcovCyclicCoBound<Object?>> x999;
+  Finv<CcovCyclicCoBound<FutureOr<dynamic>>> x1000;
+  Finv<CcovCyclicCoBound<FutureOr<void>>> x1001;
+  Finv<CcovCyclicCoBound<FutureOr<Object?>>> x1002;
+  Finv<CcovCyclicCoBound<Function(Function(dynamic))>> x1003;
+  Finv<CcovCyclicCoBound<Function(Function(void))>> x1004;
+  Finv<CcovCyclicCoBound<Function(Function(Object?))>> x1005;
+  Finv<CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x1006;
+  Finv<CcovCyclicCoBound<Function(Function(FutureOr<void>))>> x1007;
+  Finv<CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x1008;
+  Funu<FcovBound<dynamic>> x1009;
+  Funu<FcovBound<void>> x1010;
+  Funu<FcovBound<Object?>> x1011;
+  Funu<FcovBound<FutureOr<dynamic>>> x1012;
+  Funu<FcovBound<FutureOr<void>>> x1013;
+  Funu<FcovBound<FutureOr<Object?>>> x1014;
+  Funu<FcovCyclicBound<dynamic>> x1015;
+  Funu<FcovCyclicBound<void>> x1016;
+  Funu<FcovCyclicBound<Object?>> x1017;
+  Funu<FcovCyclicBound<FutureOr<dynamic>>> x1018;
+  Funu<FcovCyclicBound<FutureOr<void>>> x1019;
+  Funu<FcovCyclicBound<FutureOr<Object?>>> x1020;
+  Funu<FcovCyclicBound<A<dynamic>>> x1021;
+  Funu<FcovCyclicBound<A<void>>> x1022;
+  Funu<FcovCyclicBound<A<Object?>>> x1023;
+  Funu<FcovCyclicBound<A<FutureOr<dynamic>>>> x1024;
+  Funu<FcovCyclicBound<A<FutureOr<void>>>> x1025;
+  Funu<FcovCyclicBound<A<FutureOr<Object?>>>> x1026;
+  Funu<FcovCyclicBound<A<A<dynamic>>>> x1027;
+  Funu<FcovCyclicBound<A<A<void>>>> x1028;
+  Funu<FcovCyclicBound<A<A<Object?>>>> x1029;
+  Funu<FcovCyclicBound<A<A<FutureOr<dynamic>>>>> x1030;
+  Funu<FcovCyclicBound<A<A<FutureOr<void>>>>> x1031;
+  Funu<FcovCyclicBound<A<A<FutureOr<Object?>>>>> x1032;
+  Funu<FcovCyclicCoBound<dynamic>> x1033;
+  Funu<FcovCyclicCoBound<void>> x1034;
+  Funu<FcovCyclicCoBound<Object?>> x1035;
+  Funu<FcovCyclicCoBound<FutureOr<dynamic>>> x1036;
+  Funu<FcovCyclicCoBound<FutureOr<void>>> x1037;
+  Funu<FcovCyclicCoBound<FutureOr<Object?>>> x1038;
+  Funu<FcovCyclicCoBound<Function(Function(dynamic))>> x1039;
+  Funu<FcovCyclicCoBound<Function(Function(void))>> x1040;
+  Funu<FcovCyclicCoBound<Function(Function(Object?))>> x1041;
+  Funu<FcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x1042;
+  Funu<FcovCyclicCoBound<Function(Function(FutureOr<void>))>> x1043;
+  Funu<FcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x1044;
+  Funu<CFcov<dynamic>> x1045;
+  Funu<CFcov<void>> x1046;
+  Funu<CFcov<Object?>> x1047;
+  Funu<CFcov<FutureOr<dynamic>>> x1048;
+  Funu<CFcov<FutureOr<void>>> x1049;
+  Funu<CFcov<FutureOr<Object?>>> x1050;
+  Funu<CFcov<Fcov<dynamic>>> x1051;
+  Funu<CFcov<Fcov<void>>> x1052;
+  Funu<CFcov<Fcov<Object?>>> x1053;
+  Funu<CFcov<Fcov<FutureOr<dynamic>>>> x1054;
+  Funu<CFcov<Fcov<FutureOr<void>>>> x1055;
+  Funu<CFcov<Fcov<FutureOr<Object?>>>> x1056;
+  Funu<CFcov<Fcov<Fcov<dynamic>>>> x1057;
+  Funu<CFcov<Fcov<Fcov<void>>>> x1058;
+  Funu<CFcov<Fcov<Fcov<Object?>>>> x1059;
+  Funu<CFcov<Fcov<Fcov<FutureOr<dynamic>>>>> x1060;
+  Funu<CFcov<Fcov<Fcov<FutureOr<void>>>>> x1061;
+  Funu<CFcov<Fcov<Fcov<FutureOr<Object?>>>>> x1062;
+  Funu<CFcon<dynamic>> x1063;
+  Funu<CFcon<void>> x1064;
+  Funu<CFcon<Object?>> x1065;
+  Funu<CFcon<FutureOr<dynamic>>> x1066;
+  Funu<CFcon<FutureOr<void>>> x1067;
+  Funu<CFcon<FutureOr<Object?>>> x1068;
+  Funu<CFinv<dynamic>> x1069;
+  Funu<CFinv<void>> x1070;
+  Funu<CFinv<Object?>> x1071;
+  Funu<CFinv<FutureOr<dynamic>>> x1072;
+  Funu<CFinv<FutureOr<void>>> x1073;
+  Funu<CFinv<FutureOr<Object?>>> x1074;
+  Funu<CFunu<dynamic>> x1075;
+  Funu<CFunu<void>> x1076;
+  Funu<CFunu<Object?>> x1077;
+  Funu<CFunu<FutureOr<dynamic>>> x1078;
+  Funu<CFunu<FutureOr<void>>> x1079;
+  Funu<CFunu<FutureOr<Object?>>> x1080;
+  Funu<CcovBound<dynamic>> x1081;
+  Funu<CcovBound<void>> x1082;
+  Funu<CcovBound<Object?>> x1083;
+  Funu<CcovBound<FutureOr<dynamic>>> x1084;
+  Funu<CcovBound<FutureOr<void>>> x1085;
+  Funu<CcovBound<FutureOr<Object?>>> x1086;
+  Funu<CcovCyclicBound<dynamic>> x1087;
+  Funu<CcovCyclicBound<void>> x1088;
+  Funu<CcovCyclicBound<Object?>> x1089;
+  Funu<CcovCyclicBound<FutureOr<dynamic>>> x1090;
+  Funu<CcovCyclicBound<FutureOr<void>>> x1091;
+  Funu<CcovCyclicBound<FutureOr<Object?>>> x1092;
+  Funu<CcovCyclicBound<A<dynamic>>> x1093;
+  Funu<CcovCyclicBound<A<void>>> x1094;
+  Funu<CcovCyclicBound<A<Object?>>> x1095;
+  Funu<CcovCyclicBound<A<FutureOr<dynamic>>>> x1096;
+  Funu<CcovCyclicBound<A<FutureOr<void>>>> x1097;
+  Funu<CcovCyclicBound<A<FutureOr<Object?>>>> x1098;
+  Funu<CcovCyclicBound<A<A<dynamic>>>> x1099;
+  Funu<CcovCyclicBound<A<A<void>>>> x1100;
+  Funu<CcovCyclicBound<A<A<Object?>>>> x1101;
+  Funu<CcovCyclicBound<A<A<FutureOr<dynamic>>>>> x1102;
+  Funu<CcovCyclicBound<A<A<FutureOr<void>>>>> x1103;
+  Funu<CcovCyclicBound<A<A<FutureOr<Object?>>>>> x1104;
+  Funu<CcovCyclicCoBound<dynamic>> x1105;
+  Funu<CcovCyclicCoBound<void>> x1106;
+  Funu<CcovCyclicCoBound<Object?>> x1107;
+  Funu<CcovCyclicCoBound<FutureOr<dynamic>>> x1108;
+  Funu<CcovCyclicCoBound<FutureOr<void>>> x1109;
+  Funu<CcovCyclicCoBound<FutureOr<Object?>>> x1110;
+  Funu<CcovCyclicCoBound<Function(Function(dynamic))>> x1111;
+  Funu<CcovCyclicCoBound<Function(Function(void))>> x1112;
+  Funu<CcovCyclicCoBound<Function(Function(Object?))>> x1113;
+  Funu<CcovCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x1114;
+  Funu<CcovCyclicCoBound<Function(Function(FutureOr<void>))>> x1115;
+  Funu<CcovCyclicCoBound<Function(Function(FutureOr<Object?>))>> x1116;
+}
+
+void testContravariantSuperbound<N extends Never>() {
+  // Top type in a contravariant position, regular-bounded.
+  FcovCyclicCoBound<Function(dynamic)> x1;
+  FcovCyclicCoBound<Function(void)> x2;
+  FcovCyclicCoBound<Function(Object?)> x3;
+  FcovCyclicCoBound<Function(FutureOr<dynamic>)> x4;
+  FcovCyclicCoBound<Function(FutureOr<void>)> x5;
+  FcovCyclicCoBound<Function(FutureOr<Object?>)> x6;
+  CFcon<Fcon<dynamic>> x7;
+  CFcon<Fcon<void>> x8;
+  CFcon<Fcon<Object?>> x9;
+  CFcon<Fcon<FutureOr<dynamic>>> x10;
+  CFcon<Fcon<FutureOr<void>>> x11;
+  CFcon<Fcon<FutureOr<Object?>>> x12;
+  CcovCyclicCoBound<Function(dynamic)> x13;
+  CcovCyclicCoBound<Function(void)> x14;
+  CcovCyclicCoBound<Function(Object?)> x15;
+  CcovCyclicCoBound<Function(FutureOr<dynamic>)> x16;
+  CcovCyclicCoBound<Function(FutureOr<void>)> x17;
+  CcovCyclicCoBound<Function(FutureOr<Object?>)> x18;
+
+  // Bottom type in a contravariant position, super-bounded.
+  FcovCyclicCoBound<Function(Never)> x19;
+  FcovCyclicCoBound<Function(N)> x20;
+  CFcon<Fcon<Never>> x21;
+  CFcon<Fcon<N>> x22;
+  CcovCyclicCoBound<Function(Never)> x23;
+  CcovCyclicCoBound<Function(N)> x24;
+
+  // Super-bounded types in a context.
+  A<FcovCyclicCoBound<Function(Never)>> x25;
+  A<FcovCyclicCoBound<Function(N)>> x26;
+  A<CFcon<Fcon<Never>>> x27;
+  A<CFcon<Fcon<N>>> x28;
+  A<CcovCyclicCoBound<Function(Never)>> x29;
+  A<CcovCyclicCoBound<Function(N)>> x30;
+  FcovCyclicCoBound<Function(Never)> Function() x31;
+  FcovCyclicCoBound<Function(N)> Function() x32;
+  CFcon<Fcon<Never>> Function() x33;
+  CFcon<Fcon<N>> Function() x34;
+  CcovCyclicCoBound<Function(Never)> Function() x35;
+  CcovCyclicCoBound<Function(N)> Function() x36;
+  void Function(void Function(FcovCyclicCoBound<Function(Never)>)) x37;
+  void Function(void Function(FcovCyclicCoBound<Function(N)>)) x38;
+  void Function(void Function(CFcon<Fcon<Never>>)) x39;
+  void Function(void Function(CFcon<Fcon<N>>)) x40;
+  void Function(void Function(CcovCyclicCoBound<Function(Never)>)) x41;
+  void Function(void Function(CcovCyclicCoBound<Function(N)>)) x42;
+  void Function(FcovCyclicCoBound<Function(Never)>) x43;
+  void Function(FcovCyclicCoBound<Function(N)>) x44;
+  void Function(CFcon<Fcon<Never>>) x45;
+  void Function(CFcon<Fcon<N>>) x46;
+  void Function(CcovCyclicCoBound<Function(Never)>) x47;
+  void Function(CcovCyclicCoBound<Function(N)>) x48;
+  void Function(FcovCyclicCoBound<Function(Never)>) Function() x49;
+  void Function(FcovCyclicCoBound<Function(N)>) Function() x50;
+  void Function(CFcon<Fcon<Never>>) Function() x51;
+  void Function(CFcon<Fcon<N>>) Function() x52;
+  void Function(CcovCyclicCoBound<Function(Never)>) Function() x53;
+  void Function(CcovCyclicCoBound<Function(N)>) Function() x54;
+  void Function<Y extends FcovCyclicCoBound<Function(Never)>>() x55;
+  void Function<Y extends FcovCyclicCoBound<Function(N)>>() x56;
+  void Function<Y extends CFcon<Fcon<Never>>>() x57;
+  void Function<Y extends CFcon<Fcon<N>>>() x58;
+  void Function<Y extends CcovCyclicCoBound<Function(Never)>>() x59;
+  void Function<Y extends CcovCyclicCoBound<Function(N)>>() x60;
+  void Function<Y extends A<FcovCyclicCoBound<Function(Never)>>>() x61;
+  void Function<Y extends A<FcovCyclicCoBound<Function(N)>>>() x62;
+  void Function<Y extends A<CFcon<Fcon<Never>>>>() x63;
+  void Function<Y extends A<CFcon<Fcon<N>>>>() x64;
+  void Function<Y extends A<CcovCyclicCoBound<Function(Never)>>>() x65;
+  void Function<Y extends A<CcovCyclicCoBound<Function(N)>>>() x66;
+  Finv<FcovCyclicCoBound<Function(Never)>> x67;
+  Finv<FcovCyclicCoBound<Function(N)>> x68;
+  Finv<CFcon<Fcon<Never>>> x69;
+  Finv<CFcon<Fcon<N>>> x70;
+  Finv<CcovCyclicCoBound<Function(Never)>> x71;
+  Finv<CcovCyclicCoBound<Function(N)>> x72;
+  Funu<FcovCyclicCoBound<Function(Never)>> x73;
+  Funu<FcovCyclicCoBound<Function(N)>> x74;
+  Funu<CFcon<Fcon<Never>>> x75;
+  Funu<CFcon<Fcon<N>>> x76;
+  Funu<CcovCyclicCoBound<Function(Never)>> x77;
+  Funu<CcovCyclicCoBound<Function(N)>> x78;
+}
+
+void testInvariantSuperbound<N extends Never>() {
+  // Bottom type in an invariant position, regular-bounded.
+  FinvBound<Never> x1;
+  FinvBound<N> x2;
+  FinvCyclicBound<Never> x3;
+  FinvCyclicBound<N> x4;
+  FinvCyclicBound<A<Never>> x5;
+  FinvCyclicBound<A<N>> x6;
+  FinvCyclicBound<A<A<Never>>> x7;
+  FinvCyclicBound<A<A<N>>> x8;
+  FinvCyclicCoBound<Never> x9;
+  FinvCyclicCoBound<N> x10;
+  FinvCyclicCoBound<Function(Function(Never))> x11;
+  FinvCyclicCoBound<Function(Function(N))> x12;
+
+  // Top type in an invariant position, super-bounded.
+  FinvBound<dynamic> x13;
+  FinvBound<void> x14;
+  FinvBound<Object?> x15;
+  FinvBound<FutureOr<dynamic>> x16;
+  FinvBound<FutureOr<void>> x17;
+  FinvBound<FutureOr<Object?>> x18;
+  FinvCyclicBound<dynamic> x19;
+  FinvCyclicBound<void> x20;
+  FinvCyclicBound<Object?> x21;
+  FinvCyclicBound<FutureOr<dynamic>> x22;
+  FinvCyclicBound<FutureOr<void>> x23;
+  FinvCyclicBound<FutureOr<Object?>> x24;
+  FinvCyclicBound<A<dynamic>> x25;
+  FinvCyclicBound<A<void>> x26;
+  FinvCyclicBound<A<Object?>> x27;
+  FinvCyclicBound<A<FutureOr<dynamic>>> x28;
+  FinvCyclicBound<A<FutureOr<void>>> x29;
+  FinvCyclicBound<A<FutureOr<Object?>>> x30;
+  FinvCyclicBound<A<A<dynamic>>> x31;
+  FinvCyclicBound<A<A<void>>> x32;
+  FinvCyclicBound<A<A<Object?>>> x33;
+  FinvCyclicBound<A<A<FutureOr<dynamic>>>> x34;
+  FinvCyclicBound<A<A<FutureOr<void>>>> x35;
+  FinvCyclicBound<A<A<FutureOr<Object?>>>> x36;
+  FinvCyclicCoBound<dynamic> x37;
+  FinvCyclicCoBound<void> x38;
+  FinvCyclicCoBound<Object?> x39;
+  FinvCyclicCoBound<FutureOr<dynamic>> x40;
+  FinvCyclicCoBound<FutureOr<void>> x41;
+  FinvCyclicCoBound<FutureOr<Object?>> x42;
+  FinvCyclicCoBound<Function(Function(dynamic))> x43;
+  FinvCyclicCoBound<Function(Function(void))> x44;
+  FinvCyclicCoBound<Function(Function(Object?))> x45;
+  FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))> x46;
+  FinvCyclicCoBound<Function(Function(FutureOr<void>))> x47;
+  FinvCyclicCoBound<Function(Function(FutureOr<Object?>))> x48;
+
+  // Super-bounded types in a context.
+  A<FinvBound<dynamic>> x49;
+  A<FinvBound<void>> x50;
+  A<FinvBound<Object?>> x51;
+  A<FinvBound<FutureOr<dynamic>>> x52;
+  A<FinvBound<FutureOr<void>>> x53;
+  A<FinvBound<FutureOr<Object?>>> x54;
+  A<FinvCyclicBound<dynamic>> x55;
+  A<FinvCyclicBound<void>> x56;
+  A<FinvCyclicBound<Object?>> x57;
+  A<FinvCyclicBound<FutureOr<dynamic>>> x58;
+  A<FinvCyclicBound<FutureOr<void>>> x59;
+  A<FinvCyclicBound<FutureOr<Object?>>> x60;
+  A<FinvCyclicBound<A<dynamic>>> x61;
+  A<FinvCyclicBound<A<void>>> x62;
+  A<FinvCyclicBound<A<Object?>>> x63;
+  A<FinvCyclicBound<A<FutureOr<dynamic>>>> x64;
+  A<FinvCyclicBound<A<FutureOr<void>>>> x65;
+  A<FinvCyclicBound<A<FutureOr<Object?>>>> x66;
+  A<FinvCyclicBound<A<A<dynamic>>>> x67;
+  A<FinvCyclicBound<A<A<void>>>> x68;
+  A<FinvCyclicBound<A<A<Object?>>>> x69;
+  A<FinvCyclicBound<A<A<FutureOr<dynamic>>>>> x70;
+  A<FinvCyclicBound<A<A<FutureOr<void>>>>> x71;
+  A<FinvCyclicBound<A<A<FutureOr<Object?>>>>> x72;
+  A<FinvCyclicCoBound<dynamic>> x73;
+  A<FinvCyclicCoBound<void>> x74;
+  A<FinvCyclicCoBound<Object?>> x75;
+  A<FinvCyclicCoBound<FutureOr<dynamic>>> x76;
+  A<FinvCyclicCoBound<FutureOr<void>>> x77;
+  A<FinvCyclicCoBound<FutureOr<Object?>>> x78;
+  A<FinvCyclicCoBound<Function(Function(dynamic))>> x79;
+  A<FinvCyclicCoBound<Function(Function(void))>> x80;
+  A<FinvCyclicCoBound<Function(Function(Object?))>> x81;
+  A<FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x82;
+  A<FinvCyclicCoBound<Function(Function(FutureOr<void>))>> x83;
+  A<FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>> x84;
+  FinvBound<dynamic> Function() x85;
+  FinvBound<void> Function() x86;
+  FinvBound<Object?> Function() x87;
+  FinvBound<FutureOr<dynamic>> Function() x88;
+  FinvBound<FutureOr<void>> Function() x89;
+  FinvBound<FutureOr<Object?>> Function() x90;
+  FinvCyclicBound<dynamic> Function() x91;
+  FinvCyclicBound<void> Function() x92;
+  FinvCyclicBound<Object?> Function() x93;
+  FinvCyclicBound<FutureOr<dynamic>> Function() x94;
+  FinvCyclicBound<FutureOr<void>> Function() x95;
+  FinvCyclicBound<FutureOr<Object?>> Function() x96;
+  FinvCyclicBound<A<dynamic>> Function() x97;
+  FinvCyclicBound<A<void>> Function() x98;
+  FinvCyclicBound<A<Object?>> Function() x99;
+  FinvCyclicBound<A<FutureOr<dynamic>>> Function() x100;
+  FinvCyclicBound<A<FutureOr<void>>> Function() x101;
+  FinvCyclicBound<A<FutureOr<Object?>>> Function() x102;
+  FinvCyclicBound<A<A<dynamic>>> Function() x103;
+  FinvCyclicBound<A<A<void>>> Function() x104;
+  FinvCyclicBound<A<A<Object?>>> Function() x105;
+  FinvCyclicBound<A<A<FutureOr<dynamic>>>> Function() x106;
+  FinvCyclicBound<A<A<FutureOr<void>>>> Function() x107;
+  FinvCyclicBound<A<A<FutureOr<Object?>>>> Function() x108;
+  FinvCyclicCoBound<dynamic> Function() x109;
+  FinvCyclicCoBound<void> Function() x110;
+  FinvCyclicCoBound<Object?> Function() x111;
+  FinvCyclicCoBound<FutureOr<dynamic>> Function() x112;
+  FinvCyclicCoBound<FutureOr<void>> Function() x113;
+  FinvCyclicCoBound<FutureOr<Object?>> Function() x114;
+  FinvCyclicCoBound<Function(Function(dynamic))> Function() x115;
+  FinvCyclicCoBound<Function(Function(void))> Function() x116;
+  FinvCyclicCoBound<Function(Function(Object?))> Function() x117;
+  FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x118;
+  FinvCyclicCoBound<Function(Function(FutureOr<void>))> Function() x119;
+  FinvCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x120;
+  void Function(void Function(FinvBound<dynamic>)) x121;
+  void Function(void Function(FinvBound<void>)) x122;
+  void Function(void Function(FinvBound<Object?>)) x123;
+  void Function(void Function(FinvBound<FutureOr<dynamic>>)) x124;
+  void Function(void Function(FinvBound<FutureOr<void>>)) x125;
+  void Function(void Function(FinvBound<FutureOr<Object?>>)) x126;
+  void Function(void Function(FinvCyclicBound<dynamic>)) x127;
+  void Function(void Function(FinvCyclicBound<void>)) x128;
+  void Function(void Function(FinvCyclicBound<Object?>)) x129;
+  void Function(void Function(FinvCyclicBound<FutureOr<dynamic>>)) x130;
+  void Function(void Function(FinvCyclicBound<FutureOr<void>>)) x131;
+  void Function(void Function(FinvCyclicBound<FutureOr<Object?>>)) x132;
+  void Function(void Function(FinvCyclicBound<A<dynamic>>)) x133;
+  void Function(void Function(FinvCyclicBound<A<void>>)) x134;
+  void Function(void Function(FinvCyclicBound<A<Object?>>)) x135;
+  void Function(void Function(FinvCyclicBound<A<FutureOr<dynamic>>>)) x136;
+  void Function(void Function(FinvCyclicBound<A<FutureOr<void>>>)) x137;
+  void Function(void Function(FinvCyclicBound<A<FutureOr<Object?>>>)) x138;
+  void Function(void Function(FinvCyclicBound<A<A<dynamic>>>)) x139;
+  void Function(void Function(FinvCyclicBound<A<A<void>>>)) x140;
+  void Function(void Function(FinvCyclicBound<A<A<Object?>>>)) x141;
+  void Function(void Function(FinvCyclicBound<A<A<FutureOr<dynamic>>>>)) x142;
+  void Function(void Function(FinvCyclicBound<A<A<FutureOr<void>>>>)) x143;
+  void Function(void Function(FinvCyclicBound<A<A<FutureOr<Object?>>>>)) x144;
+  void Function(void Function(FinvCyclicCoBound<dynamic>)) x145;
+  void Function(void Function(FinvCyclicCoBound<void>)) x146;
+  void Function(void Function(FinvCyclicCoBound<Object?>)) x147;
+  void Function(void Function(FinvCyclicCoBound<FutureOr<dynamic>>)) x148;
+  void Function(void Function(FinvCyclicCoBound<FutureOr<void>>)) x149;
+  void Function(void Function(FinvCyclicCoBound<FutureOr<Object?>>)) x150;
+  void Function(void Function(FinvCyclicCoBound<Function(Function(dynamic))>))
+      x151;
+  void Function(void Function(FinvCyclicCoBound<Function(Function(void))>))
+      x152;
+  void Function(void Function(FinvCyclicCoBound<Function(Function(Object?))>))
+      x153;
+  void Function(
+      void Function(
+          FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x154;
+  void Function(
+          void Function(FinvCyclicCoBound<Function(Function(FutureOr<void>))>))
+      x155;
+  void Function(
+      void Function(
+          FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x156;
+  void Function(FinvBound<dynamic>) x157;
+  void Function(FinvBound<void>) x158;
+  void Function(FinvBound<Object?>) x159;
+  void Function(FinvBound<FutureOr<dynamic>>) x160;
+  void Function(FinvBound<FutureOr<void>>) x161;
+  void Function(FinvBound<FutureOr<Object?>>) x162;
+  void Function(FinvCyclicBound<dynamic>) x163;
+  void Function(FinvCyclicBound<void>) x164;
+  void Function(FinvCyclicBound<Object?>) x165;
+  void Function(FinvCyclicBound<FutureOr<dynamic>>) x166;
+  void Function(FinvCyclicBound<FutureOr<void>>) x167;
+  void Function(FinvCyclicBound<FutureOr<Object?>>) x168;
+  void Function(FinvCyclicBound<A<dynamic>>) x169;
+  void Function(FinvCyclicBound<A<void>>) x170;
+  void Function(FinvCyclicBound<A<Object?>>) x171;
+  void Function(FinvCyclicBound<A<FutureOr<dynamic>>>) x172;
+  void Function(FinvCyclicBound<A<FutureOr<void>>>) x173;
+  void Function(FinvCyclicBound<A<FutureOr<Object?>>>) x174;
+  void Function(FinvCyclicBound<A<A<dynamic>>>) x175;
+  void Function(FinvCyclicBound<A<A<void>>>) x176;
+  void Function(FinvCyclicBound<A<A<Object?>>>) x177;
+  void Function(FinvCyclicBound<A<A<FutureOr<dynamic>>>>) x178;
+  void Function(FinvCyclicBound<A<A<FutureOr<void>>>>) x179;
+  void Function(FinvCyclicBound<A<A<FutureOr<Object?>>>>) x180;
+  void Function(FinvCyclicCoBound<dynamic>) x181;
+  void Function(FinvCyclicCoBound<void>) x182;
+  void Function(FinvCyclicCoBound<Object?>) x183;
+  void Function(FinvCyclicCoBound<FutureOr<dynamic>>) x184;
+  void Function(FinvCyclicCoBound<FutureOr<void>>) x185;
+  void Function(FinvCyclicCoBound<FutureOr<Object?>>) x186;
+  void Function(FinvCyclicCoBound<Function(Function(dynamic))>) x187;
+  void Function(FinvCyclicCoBound<Function(Function(void))>) x188;
+  void Function(FinvCyclicCoBound<Function(Function(Object?))>) x189;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x190;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<void>))>) x191;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>) x192;
+  void Function(FinvBound<dynamic>) Function() x193;
+  void Function(FinvBound<void>) Function() x194;
+  void Function(FinvBound<Object?>) Function() x195;
+  void Function(FinvBound<FutureOr<dynamic>>) Function() x196;
+  void Function(FinvBound<FutureOr<void>>) Function() x197;
+  void Function(FinvBound<FutureOr<Object?>>) Function() x198;
+  void Function(FinvCyclicBound<dynamic>) Function() x199;
+  void Function(FinvCyclicBound<void>) Function() x200;
+  void Function(FinvCyclicBound<Object?>) Function() x201;
+  void Function(FinvCyclicBound<FutureOr<dynamic>>) Function() x202;
+  void Function(FinvCyclicBound<FutureOr<void>>) Function() x203;
+  void Function(FinvCyclicBound<FutureOr<Object?>>) Function() x204;
+  void Function(FinvCyclicBound<A<dynamic>>) Function() x205;
+  void Function(FinvCyclicBound<A<void>>) Function() x206;
+  void Function(FinvCyclicBound<A<Object?>>) Function() x207;
+  void Function(FinvCyclicBound<A<FutureOr<dynamic>>>) Function() x208;
+  void Function(FinvCyclicBound<A<FutureOr<void>>>) Function() x209;
+  void Function(FinvCyclicBound<A<FutureOr<Object?>>>) Function() x210;
+  void Function(FinvCyclicBound<A<A<dynamic>>>) Function() x211;
+  void Function(FinvCyclicBound<A<A<void>>>) Function() x212;
+  void Function(FinvCyclicBound<A<A<Object?>>>) Function() x213;
+  void Function(FinvCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x214;
+  void Function(FinvCyclicBound<A<A<FutureOr<void>>>>) Function() x215;
+  void Function(FinvCyclicBound<A<A<FutureOr<Object?>>>>) Function() x216;
+  void Function(FinvCyclicCoBound<dynamic>) Function() x217;
+  void Function(FinvCyclicCoBound<void>) Function() x218;
+  void Function(FinvCyclicCoBound<Object?>) Function() x219;
+  void Function(FinvCyclicCoBound<FutureOr<dynamic>>) Function() x220;
+  void Function(FinvCyclicCoBound<FutureOr<void>>) Function() x221;
+  void Function(FinvCyclicCoBound<FutureOr<Object?>>) Function() x222;
+  void Function(FinvCyclicCoBound<Function(Function(dynamic))>) Function() x223;
+  void Function(FinvCyclicCoBound<Function(Function(void))>) Function() x224;
+  void Function(FinvCyclicCoBound<Function(Function(Object?))>) Function() x225;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
+      Function() x226;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<void>))>)
+      Function() x227;
+  void Function(FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>)
+      Function() x228;
+  void Function<Y extends FinvBound<dynamic>>() x229;
+  void Function<Y extends FinvBound<void>>() x230;
+  void Function<Y extends FinvBound<Object?>>() x231;
+  void Function<Y extends FinvBound<FutureOr<dynamic>>>() x232;
+  void Function<Y extends FinvBound<FutureOr<void>>>() x233;
+  void Function<Y extends FinvBound<FutureOr<Object?>>>() x234;
+  void Function<Y extends FinvCyclicBound<dynamic>>() x235;
+  void Function<Y extends FinvCyclicBound<void>>() x236;
+  void Function<Y extends FinvCyclicBound<Object?>>() x237;
+  void Function<Y extends FinvCyclicBound<FutureOr<dynamic>>>() x238;
+  void Function<Y extends FinvCyclicBound<FutureOr<void>>>() x239;
+  void Function<Y extends FinvCyclicBound<FutureOr<Object?>>>() x240;
+  void Function<Y extends FinvCyclicBound<A<dynamic>>>() x241;
+  void Function<Y extends FinvCyclicBound<A<void>>>() x242;
+  void Function<Y extends FinvCyclicBound<A<Object?>>>() x243;
+  void Function<Y extends FinvCyclicBound<A<FutureOr<dynamic>>>>() x244;
+  void Function<Y extends FinvCyclicBound<A<FutureOr<void>>>>() x245;
+  void Function<Y extends FinvCyclicBound<A<FutureOr<Object?>>>>() x246;
+  void Function<Y extends FinvCyclicBound<A<A<dynamic>>>>() x247;
+  void Function<Y extends FinvCyclicBound<A<A<void>>>>() x248;
+  void Function<Y extends FinvCyclicBound<A<A<Object?>>>>() x249;
+  void Function<Y extends FinvCyclicBound<A<A<FutureOr<dynamic>>>>>() x250;
+  void Function<Y extends FinvCyclicBound<A<A<FutureOr<void>>>>>() x251;
+  void Function<Y extends FinvCyclicBound<A<A<FutureOr<Object?>>>>>() x252;
+  void Function<Y extends FinvCyclicCoBound<dynamic>>() x253;
+  void Function<Y extends FinvCyclicCoBound<void>>() x254;
+  void Function<Y extends FinvCyclicCoBound<Object?>>() x255;
+  void Function<Y extends FinvCyclicCoBound<FutureOr<dynamic>>>() x256;
+  void Function<Y extends FinvCyclicCoBound<FutureOr<void>>>() x257;
+  void Function<Y extends FinvCyclicCoBound<FutureOr<Object?>>>() x258;
+  void Function<Y extends FinvCyclicCoBound<Function(Function(dynamic))>>()
+      x259;
+  void Function<Y extends FinvCyclicCoBound<Function(Function(void))>>() x260;
+  void Function<Y extends FinvCyclicCoBound<Function(Function(Object?))>>()
+      x261;
+  void Function<
+          Y extends FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
+      x262;
+  void Function<
+      Y extends FinvCyclicCoBound<Function(Function(FutureOr<void>))>>() x263;
+  void Function<
+          Y extends FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
+      x264;
+  void Function<Y extends A<FinvBound<dynamic>>>() x265;
+  void Function<Y extends A<FinvBound<void>>>() x266;
+  void Function<Y extends A<FinvBound<Object?>>>() x267;
+  void Function<Y extends A<FinvBound<FutureOr<dynamic>>>>() x268;
+  void Function<Y extends A<FinvBound<FutureOr<void>>>>() x269;
+  void Function<Y extends A<FinvBound<FutureOr<Object?>>>>() x270;
+  void Function<Y extends A<FinvCyclicBound<dynamic>>>() x271;
+  void Function<Y extends A<FinvCyclicBound<void>>>() x272;
+  void Function<Y extends A<FinvCyclicBound<Object?>>>() x273;
+  void Function<Y extends A<FinvCyclicBound<FutureOr<dynamic>>>>() x274;
+  void Function<Y extends A<FinvCyclicBound<FutureOr<void>>>>() x275;
+  void Function<Y extends A<FinvCyclicBound<FutureOr<Object?>>>>() x276;
+  void Function<Y extends A<FinvCyclicBound<A<dynamic>>>>() x277;
+  void Function<Y extends A<FinvCyclicBound<A<void>>>>() x278;
+  void Function<Y extends A<FinvCyclicBound<A<Object?>>>>() x279;
+  void Function<Y extends A<FinvCyclicBound<A<FutureOr<dynamic>>>>>() x280;
+  void Function<Y extends A<FinvCyclicBound<A<FutureOr<void>>>>>() x281;
+  void Function<Y extends A<FinvCyclicBound<A<FutureOr<Object?>>>>>() x282;
+  void Function<Y extends A<FinvCyclicBound<A<A<dynamic>>>>>() x283;
+  void Function<Y extends A<FinvCyclicBound<A<A<void>>>>>() x284;
+  void Function<Y extends A<FinvCyclicBound<A<A<Object?>>>>>() x285;
+  void Function<Y extends A<FinvCyclicBound<A<A<FutureOr<dynamic>>>>>>() x286;
+  void Function<Y extends A<FinvCyclicBound<A<A<FutureOr<void>>>>>>() x287;
+  void Function<Y extends A<FinvCyclicBound<A<A<FutureOr<Object?>>>>>>() x288;
+  void Function<Y extends A<FinvCyclicCoBound<dynamic>>>() x289;
+  void Function<Y extends A<FinvCyclicCoBound<void>>>() x290;
+  void Function<Y extends A<FinvCyclicCoBound<Object?>>>() x291;
+  void Function<Y extends A<FinvCyclicCoBound<FutureOr<dynamic>>>>() x292;
+  void Function<Y extends A<FinvCyclicCoBound<FutureOr<void>>>>() x293;
+  void Function<Y extends A<FinvCyclicCoBound<FutureOr<Object?>>>>() x294;
+  void Function<Y extends A<FinvCyclicCoBound<Function(Function(dynamic))>>>()
+      x295;
+  void Function<Y extends A<FinvCyclicCoBound<Function(Function(void))>>>()
+      x296;
+  void Function<Y extends A<FinvCyclicCoBound<Function(Function(Object?))>>>()
+      x297;
+  void Function<
+      Y extends A<
+          FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x298;
+  void Function<
+          Y extends A<FinvCyclicCoBound<Function(Function(FutureOr<void>))>>>()
+      x299;
+  void Function<
+      Y extends A<
+          FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x300;
+  Finv<FinvBound<dynamic>> x301;
+  Finv<FinvBound<void>> x302;
+  Finv<FinvBound<Object?>> x303;
+  Finv<FinvBound<FutureOr<dynamic>>> x304;
+  Finv<FinvBound<FutureOr<void>>> x305;
+  Finv<FinvBound<FutureOr<Object?>>> x306;
+  Finv<FinvCyclicBound<dynamic>> x307;
+  Finv<FinvCyclicBound<void>> x308;
+  Finv<FinvCyclicBound<Object?>> x309;
+  Finv<FinvCyclicBound<FutureOr<dynamic>>> x310;
+  Finv<FinvCyclicBound<FutureOr<void>>> x311;
+  Finv<FinvCyclicBound<FutureOr<Object?>>> x312;
+  Finv<FinvCyclicBound<A<dynamic>>> x313;
+  Finv<FinvCyclicBound<A<void>>> x314;
+  Finv<FinvCyclicBound<A<Object?>>> x315;
+  Finv<FinvCyclicBound<A<FutureOr<dynamic>>>> x316;
+  Finv<FinvCyclicBound<A<FutureOr<void>>>> x317;
+  Finv<FinvCyclicBound<A<FutureOr<Object?>>>> x318;
+  Finv<FinvCyclicBound<A<A<dynamic>>>> x319;
+  Finv<FinvCyclicBound<A<A<void>>>> x320;
+  Finv<FinvCyclicBound<A<A<Object?>>>> x321;
+  Finv<FinvCyclicBound<A<A<FutureOr<dynamic>>>>> x322;
+  Finv<FinvCyclicBound<A<A<FutureOr<void>>>>> x323;
+  Finv<FinvCyclicBound<A<A<FutureOr<Object?>>>>> x324;
+  Finv<FinvCyclicCoBound<dynamic>> x325;
+  Finv<FinvCyclicCoBound<void>> x326;
+  Finv<FinvCyclicCoBound<Object?>> x327;
+  Finv<FinvCyclicCoBound<FutureOr<dynamic>>> x328;
+  Finv<FinvCyclicCoBound<FutureOr<void>>> x329;
+  Finv<FinvCyclicCoBound<FutureOr<Object?>>> x330;
+  Finv<FinvCyclicCoBound<Function(Function(dynamic))>> x331;
+  Finv<FinvCyclicCoBound<Function(Function(void))>> x332;
+  Finv<FinvCyclicCoBound<Function(Function(Object?))>> x333;
+  Finv<FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x334;
+  Finv<FinvCyclicCoBound<Function(Function(FutureOr<void>))>> x335;
+  Finv<FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>> x336;
+  Funu<FinvBound<dynamic>> x337;
+  Funu<FinvBound<void>> x338;
+  Funu<FinvBound<Object?>> x339;
+  Funu<FinvBound<FutureOr<dynamic>>> x340;
+  Funu<FinvBound<FutureOr<void>>> x341;
+  Funu<FinvBound<FutureOr<Object?>>> x342;
+  Funu<FinvCyclicBound<dynamic>> x343;
+  Funu<FinvCyclicBound<void>> x344;
+  Funu<FinvCyclicBound<Object?>> x345;
+  Funu<FinvCyclicBound<FutureOr<dynamic>>> x346;
+  Funu<FinvCyclicBound<FutureOr<void>>> x347;
+  Funu<FinvCyclicBound<FutureOr<Object?>>> x348;
+  Funu<FinvCyclicBound<A<dynamic>>> x349;
+  Funu<FinvCyclicBound<A<void>>> x350;
+  Funu<FinvCyclicBound<A<Object?>>> x351;
+  Funu<FinvCyclicBound<A<FutureOr<dynamic>>>> x352;
+  Funu<FinvCyclicBound<A<FutureOr<void>>>> x353;
+  Funu<FinvCyclicBound<A<FutureOr<Object?>>>> x354;
+  Funu<FinvCyclicBound<A<A<dynamic>>>> x355;
+  Funu<FinvCyclicBound<A<A<void>>>> x356;
+  Funu<FinvCyclicBound<A<A<Object?>>>> x357;
+  Funu<FinvCyclicBound<A<A<FutureOr<dynamic>>>>> x358;
+  Funu<FinvCyclicBound<A<A<FutureOr<void>>>>> x359;
+  Funu<FinvCyclicBound<A<A<FutureOr<Object?>>>>> x360;
+  Funu<FinvCyclicCoBound<dynamic>> x361;
+  Funu<FinvCyclicCoBound<void>> x362;
+  Funu<FinvCyclicCoBound<Object?>> x363;
+  Funu<FinvCyclicCoBound<FutureOr<dynamic>>> x364;
+  Funu<FinvCyclicCoBound<FutureOr<void>>> x365;
+  Funu<FinvCyclicCoBound<FutureOr<Object?>>> x366;
+  Funu<FinvCyclicCoBound<Function(Function(dynamic))>> x367;
+  Funu<FinvCyclicCoBound<Function(Function(void))>> x368;
+  Funu<FinvCyclicCoBound<Function(Function(Object?))>> x369;
+  Funu<FinvCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x370;
+  Funu<FinvCyclicCoBound<Function(Function(FutureOr<void>))>> x371;
+  Funu<FinvCyclicCoBound<Function(Function(FutureOr<Object?>))>> x372;
+}
+
+void testVarianceLessSuperbound<N extends Never>() {
+  // Bottom type in a variance-less position, regular-bounded.
+  FunuBound<Never> x1;
+  FunuBound<N> x2;
+  FunuCyclicBound<Never> x3;
+  FunuCyclicBound<N> x4;
+  FunuCyclicBound<A<Never>> x5;
+  FunuCyclicBound<A<N>> x6;
+  FunuCyclicBound<A<A<Never>>> x7;
+  FunuCyclicBound<A<A<N>>> x8;
+  FunuCyclicCoBound<Never> x9;
+  FunuCyclicCoBound<N> x10;
+  FunuCyclicCoBound<Function(Function(Never))> x11;
+  FunuCyclicCoBound<Function(Function(N))> x12;
+  CFunu<Funu<Never>> x13;
+  CFunu<Funu<N>> x14;
+  CFunu<Funu<Funu<Never>>> x15;
+  CFunu<Funu<Funu<N>>> x16;
+
+  // Top type in a variance-less position, super-bounded.
+  FunuBound<dynamic> x17;
+  FunuBound<void> x18;
+  FunuBound<Object?> x19;
+  FunuBound<FutureOr<dynamic>> x20;
+  FunuBound<FutureOr<void>> x21;
+  FunuBound<FutureOr<Object?>> x22;
+  FunuCyclicBound<dynamic> x23;
+  FunuCyclicBound<void> x24;
+  FunuCyclicBound<Object?> x25;
+  FunuCyclicBound<FutureOr<dynamic>> x26;
+  FunuCyclicBound<FutureOr<void>> x27;
+  FunuCyclicBound<FutureOr<Object?>> x28;
+  FunuCyclicBound<A<dynamic>> x29;
+  FunuCyclicBound<A<void>> x30;
+  FunuCyclicBound<A<Object?>> x31;
+  FunuCyclicBound<A<FutureOr<dynamic>>> x32;
+  FunuCyclicBound<A<FutureOr<void>>> x33;
+  FunuCyclicBound<A<FutureOr<Object?>>> x34;
+  FunuCyclicBound<A<A<dynamic>>> x35;
+  FunuCyclicBound<A<A<void>>> x36;
+  FunuCyclicBound<A<A<Object?>>> x37;
+  FunuCyclicBound<A<A<FutureOr<dynamic>>>> x38;
+  FunuCyclicBound<A<A<FutureOr<void>>>> x39;
+  FunuCyclicBound<A<A<FutureOr<Object?>>>> x40;
+  FunuCyclicCoBound<dynamic> x41;
+  FunuCyclicCoBound<void> x42;
+  FunuCyclicCoBound<Object?> x43;
+  FunuCyclicCoBound<FutureOr<dynamic>> x44;
+  FunuCyclicCoBound<FutureOr<void>> x45;
+  FunuCyclicCoBound<FutureOr<Object?>> x46;
+  FunuCyclicCoBound<Function(dynamic)> x47;
+  FunuCyclicCoBound<Function(void)> x48;
+  FunuCyclicCoBound<Function(Object?)> x49;
+  FunuCyclicCoBound<Function(FutureOr<dynamic>)> x50;
+  FunuCyclicCoBound<Function(FutureOr<void>)> x51;
+  FunuCyclicCoBound<Function(FutureOr<Object?>)> x52;
+  FunuCyclicCoBound<Function(Function(dynamic))> x53;
+  FunuCyclicCoBound<Function(Function(void))> x54;
+  FunuCyclicCoBound<Function(Function(Object?))> x55;
+  FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))> x56;
+  FunuCyclicCoBound<Function(Function(FutureOr<void>))> x57;
+  FunuCyclicCoBound<Function(Function(FutureOr<Object?>))> x58;
+  CFunu<Funu<dynamic>> x59;
+  CFunu<Funu<void>> x60;
+  CFunu<Funu<Object?>> x61;
+  CFunu<Funu<FutureOr<dynamic>>> x62;
+  CFunu<Funu<FutureOr<void>>> x63;
+  CFunu<Funu<FutureOr<Object?>>> x64;
+  CFunu<Funu<Funu<dynamic>>> x65;
+  CFunu<Funu<Funu<void>>> x66;
+  CFunu<Funu<Funu<Object?>>> x67;
+  CFunu<Funu<Funu<FutureOr<dynamic>>>> x68;
+  CFunu<Funu<Funu<FutureOr<void>>>> x69;
+  CFunu<Funu<Funu<FutureOr<Object?>>>> x70;
+
+  // Super-bounded types in a context.
+  A<FunuBound<dynamic>> x71;
+  A<FunuBound<void>> x72;
+  A<FunuBound<Object?>> x73;
+  A<FunuBound<FutureOr<dynamic>>> x74;
+  A<FunuBound<FutureOr<void>>> x75;
+  A<FunuBound<FutureOr<Object?>>> x76;
+  A<FunuCyclicBound<dynamic>> x77;
+  A<FunuCyclicBound<void>> x78;
+  A<FunuCyclicBound<Object?>> x79;
+  A<FunuCyclicBound<FutureOr<dynamic>>> x80;
+  A<FunuCyclicBound<FutureOr<void>>> x81;
+  A<FunuCyclicBound<FutureOr<Object?>>> x82;
+  A<FunuCyclicBound<A<dynamic>>> x83;
+  A<FunuCyclicBound<A<void>>> x84;
+  A<FunuCyclicBound<A<Object?>>> x85;
+  A<FunuCyclicBound<A<FutureOr<dynamic>>>> x86;
+  A<FunuCyclicBound<A<FutureOr<void>>>> x87;
+  A<FunuCyclicBound<A<FutureOr<Object?>>>> x88;
+  A<FunuCyclicBound<A<A<dynamic>>>> x89;
+  A<FunuCyclicBound<A<A<void>>>> x90;
+  A<FunuCyclicBound<A<A<Object?>>>> x91;
+  A<FunuCyclicBound<A<A<FutureOr<dynamic>>>>> x92;
+  A<FunuCyclicBound<A<A<FutureOr<void>>>>> x93;
+  A<FunuCyclicBound<A<A<FutureOr<Object?>>>>> x94;
+  A<FunuCyclicCoBound<dynamic>> x95;
+  A<FunuCyclicCoBound<void>> x96;
+  A<FunuCyclicCoBound<Object?>> x97;
+  A<FunuCyclicCoBound<FutureOr<dynamic>>> x98;
+  A<FunuCyclicCoBound<FutureOr<void>>> x99;
+  A<FunuCyclicCoBound<FutureOr<Object?>>> x100;
+  A<FunuCyclicCoBound<Function(dynamic)>> x101;
+  A<FunuCyclicCoBound<Function(void)>> x102;
+  A<FunuCyclicCoBound<Function(Object?)>> x103;
+  A<FunuCyclicCoBound<Function(FutureOr<dynamic>)>> x104;
+  A<FunuCyclicCoBound<Function(FutureOr<void>)>> x105;
+  A<FunuCyclicCoBound<Function(FutureOr<Object?>)>> x106;
+  A<FunuCyclicCoBound<Function(Function(dynamic))>> x107;
+  A<FunuCyclicCoBound<Function(Function(void))>> x108;
+  A<FunuCyclicCoBound<Function(Function(Object?))>> x109;
+  A<FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x110;
+  A<FunuCyclicCoBound<Function(Function(FutureOr<void>))>> x111;
+  A<FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>> x112;
+  A<CFunu<Funu<dynamic>>> x113;
+  A<CFunu<Funu<void>>> x114;
+  A<CFunu<Funu<Object?>>> x115;
+  A<CFunu<Funu<FutureOr<dynamic>>>> x116;
+  A<CFunu<Funu<FutureOr<void>>>> x117;
+  A<CFunu<Funu<FutureOr<Object?>>>> x118;
+  A<CFunu<Funu<Funu<dynamic>>>> x119;
+  A<CFunu<Funu<Funu<void>>>> x120;
+  A<CFunu<Funu<Funu<Object?>>>> x121;
+  A<CFunu<Funu<Funu<FutureOr<dynamic>>>>> x122;
+  A<CFunu<Funu<Funu<FutureOr<void>>>>> x123;
+  A<CFunu<Funu<Funu<FutureOr<Object?>>>>> x124;
+  FunuBound<dynamic> Function() x125;
+  FunuBound<void> Function() x126;
+  FunuBound<Object?> Function() x127;
+  FunuBound<FutureOr<dynamic>> Function() x128;
+  FunuBound<FutureOr<void>> Function() x129;
+  FunuBound<FutureOr<Object?>> Function() x130;
+  FunuCyclicBound<dynamic> Function() x131;
+  FunuCyclicBound<void> Function() x132;
+  FunuCyclicBound<Object?> Function() x133;
+  FunuCyclicBound<FutureOr<dynamic>> Function() x134;
+  FunuCyclicBound<FutureOr<void>> Function() x135;
+  FunuCyclicBound<FutureOr<Object?>> Function() x136;
+  FunuCyclicBound<A<dynamic>> Function() x137;
+  FunuCyclicBound<A<void>> Function() x138;
+  FunuCyclicBound<A<Object?>> Function() x139;
+  FunuCyclicBound<A<FutureOr<dynamic>>> Function() x140;
+  FunuCyclicBound<A<FutureOr<void>>> Function() x141;
+  FunuCyclicBound<A<FutureOr<Object?>>> Function() x142;
+  FunuCyclicBound<A<A<dynamic>>> Function() x143;
+  FunuCyclicBound<A<A<void>>> Function() x144;
+  FunuCyclicBound<A<A<Object?>>> Function() x145;
+  FunuCyclicBound<A<A<FutureOr<dynamic>>>> Function() x146;
+  FunuCyclicBound<A<A<FutureOr<void>>>> Function() x147;
+  FunuCyclicBound<A<A<FutureOr<Object?>>>> Function() x148;
+  FunuCyclicCoBound<dynamic> Function() x149;
+  FunuCyclicCoBound<void> Function() x150;
+  FunuCyclicCoBound<Object?> Function() x151;
+  FunuCyclicCoBound<FutureOr<dynamic>> Function() x152;
+  FunuCyclicCoBound<FutureOr<void>> Function() x153;
+  FunuCyclicCoBound<FutureOr<Object?>> Function() x154;
+  FunuCyclicCoBound<Function(dynamic)> Function() x155;
+  FunuCyclicCoBound<Function(void)> Function() x156;
+  FunuCyclicCoBound<Function(Object?)> Function() x157;
+  FunuCyclicCoBound<Function(FutureOr<dynamic>)> Function() x158;
+  FunuCyclicCoBound<Function(FutureOr<void>)> Function() x159;
+  FunuCyclicCoBound<Function(FutureOr<Object?>)> Function() x160;
+  FunuCyclicCoBound<Function(Function(dynamic))> Function() x161;
+  FunuCyclicCoBound<Function(Function(void))> Function() x162;
+  FunuCyclicCoBound<Function(Function(Object?))> Function() x163;
+  FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))> Function() x164;
+  FunuCyclicCoBound<Function(Function(FutureOr<void>))> Function() x165;
+  FunuCyclicCoBound<Function(Function(FutureOr<Object?>))> Function() x166;
+  CFunu<Funu<dynamic>> Function() x167;
+  CFunu<Funu<void>> Function() x168;
+  CFunu<Funu<Object?>> Function() x169;
+  CFunu<Funu<FutureOr<dynamic>>> Function() x170;
+  CFunu<Funu<FutureOr<void>>> Function() x171;
+  CFunu<Funu<FutureOr<Object?>>> Function() x172;
+  CFunu<Funu<Funu<dynamic>>> Function() x173;
+  CFunu<Funu<Funu<void>>> Function() x174;
+  CFunu<Funu<Funu<Object?>>> Function() x175;
+  CFunu<Funu<Funu<FutureOr<dynamic>>>> Function() x176;
+  CFunu<Funu<Funu<FutureOr<void>>>> Function() x177;
+  CFunu<Funu<Funu<FutureOr<Object?>>>> Function() x178;
+  void Function(void Function(FunuBound<dynamic>)) x179;
+  void Function(void Function(FunuBound<void>)) x180;
+  void Function(void Function(FunuBound<Object?>)) x181;
+  void Function(void Function(FunuBound<FutureOr<dynamic>>)) x182;
+  void Function(void Function(FunuBound<FutureOr<void>>)) x183;
+  void Function(void Function(FunuBound<FutureOr<Object?>>)) x184;
+  void Function(void Function(FunuCyclicBound<dynamic>)) x185;
+  void Function(void Function(FunuCyclicBound<void>)) x186;
+  void Function(void Function(FunuCyclicBound<Object?>)) x187;
+  void Function(void Function(FunuCyclicBound<FutureOr<dynamic>>)) x188;
+  void Function(void Function(FunuCyclicBound<FutureOr<void>>)) x189;
+  void Function(void Function(FunuCyclicBound<FutureOr<Object?>>)) x190;
+  void Function(void Function(FunuCyclicBound<A<dynamic>>)) x191;
+  void Function(void Function(FunuCyclicBound<A<void>>)) x192;
+  void Function(void Function(FunuCyclicBound<A<Object?>>)) x193;
+  void Function(void Function(FunuCyclicBound<A<FutureOr<dynamic>>>)) x194;
+  void Function(void Function(FunuCyclicBound<A<FutureOr<void>>>)) x195;
+  void Function(void Function(FunuCyclicBound<A<FutureOr<Object?>>>)) x196;
+  void Function(void Function(FunuCyclicBound<A<A<dynamic>>>)) x197;
+  void Function(void Function(FunuCyclicBound<A<A<void>>>)) x198;
+  void Function(void Function(FunuCyclicBound<A<A<Object?>>>)) x199;
+  void Function(void Function(FunuCyclicBound<A<A<FutureOr<dynamic>>>>)) x200;
+  void Function(void Function(FunuCyclicBound<A<A<FutureOr<void>>>>)) x201;
+  void Function(void Function(FunuCyclicBound<A<A<FutureOr<Object?>>>>)) x202;
+  void Function(void Function(FunuCyclicCoBound<dynamic>)) x203;
+  void Function(void Function(FunuCyclicCoBound<void>)) x204;
+  void Function(void Function(FunuCyclicCoBound<Object?>)) x205;
+  void Function(void Function(FunuCyclicCoBound<FutureOr<dynamic>>)) x206;
+  void Function(void Function(FunuCyclicCoBound<FutureOr<void>>)) x207;
+  void Function(void Function(FunuCyclicCoBound<FutureOr<Object?>>)) x208;
+  void Function(void Function(FunuCyclicCoBound<Function(dynamic)>)) x209;
+  void Function(void Function(FunuCyclicCoBound<Function(void)>)) x210;
+  void Function(void Function(FunuCyclicCoBound<Function(Object?)>)) x211;
+  void Function(void Function(FunuCyclicCoBound<Function(FutureOr<dynamic>)>))
+      x212;
+  void Function(void Function(FunuCyclicCoBound<Function(FutureOr<void>)>))
+      x213;
+  void Function(void Function(FunuCyclicCoBound<Function(FutureOr<Object?>)>))
+      x214;
+  void Function(void Function(FunuCyclicCoBound<Function(Function(dynamic))>))
+      x215;
+  void Function(void Function(FunuCyclicCoBound<Function(Function(void))>))
+      x216;
+  void Function(void Function(FunuCyclicCoBound<Function(Function(Object?))>))
+      x217;
+  void Function(
+      void Function(
+          FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>)) x218;
+  void Function(
+          void Function(FunuCyclicCoBound<Function(Function(FutureOr<void>))>))
+      x219;
+  void Function(
+      void Function(
+          FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>)) x220;
+  void Function(void Function(CFunu<Funu<dynamic>>)) x221;
+  void Function(void Function(CFunu<Funu<void>>)) x222;
+  void Function(void Function(CFunu<Funu<Object?>>)) x223;
+  void Function(void Function(CFunu<Funu<FutureOr<dynamic>>>)) x224;
+  void Function(void Function(CFunu<Funu<FutureOr<void>>>)) x225;
+  void Function(void Function(CFunu<Funu<FutureOr<Object?>>>)) x226;
+  void Function(void Function(CFunu<Funu<Funu<dynamic>>>)) x227;
+  void Function(void Function(CFunu<Funu<Funu<void>>>)) x228;
+  void Function(void Function(CFunu<Funu<Funu<Object?>>>)) x229;
+  void Function(void Function(CFunu<Funu<Funu<FutureOr<dynamic>>>>)) x230;
+  void Function(void Function(CFunu<Funu<Funu<FutureOr<void>>>>)) x231;
+  void Function(void Function(CFunu<Funu<Funu<FutureOr<Object?>>>>)) x232;
+  void Function(FunuBound<dynamic>) x233;
+  void Function(FunuBound<void>) x234;
+  void Function(FunuBound<Object?>) x235;
+  void Function(FunuBound<FutureOr<dynamic>>) x236;
+  void Function(FunuBound<FutureOr<void>>) x237;
+  void Function(FunuBound<FutureOr<Object?>>) x238;
+  void Function(FunuCyclicBound<dynamic>) x239;
+  void Function(FunuCyclicBound<void>) x240;
+  void Function(FunuCyclicBound<Object?>) x241;
+  void Function(FunuCyclicBound<FutureOr<dynamic>>) x242;
+  void Function(FunuCyclicBound<FutureOr<void>>) x243;
+  void Function(FunuCyclicBound<FutureOr<Object?>>) x244;
+  void Function(FunuCyclicBound<A<dynamic>>) x245;
+  void Function(FunuCyclicBound<A<void>>) x246;
+  void Function(FunuCyclicBound<A<Object?>>) x247;
+  void Function(FunuCyclicBound<A<FutureOr<dynamic>>>) x248;
+  void Function(FunuCyclicBound<A<FutureOr<void>>>) x249;
+  void Function(FunuCyclicBound<A<FutureOr<Object?>>>) x250;
+  void Function(FunuCyclicBound<A<A<dynamic>>>) x251;
+  void Function(FunuCyclicBound<A<A<void>>>) x252;
+  void Function(FunuCyclicBound<A<A<Object?>>>) x253;
+  void Function(FunuCyclicBound<A<A<FutureOr<dynamic>>>>) x254;
+  void Function(FunuCyclicBound<A<A<FutureOr<void>>>>) x255;
+  void Function(FunuCyclicBound<A<A<FutureOr<Object?>>>>) x256;
+  void Function(FunuCyclicCoBound<dynamic>) x257;
+  void Function(FunuCyclicCoBound<void>) x258;
+  void Function(FunuCyclicCoBound<Object?>) x259;
+  void Function(FunuCyclicCoBound<FutureOr<dynamic>>) x260;
+  void Function(FunuCyclicCoBound<FutureOr<void>>) x261;
+  void Function(FunuCyclicCoBound<FutureOr<Object?>>) x262;
+  void Function(FunuCyclicCoBound<Function(dynamic)>) x263;
+  void Function(FunuCyclicCoBound<Function(void)>) x264;
+  void Function(FunuCyclicCoBound<Function(Object?)>) x265;
+  void Function(FunuCyclicCoBound<Function(FutureOr<dynamic>)>) x266;
+  void Function(FunuCyclicCoBound<Function(FutureOr<void>)>) x267;
+  void Function(FunuCyclicCoBound<Function(FutureOr<Object?>)>) x268;
+  void Function(FunuCyclicCoBound<Function(Function(dynamic))>) x269;
+  void Function(FunuCyclicCoBound<Function(Function(void))>) x270;
+  void Function(FunuCyclicCoBound<Function(Function(Object?))>) x271;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>) x272;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<void>))>) x273;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>) x274;
+  void Function(CFunu<Funu<dynamic>>) x275;
+  void Function(CFunu<Funu<void>>) x276;
+  void Function(CFunu<Funu<Object?>>) x277;
+  void Function(CFunu<Funu<FutureOr<dynamic>>>) x278;
+  void Function(CFunu<Funu<FutureOr<void>>>) x279;
+  void Function(CFunu<Funu<FutureOr<Object?>>>) x280;
+  void Function(CFunu<Funu<Funu<dynamic>>>) x281;
+  void Function(CFunu<Funu<Funu<void>>>) x282;
+  void Function(CFunu<Funu<Funu<Object?>>>) x283;
+  void Function(CFunu<Funu<Funu<FutureOr<dynamic>>>>) x284;
+  void Function(CFunu<Funu<Funu<FutureOr<void>>>>) x285;
+  void Function(CFunu<Funu<Funu<FutureOr<Object?>>>>) x286;
+  void Function(FunuBound<dynamic>) Function() x287;
+  void Function(FunuBound<void>) Function() x288;
+  void Function(FunuBound<Object?>) Function() x289;
+  void Function(FunuBound<FutureOr<dynamic>>) Function() x290;
+  void Function(FunuBound<FutureOr<void>>) Function() x291;
+  void Function(FunuBound<FutureOr<Object?>>) Function() x292;
+  void Function(FunuCyclicBound<dynamic>) Function() x293;
+  void Function(FunuCyclicBound<void>) Function() x294;
+  void Function(FunuCyclicBound<Object?>) Function() x295;
+  void Function(FunuCyclicBound<FutureOr<dynamic>>) Function() x296;
+  void Function(FunuCyclicBound<FutureOr<void>>) Function() x297;
+  void Function(FunuCyclicBound<FutureOr<Object?>>) Function() x298;
+  void Function(FunuCyclicBound<A<dynamic>>) Function() x299;
+  void Function(FunuCyclicBound<A<void>>) Function() x300;
+  void Function(FunuCyclicBound<A<Object?>>) Function() x301;
+  void Function(FunuCyclicBound<A<FutureOr<dynamic>>>) Function() x302;
+  void Function(FunuCyclicBound<A<FutureOr<void>>>) Function() x303;
+  void Function(FunuCyclicBound<A<FutureOr<Object?>>>) Function() x304;
+  void Function(FunuCyclicBound<A<A<dynamic>>>) Function() x305;
+  void Function(FunuCyclicBound<A<A<void>>>) Function() x306;
+  void Function(FunuCyclicBound<A<A<Object?>>>) Function() x307;
+  void Function(FunuCyclicBound<A<A<FutureOr<dynamic>>>>) Function() x308;
+  void Function(FunuCyclicBound<A<A<FutureOr<void>>>>) Function() x309;
+  void Function(FunuCyclicBound<A<A<FutureOr<Object?>>>>) Function() x310;
+  void Function(FunuCyclicCoBound<dynamic>) Function() x311;
+  void Function(FunuCyclicCoBound<void>) Function() x312;
+  void Function(FunuCyclicCoBound<Object?>) Function() x313;
+  void Function(FunuCyclicCoBound<FutureOr<dynamic>>) Function() x314;
+  void Function(FunuCyclicCoBound<FutureOr<void>>) Function() x315;
+  void Function(FunuCyclicCoBound<FutureOr<Object?>>) Function() x316;
+  void Function(FunuCyclicCoBound<Function(dynamic)>) Function() x317;
+  void Function(FunuCyclicCoBound<Function(void)>) Function() x318;
+  void Function(FunuCyclicCoBound<Function(Object?)>) Function() x319;
+  void Function(FunuCyclicCoBound<Function(FutureOr<dynamic>)>) Function() x320;
+  void Function(FunuCyclicCoBound<Function(FutureOr<void>)>) Function() x321;
+  void Function(FunuCyclicCoBound<Function(FutureOr<Object?>)>) Function() x322;
+  void Function(FunuCyclicCoBound<Function(Function(dynamic))>) Function() x323;
+  void Function(FunuCyclicCoBound<Function(Function(void))>) Function() x324;
+  void Function(FunuCyclicCoBound<Function(Function(Object?))>) Function() x325;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>)
+      Function() x326;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<void>))>)
+      Function() x327;
+  void Function(FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>)
+      Function() x328;
+  void Function(CFunu<Funu<dynamic>>) Function() x329;
+  void Function(CFunu<Funu<void>>) Function() x330;
+  void Function(CFunu<Funu<Object?>>) Function() x331;
+  void Function(CFunu<Funu<FutureOr<dynamic>>>) Function() x332;
+  void Function(CFunu<Funu<FutureOr<void>>>) Function() x333;
+  void Function(CFunu<Funu<FutureOr<Object?>>>) Function() x334;
+  void Function(CFunu<Funu<Funu<dynamic>>>) Function() x335;
+  void Function(CFunu<Funu<Funu<void>>>) Function() x336;
+  void Function(CFunu<Funu<Funu<Object?>>>) Function() x337;
+  void Function(CFunu<Funu<Funu<FutureOr<dynamic>>>>) Function() x338;
+  void Function(CFunu<Funu<Funu<FutureOr<void>>>>) Function() x339;
+  void Function(CFunu<Funu<Funu<FutureOr<Object?>>>>) Function() x340;
+  void Function<Y extends FunuBound<dynamic>>() x341;
+  void Function<Y extends FunuBound<void>>() x342;
+  void Function<Y extends FunuBound<Object?>>() x343;
+  void Function<Y extends FunuBound<FutureOr<dynamic>>>() x344;
+  void Function<Y extends FunuBound<FutureOr<void>>>() x345;
+  void Function<Y extends FunuBound<FutureOr<Object?>>>() x346;
+  void Function<Y extends FunuCyclicBound<dynamic>>() x347;
+  void Function<Y extends FunuCyclicBound<void>>() x348;
+  void Function<Y extends FunuCyclicBound<Object?>>() x349;
+  void Function<Y extends FunuCyclicBound<FutureOr<dynamic>>>() x350;
+  void Function<Y extends FunuCyclicBound<FutureOr<void>>>() x351;
+  void Function<Y extends FunuCyclicBound<FutureOr<Object?>>>() x352;
+  void Function<Y extends FunuCyclicBound<A<dynamic>>>() x353;
+  void Function<Y extends FunuCyclicBound<A<void>>>() x354;
+  void Function<Y extends FunuCyclicBound<A<Object?>>>() x355;
+  void Function<Y extends FunuCyclicBound<A<FutureOr<dynamic>>>>() x356;
+  void Function<Y extends FunuCyclicBound<A<FutureOr<void>>>>() x357;
+  void Function<Y extends FunuCyclicBound<A<FutureOr<Object?>>>>() x358;
+  void Function<Y extends FunuCyclicBound<A<A<dynamic>>>>() x359;
+  void Function<Y extends FunuCyclicBound<A<A<void>>>>() x360;
+  void Function<Y extends FunuCyclicBound<A<A<Object?>>>>() x361;
+  void Function<Y extends FunuCyclicBound<A<A<FutureOr<dynamic>>>>>() x362;
+  void Function<Y extends FunuCyclicBound<A<A<FutureOr<void>>>>>() x363;
+  void Function<Y extends FunuCyclicBound<A<A<FutureOr<Object?>>>>>() x364;
+  void Function<Y extends FunuCyclicCoBound<dynamic>>() x365;
+  void Function<Y extends FunuCyclicCoBound<void>>() x366;
+  void Function<Y extends FunuCyclicCoBound<Object?>>() x367;
+  void Function<Y extends FunuCyclicCoBound<FutureOr<dynamic>>>() x368;
+  void Function<Y extends FunuCyclicCoBound<FutureOr<void>>>() x369;
+  void Function<Y extends FunuCyclicCoBound<FutureOr<Object?>>>() x370;
+  void Function<Y extends FunuCyclicCoBound<Function(dynamic)>>() x371;
+  void Function<Y extends FunuCyclicCoBound<Function(void)>>() x372;
+  void Function<Y extends FunuCyclicCoBound<Function(Object?)>>() x373;
+  void Function<Y extends FunuCyclicCoBound<Function(FutureOr<dynamic>)>>()
+      x374;
+  void Function<Y extends FunuCyclicCoBound<Function(FutureOr<void>)>>() x375;
+  void Function<Y extends FunuCyclicCoBound<Function(FutureOr<Object?>)>>()
+      x376;
+  void Function<Y extends FunuCyclicCoBound<Function(Function(dynamic))>>()
+      x377;
+  void Function<Y extends FunuCyclicCoBound<Function(Function(void))>>() x378;
+  void Function<Y extends FunuCyclicCoBound<Function(Function(Object?))>>()
+      x379;
+  void Function<
+          Y extends FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>>()
+      x380;
+  void Function<
+      Y extends FunuCyclicCoBound<Function(Function(FutureOr<void>))>>() x381;
+  void Function<
+          Y extends FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>>()
+      x382;
+  void Function<Y extends CFunu<Funu<dynamic>>>() x383;
+  void Function<Y extends CFunu<Funu<void>>>() x384;
+  void Function<Y extends CFunu<Funu<Object?>>>() x385;
+  void Function<Y extends CFunu<Funu<FutureOr<dynamic>>>>() x386;
+  void Function<Y extends CFunu<Funu<FutureOr<void>>>>() x387;
+  void Function<Y extends CFunu<Funu<FutureOr<Object?>>>>() x388;
+  void Function<Y extends CFunu<Funu<Funu<dynamic>>>>() x389;
+  void Function<Y extends CFunu<Funu<Funu<void>>>>() x390;
+  void Function<Y extends CFunu<Funu<Funu<Object?>>>>() x391;
+  void Function<Y extends CFunu<Funu<Funu<FutureOr<dynamic>>>>>() x392;
+  void Function<Y extends CFunu<Funu<Funu<FutureOr<void>>>>>() x393;
+  void Function<Y extends CFunu<Funu<Funu<FutureOr<Object?>>>>>() x394;
+  void Function<Y extends A<FunuBound<dynamic>>>() x395;
+  void Function<Y extends A<FunuBound<void>>>() x396;
+  void Function<Y extends A<FunuBound<Object?>>>() x397;
+  void Function<Y extends A<FunuBound<FutureOr<dynamic>>>>() x398;
+  void Function<Y extends A<FunuBound<FutureOr<void>>>>() x399;
+  void Function<Y extends A<FunuBound<FutureOr<Object?>>>>() x400;
+  void Function<Y extends A<FunuCyclicBound<dynamic>>>() x401;
+  void Function<Y extends A<FunuCyclicBound<void>>>() x402;
+  void Function<Y extends A<FunuCyclicBound<Object?>>>() x403;
+  void Function<Y extends A<FunuCyclicBound<FutureOr<dynamic>>>>() x404;
+  void Function<Y extends A<FunuCyclicBound<FutureOr<void>>>>() x405;
+  void Function<Y extends A<FunuCyclicBound<FutureOr<Object?>>>>() x406;
+  void Function<Y extends A<FunuCyclicBound<A<dynamic>>>>() x407;
+  void Function<Y extends A<FunuCyclicBound<A<void>>>>() x408;
+  void Function<Y extends A<FunuCyclicBound<A<Object?>>>>() x409;
+  void Function<Y extends A<FunuCyclicBound<A<FutureOr<dynamic>>>>>() x410;
+  void Function<Y extends A<FunuCyclicBound<A<FutureOr<void>>>>>() x411;
+  void Function<Y extends A<FunuCyclicBound<A<FutureOr<Object?>>>>>() x412;
+  void Function<Y extends A<FunuCyclicBound<A<A<dynamic>>>>>() x413;
+  void Function<Y extends A<FunuCyclicBound<A<A<void>>>>>() x414;
+  void Function<Y extends A<FunuCyclicBound<A<A<Object?>>>>>() x415;
+  void Function<Y extends A<FunuCyclicBound<A<A<FutureOr<dynamic>>>>>>() x416;
+  void Function<Y extends A<FunuCyclicBound<A<A<FutureOr<void>>>>>>() x417;
+  void Function<Y extends A<FunuCyclicBound<A<A<FutureOr<Object?>>>>>>() x418;
+  void Function<Y extends A<FunuCyclicCoBound<dynamic>>>() x419;
+  void Function<Y extends A<FunuCyclicCoBound<void>>>() x420;
+  void Function<Y extends A<FunuCyclicCoBound<Object?>>>() x421;
+  void Function<Y extends A<FunuCyclicCoBound<FutureOr<dynamic>>>>() x422;
+  void Function<Y extends A<FunuCyclicCoBound<FutureOr<void>>>>() x423;
+  void Function<Y extends A<FunuCyclicCoBound<FutureOr<Object?>>>>() x424;
+  void Function<Y extends A<FunuCyclicCoBound<Function(dynamic)>>>() x425;
+  void Function<Y extends A<FunuCyclicCoBound<Function(void)>>>() x426;
+  void Function<Y extends A<FunuCyclicCoBound<Function(Object?)>>>() x427;
+  void Function<Y extends A<FunuCyclicCoBound<Function(FutureOr<dynamic>)>>>()
+      x428;
+  void Function<Y extends A<FunuCyclicCoBound<Function(FutureOr<void>)>>>()
+      x429;
+  void Function<Y extends A<FunuCyclicCoBound<Function(FutureOr<Object?>)>>>()
+      x430;
+  void Function<Y extends A<FunuCyclicCoBound<Function(Function(dynamic))>>>()
+      x431;
+  void Function<Y extends A<FunuCyclicCoBound<Function(Function(void))>>>()
+      x432;
+  void Function<Y extends A<FunuCyclicCoBound<Function(Function(Object?))>>>()
+      x433;
+  void Function<
+      Y extends A<
+          FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>>>() x434;
+  void Function<
+          Y extends A<FunuCyclicCoBound<Function(Function(FutureOr<void>))>>>()
+      x435;
+  void Function<
+      Y extends A<
+          FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>>>() x436;
+  void Function<Y extends A<CFunu<Funu<dynamic>>>>() x437;
+  void Function<Y extends A<CFunu<Funu<void>>>>() x438;
+  void Function<Y extends A<CFunu<Funu<Object?>>>>() x439;
+  void Function<Y extends A<CFunu<Funu<FutureOr<dynamic>>>>>() x440;
+  void Function<Y extends A<CFunu<Funu<FutureOr<void>>>>>() x441;
+  void Function<Y extends A<CFunu<Funu<FutureOr<Object?>>>>>() x442;
+  void Function<Y extends A<CFunu<Funu<Funu<dynamic>>>>>() x443;
+  void Function<Y extends A<CFunu<Funu<Funu<void>>>>>() x444;
+  void Function<Y extends A<CFunu<Funu<Funu<Object?>>>>>() x445;
+  void Function<Y extends A<CFunu<Funu<Funu<FutureOr<dynamic>>>>>>() x446;
+  void Function<Y extends A<CFunu<Funu<Funu<FutureOr<void>>>>>>() x447;
+  void Function<Y extends A<CFunu<Funu<Funu<FutureOr<Object?>>>>>>() x448;
+  Finv<FunuBound<dynamic>> x449;
+  Finv<FunuBound<void>> x450;
+  Finv<FunuBound<Object?>> x451;
+  Finv<FunuBound<FutureOr<dynamic>>> x452;
+  Finv<FunuBound<FutureOr<void>>> x453;
+  Finv<FunuBound<FutureOr<Object?>>> x454;
+  Finv<FunuCyclicBound<dynamic>> x455;
+  Finv<FunuCyclicBound<void>> x456;
+  Finv<FunuCyclicBound<Object?>> x457;
+  Finv<FunuCyclicBound<FutureOr<dynamic>>> x458;
+  Finv<FunuCyclicBound<FutureOr<void>>> x459;
+  Finv<FunuCyclicBound<FutureOr<Object?>>> x460;
+  Finv<FunuCyclicBound<A<dynamic>>> x461;
+  Finv<FunuCyclicBound<A<void>>> x462;
+  Finv<FunuCyclicBound<A<Object?>>> x463;
+  Finv<FunuCyclicBound<A<FutureOr<dynamic>>>> x464;
+  Finv<FunuCyclicBound<A<FutureOr<void>>>> x465;
+  Finv<FunuCyclicBound<A<FutureOr<Object?>>>> x466;
+  Finv<FunuCyclicBound<A<A<dynamic>>>> x467;
+  Finv<FunuCyclicBound<A<A<void>>>> x468;
+  Finv<FunuCyclicBound<A<A<Object?>>>> x469;
+  Finv<FunuCyclicBound<A<A<FutureOr<dynamic>>>>> x470;
+  Finv<FunuCyclicBound<A<A<FutureOr<void>>>>> x471;
+  Finv<FunuCyclicBound<A<A<FutureOr<Object?>>>>> x472;
+  Finv<FunuCyclicCoBound<dynamic>> x473;
+  Finv<FunuCyclicCoBound<void>> x474;
+  Finv<FunuCyclicCoBound<Object?>> x475;
+  Finv<FunuCyclicCoBound<FutureOr<dynamic>>> x476;
+  Finv<FunuCyclicCoBound<FutureOr<void>>> x477;
+  Finv<FunuCyclicCoBound<FutureOr<Object?>>> x478;
+  Finv<FunuCyclicCoBound<Function(dynamic)>> x479;
+  Finv<FunuCyclicCoBound<Function(void)>> x480;
+  Finv<FunuCyclicCoBound<Function(Object?)>> x481;
+  Finv<FunuCyclicCoBound<Function(FutureOr<dynamic>)>> x482;
+  Finv<FunuCyclicCoBound<Function(FutureOr<void>)>> x483;
+  Finv<FunuCyclicCoBound<Function(FutureOr<Object?>)>> x484;
+  Finv<FunuCyclicCoBound<Function(Function(dynamic))>> x485;
+  Finv<FunuCyclicCoBound<Function(Function(void))>> x486;
+  Finv<FunuCyclicCoBound<Function(Function(Object?))>> x487;
+  Finv<FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x488;
+  Finv<FunuCyclicCoBound<Function(Function(FutureOr<void>))>> x489;
+  Finv<FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>> x490;
+  Finv<CFunu<Funu<dynamic>>> x491;
+  Finv<CFunu<Funu<void>>> x492;
+  Finv<CFunu<Funu<Object?>>> x493;
+  Finv<CFunu<Funu<FutureOr<dynamic>>>> x494;
+  Finv<CFunu<Funu<FutureOr<void>>>> x495;
+  Finv<CFunu<Funu<FutureOr<Object?>>>> x496;
+  Finv<CFunu<Funu<Funu<dynamic>>>> x497;
+  Finv<CFunu<Funu<Funu<void>>>> x498;
+  Finv<CFunu<Funu<Funu<Object?>>>> x499;
+  Finv<CFunu<Funu<Funu<FutureOr<dynamic>>>>> x500;
+  Finv<CFunu<Funu<Funu<FutureOr<void>>>>> x501;
+  Finv<CFunu<Funu<Funu<FutureOr<Object?>>>>> x502;
+  Funu<FunuBound<dynamic>> x503;
+  Funu<FunuBound<void>> x504;
+  Funu<FunuBound<Object?>> x505;
+  Funu<FunuBound<FutureOr<dynamic>>> x506;
+  Funu<FunuBound<FutureOr<void>>> x507;
+  Funu<FunuBound<FutureOr<Object?>>> x508;
+  Funu<FunuCyclicBound<dynamic>> x509;
+  Funu<FunuCyclicBound<void>> x510;
+  Funu<FunuCyclicBound<Object?>> x511;
+  Funu<FunuCyclicBound<FutureOr<dynamic>>> x512;
+  Funu<FunuCyclicBound<FutureOr<void>>> x513;
+  Funu<FunuCyclicBound<FutureOr<Object?>>> x514;
+  Funu<FunuCyclicBound<A<dynamic>>> x515;
+  Funu<FunuCyclicBound<A<void>>> x516;
+  Funu<FunuCyclicBound<A<Object?>>> x517;
+  Funu<FunuCyclicBound<A<FutureOr<dynamic>>>> x518;
+  Funu<FunuCyclicBound<A<FutureOr<void>>>> x519;
+  Funu<FunuCyclicBound<A<FutureOr<Object?>>>> x520;
+  Funu<FunuCyclicBound<A<A<dynamic>>>> x521;
+  Funu<FunuCyclicBound<A<A<void>>>> x522;
+  Funu<FunuCyclicBound<A<A<Object?>>>> x523;
+  Funu<FunuCyclicBound<A<A<FutureOr<dynamic>>>>> x524;
+  Funu<FunuCyclicBound<A<A<FutureOr<void>>>>> x525;
+  Funu<FunuCyclicBound<A<A<FutureOr<Object?>>>>> x526;
+  Funu<FunuCyclicCoBound<dynamic>> x527;
+  Funu<FunuCyclicCoBound<void>> x528;
+  Funu<FunuCyclicCoBound<Object?>> x529;
+  Funu<FunuCyclicCoBound<FutureOr<dynamic>>> x530;
+  Funu<FunuCyclicCoBound<FutureOr<void>>> x531;
+  Funu<FunuCyclicCoBound<FutureOr<Object?>>> x532;
+  Funu<FunuCyclicCoBound<Function(dynamic)>> x533;
+  Funu<FunuCyclicCoBound<Function(void)>> x534;
+  Funu<FunuCyclicCoBound<Function(Object?)>> x535;
+  Funu<FunuCyclicCoBound<Function(FutureOr<dynamic>)>> x536;
+  Funu<FunuCyclicCoBound<Function(FutureOr<void>)>> x537;
+  Funu<FunuCyclicCoBound<Function(FutureOr<Object?>)>> x538;
+  Funu<FunuCyclicCoBound<Function(Function(dynamic))>> x539;
+  Funu<FunuCyclicCoBound<Function(Function(void))>> x540;
+  Funu<FunuCyclicCoBound<Function(Function(Object?))>> x541;
+  Funu<FunuCyclicCoBound<Function(Function(FutureOr<dynamic>))>> x542;
+  Funu<FunuCyclicCoBound<Function(Function(FutureOr<void>))>> x543;
+  Funu<FunuCyclicCoBound<Function(Function(FutureOr<Object?>))>> x544;
+  Funu<CFunu<Funu<dynamic>>> x545;
+  Funu<CFunu<Funu<void>>> x546;
+  Funu<CFunu<Funu<Object?>>> x547;
+  Funu<CFunu<Funu<FutureOr<dynamic>>>> x548;
+  Funu<CFunu<Funu<FutureOr<void>>>> x549;
+  Funu<CFunu<Funu<FutureOr<Object?>>>> x550;
+  Funu<CFunu<Funu<Funu<dynamic>>>> x551;
+  Funu<CFunu<Funu<Funu<void>>>> x552;
+  Funu<CFunu<Funu<Funu<Object?>>>> x553;
+  Funu<CFunu<Funu<Funu<FutureOr<dynamic>>>>> x554;
+  Funu<CFunu<Funu<Funu<FutureOr<void>>>>> x555;
+  Funu<CFunu<Funu<Funu<FutureOr<Object?>>>>> x556;
+}
+
+void main() {
+  testCovariantSuperbound<Never>();
+  testContravariantSuperbound<Never>();
+  testInvariantSuperbound<Never>();
+  testVarianceLessSuperbound<Never>();
+}
diff --git a/tests/language/mixin/forwarding_stub_call_test.dart b/tests/language/mixin/forwarding_stub_call_test.dart
new file mode 100644
index 0000000..3cef355
--- /dev/null
+++ b/tests/language/mixin/forwarding_stub_call_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+// Test for calling a method for which a forwarding super stub has been
+// inserted.
+
+import 'package:expect/expect.dart';
+
+class Super<T> {
+  void method(T t) {}
+}
+
+class Mixin {
+  void method(int t) {}
+}
+
+// A forwarding super stub is inserted:
+//
+//     void method(/*generic-covariant-impl*/ int t) => super.method(t);
+//
+class Class = Super<int> with Mixin;
+
+class Subclass extends Class {
+  void test() {
+    // Test that we can call the method.
+    super.method(0);
+  }
+}
+
+main() {
+  Super<Object> s = new Subclass()..test();
+  // Test that the covariance check is performed.
+  Expect.throws(() => s.method(''));
+}
diff --git a/tests/language/mixin/forwarding_stub_set_test.dart b/tests/language/mixin/forwarding_stub_set_test.dart
new file mode 100644
index 0000000..e0c2b9b
--- /dev/null
+++ b/tests/language/mixin/forwarding_stub_set_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+// Test for assigning to a field for which a forwarding super stub has been
+// inserted.
+
+import 'package:expect/expect.dart';
+
+class Super<T> {
+  T? field;
+}
+
+class Mixin {
+  int? field;
+}
+
+// A forwarding super stub is inserted:
+//
+//     void set field(/*generic-covariant-impl*/ int t) => super.field = t;
+//
+class Class = Super<int> with Mixin;
+
+class Subclass extends Class {
+  void test() {
+    // Test that we can perform the assignment.
+    super.field = 0;
+  }
+}
+
+main() {
+  Super<Object> s = new Subclass()..test();
+  // Test that the covariance check is performed.
+  Expect.throws(() => s.field = '');
+}
diff --git a/tests/language/mixin/forwarding_stub_tearoff_test.dart b/tests/language/mixin/forwarding_stub_tearoff_test.dart
new file mode 100644
index 0000000..470c52e
--- /dev/null
+++ b/tests/language/mixin/forwarding_stub_tearoff_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+// Test for tearing off a method for which a forwarding super stub has been
+// inserted.
+
+import 'package:expect/expect.dart';
+
+class Super<T> {
+  void method(T t) {}
+}
+
+class Mixin {
+  void method(int t) {}
+}
+
+// A forwarding super stub is inserted:
+//
+//     void method(/*generic-covariant-impl*/ int t) => super.method(t);
+//
+class Class = Super<int> with Mixin;
+
+class Subclass extends Class {
+  void test() {
+    // Test that we can tear off the method.
+    void Function(int) f = super.method;
+    f(0);
+  }
+}
+
+main() {
+  Super<Object> s = new Subclass()..test();
+  // Test that the covariance check is performed.
+  Expect.throws(() => s.method(''));
+}
diff --git a/tests/lib/js/js_util/assert_function_interop_test.dart b/tests/lib/js/js_util/assert_function_interop_test.dart
new file mode 100644
index 0000000..53d4386
--- /dev/null
+++ b/tests/lib/js/js_util/assert_function_interop_test.dart
@@ -0,0 +1,93 @@
+// 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.
+
+// dart2jsOptions=--enable-asserts
+
+// Tests that `js_util` methods correctly check that function arguments allow
+// interop.
+
+@JS()
+library assert_function_interop_test;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/expect.dart';
+
+@JS()
+external void eval(String code);
+
+@JS()
+class JSClass {
+  external JSClass();
+}
+
+@JS()
+external get JSClassWithFuncArgs;
+
+@JS()
+external void Function() get jsFunction;
+
+void dartFunction() {}
+
+@pragma('dart2js:noInline')
+@pragma('dart2js:assumeDynamic')
+confuse(x) => x;
+
+void main() {
+  eval(r"""
+    function JSClass() {
+      this.functionProperty = function() {};
+      this.methodWithFuncArgs = function(f1, f2) {
+        f1();
+        if (arguments.length == 2) f2();
+      };
+    }
+    function JSClassWithFuncArgs(f1, f2) {
+      f1();
+      if (arguments.length == 2) f2();
+    }
+    function jsFunction() {}
+  """);
+
+  var jsClass = JSClass();
+  dynamic d = confuse(dartFunction);
+  var interopFunction = allowInterop(dartFunction);
+  var interopDynamic = confuse(allowInterop(dartFunction));
+
+  // Functions that aren't wrapped with `allowInterop` should throw.
+  Expect.throws(
+      () => js_util.setProperty(jsClass, 'functionProperty', dartFunction));
+  Expect.throws(() => js_util.setProperty(jsClass, 'functionProperty', d));
+  // Correctly wrapped functions should not throw.
+  js_util.setProperty(jsClass, 'functionProperty', interopFunction);
+  js_util.setProperty(jsClass, 'functionProperty', interopDynamic);
+
+  // Using a JS function should not throw.
+  js_util.setProperty(jsClass, 'functionProperty', jsFunction);
+
+  Expect.throws(
+      () => js_util.callMethod(jsClass, 'methodWithFuncArgs', [dartFunction]));
+  Expect.throws(() => js_util.callMethod(jsClass, 'methodWithFuncArgs', [d]));
+  js_util.callMethod(jsClass, 'methodWithFuncArgs', [interopFunction]);
+  js_util.callMethod(jsClass, 'methodWithFuncArgs', [interopDynamic]);
+  // Check to see that all arguments are checked.
+  Expect.throws(() => js_util.callMethod(
+      jsClass, 'methodWithFuncArgs', [interopFunction, dartFunction]));
+  js_util.callMethod(
+      jsClass, 'methodWithFuncArgs', [interopFunction, interopFunction]);
+
+  js_util.callMethod(jsClass, 'methodWithFuncArgs', [jsFunction]);
+
+  Expect.throws(
+      () => js_util.callConstructor(JSClassWithFuncArgs, [dartFunction]));
+  Expect.throws(() => js_util.callConstructor(JSClassWithFuncArgs, [d]));
+  js_util.callConstructor(JSClassWithFuncArgs, [interopFunction]);
+  js_util.callConstructor(JSClassWithFuncArgs, [interopDynamic]);
+  Expect.throws(() => js_util
+      .callConstructor(JSClassWithFuncArgs, [interopFunction, dartFunction]));
+  js_util
+      .callConstructor(JSClassWithFuncArgs, [interopFunction, interopFunction]);
+
+  js_util.callConstructor(JSClassWithFuncArgs, [jsFunction]);
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 40c7ad5..6cc876f 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -34,6 +34,7 @@
 html/xhr_test/xhr: Skip # Times out.  Issue 21527
 
 [ $csp ]
+html/js_interop_constructor_name/*: SkipByDesign # Issue 42085.
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
 js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/method_call_on_object_test: SkipByDesign # Issue 42085.
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 535b366..888c0d1 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -34,9 +34,11 @@
 html/xhr_test/xhr: Skip # Times out.  Issue 21527
 
 [ $csp ]
+html/js_interop_constructor_name/*: SkipByDesign # Issue 42085.
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
 js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/method_call_on_object_test: SkipByDesign # Issue 42085.
+js/mock_test/*: SkipByDesign # Issue 42085.
 js/parameters_test: SkipByDesign # Issue 42085.
 
 [ $compiler != dart2js && $compiler != dartdevk ]
diff --git a/tools/VERSION b/tools/VERSION
index 7bed7b7..5f3bdcf 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 179
+PRERELEASE 180
 PRERELEASE_PATCH 0
\ No newline at end of file
