Version 2.12.0-180.0.dev

Merge commit '78956cb8d4ed90ce3a1e94763b907964df20a4c6' into 'dev'
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