Version 2.18.0-185.0.dev

Merge commit '2acf0360232d481549b545f2de0a5a6237bacc42' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aef3ad5..cbd5912 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
+## 2.19.0
+
+### Language
+
+- **Breaking Change** [#48167](https://github.com/dart-lang/sdk/issues/48167):
+  Mixin of classes that don't extend `Object` is no longer supported:
+  ```dart
+  class Base {}
+  class Mixin extends Base {}
+  class C extends Base with Mixin {}
+  ```
+  This should instead be written using a mixin declaration of `Mixin`:
+  ```dart
+  class Base {}
+  mixin Mixin on Base {}
+  class C extends Base with Mixin {}
+  ```
+  This feature has not been supported in most compilation targets for some
+  time but is now completely removed.
+
 ## 2.18.0
 
 ### Language
diff --git a/DEPS b/DEPS
index 1125cc8..f159d22 100644
--- a/DEPS
+++ b/DEPS
@@ -319,7 +319,7 @@
       Var("dart_git") + "crypto.git" + "@" + Var("crypto_rev"),
   Var("dart_root") + "/third_party/pkg/csslib":
       Var("dart_git") + "csslib.git" + "@" + Var("csslib_rev"),
-  Var("dart_root") + "/third_party/pkg_tested/dart_style":
+  Var("dart_root") + "/third_party/pkg/dart_style":
       Var("dart_git") + "dart_style.git" + "@" + Var("dart_style_rev"),
   Var("dart_root") + "/third_party/pkg/dartdoc":
       Var("dart_git") + "dartdoc.git" + "@" + Var("dartdoc_rev"),
@@ -361,7 +361,7 @@
       Var("dart_git") + "mockito.git" + "@" + Var("mockito_rev"),
   Var("dart_root") + "/third_party/pkg/oauth2":
       Var("dart_git") + "oauth2.git" + "@" + Var("oauth2_rev"),
-  Var("dart_root") + "/third_party/pkg_tested/package_config":
+  Var("dart_root") + "/third_party/pkg/package_config":
       Var("dart_git") + "package_config.git" +
       "@" + Var("package_config_rev"),
   Var("dart_root") + "/third_party/pkg/path":
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index a54317b..42e8fa8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -7841,6 +7841,31 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
+        String
+            name)> templateMixinInheritsFromNotObject = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""The class '#name' can't be used as a mixin because it extends a class other than 'Object'.""",
+    withArguments: _withArgumentsMixinInheritsFromNotObject);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMixinInheritsFromNotObject =
+    const Code<Message Function(String name)>("MixinInheritsFromNotObject",
+        analyzerCodes: <String>["MIXIN_INHERITS_FROM_NOT_OBJECT"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMixinInheritsFromNotObject(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMixinInheritsFromNotObject,
+      problemMessage:
+          """The class '${name}' can't be used as a mixin because it extends a class other than 'Object'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
         String string,
         String
             string2)> templateModifierOutOfOrder = const Template<
diff --git a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
index 3448b7b..ab1a1486 100644
--- a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
@@ -24,12 +24,19 @@
   /// Record that the set of plugins known to the [pluginManager] has changed.
   void changedPlugins(PluginManager pluginManager);
 
+  /// Record the number of [added] folders and [removed] folders.
+  void changedWorkspaceFolders(
+      {required List<String> added, required List<String> removed});
+
   /// Record that the given [notification] was received and has been handled.
   void handledNotificationMessage(
       {required NotificationMessage notification,
       required DateTime startTime,
       required DateTime endTime}) {}
 
+  /// Record the number of [openWorkspacePaths].
+  void initialized({required List<String> openWorkspacePaths});
+
   /// Record that the given [response] was sent to the client.
   void sentResponse({required Response response});
 
diff --git a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
index f294c37..092440d 100644
--- a/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/google_analytics_manager.dart
@@ -45,6 +45,15 @@
   }
 
   @override
+  void changedWorkspaceFolders(
+      {required List<String> added, required List<String> removed}) {
+    var requestData =
+        _getRequestData(Method.workspace_didChangeWorkspaceFolders.toString());
+    requestData.addValue('added', added.length);
+    requestData.addValue('removed', removed.length);
+  }
+
+  @override
   void handledNotificationMessage(
       {required NotificationMessage notification,
       required DateTime startTime,
@@ -62,6 +71,12 @@
   }
 
   @override
+  void initialized({required List<String> openWorkspacePaths}) {
+    var requestData = _getRequestData(Method.initialized.toString());
+    requestData.addValue('openWorkspacePaths', openWorkspacePaths.length);
+  }
+
+  @override
   void sentResponse({required Response response}) {
     var sendTime = DateTime.now();
     _recordResponseData(response.id, sendTime);
@@ -95,9 +110,7 @@
 
   @override
   void startedGetRefactoring(EditGetRefactoringParams params) {
-    var requestData = _completedRequests.putIfAbsent(
-        EDIT_REQUEST_GET_REFACTORING,
-        () => _RequestData(EDIT_REQUEST_GET_REFACTORING));
+    var requestData = _getRequestData(EDIT_REQUEST_GET_REFACTORING);
     requestData.addEnumValue(
         EDIT_REQUEST_GET_REFACTORING_KIND, params.kind.name);
   }
@@ -118,9 +131,7 @@
 
   @override
   void startedSetAnalysisRoots(AnalysisSetAnalysisRootsParams params) {
-    var requestData = _completedRequests.putIfAbsent(
-        ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
-        () => _RequestData(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS));
+    var requestData = _getRequestData(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS);
     requestData.addValue(
         ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED, params.included.length);
     requestData.addValue(
@@ -129,9 +140,7 @@
 
   @override
   void startedSetPriorityFiles(AnalysisSetPriorityFilesParams params) {
-    var requestData = _completedRequests.putIfAbsent(
-        ANALYSIS_REQUEST_SET_PRIORITY_FILES,
-        () => _RequestData(ANALYSIS_REQUEST_SET_PRIORITY_FILES));
+    var requestData = _getRequestData(ANALYSIS_REQUEST_SET_PRIORITY_FILES);
     requestData.addValue(
         ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES, params.files.length);
   }
@@ -151,6 +160,11 @@
         sdkVersion: sdkVersion);
   }
 
+  /// Return the request data for requests that have the given [method].
+  _RequestData _getRequestData(String method) {
+    return _completedRequests.putIfAbsent(method, () => _RequestData(method));
+  }
+
   /// Record that the request with the given [id] was responded to at the given
   /// [sendTime].
   void _recordResponseData(String id, DateTime sendTime) {
@@ -163,8 +177,7 @@
     var clientRequestTime = data.clientRequestTime;
     var startTime = data.startTime.millisecondsSinceEpoch;
 
-    var requestData =
-        _completedRequests.putIfAbsent(method, () => _RequestData(method));
+    var requestData = _getRequestData(method);
 
     if (clientRequestTime != null) {
       var latencyTime = startTime - clientRequestTime;
diff --git a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
index 3302a1e..bcf2759 100644
--- a/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/noop_analytics_manager.dart
@@ -15,12 +15,19 @@
   void changedPlugins(PluginManager pluginManager) {}
 
   @override
+  void changedWorkspaceFolders(
+      {required List<String> added, required List<String> removed}) {}
+
+  @override
   void handledNotificationMessage(
       {required NotificationMessage notification,
       required DateTime startTime,
       required DateTime endTime}) {}
 
   @override
+  void initialized({required List<String> openWorkspacePaths}) {}
+
+  @override
   void sentResponse({required Response response}) {}
 
   @override
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
index 590e49d..d1dc6f9 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_change_workspace_folders.dart
@@ -27,15 +27,20 @@
       return success(null);
     }
 
-    final added =
-        params.event.added.map((wf) => Uri.parse(wf.uri).toFilePath()).toList();
+    final added = _convertWorkspaceFolders(params.event.added);
+    final removed = _convertWorkspaceFolders(params.event.removed);
 
-    final removed = params.event.removed
-        .map((wf) => Uri.parse(wf.uri).toFilePath())
-        .toList();
+    server.analyticsManager
+        .changedWorkspaceFolders(added: added, removed: removed);
 
     await server.updateWorkspaceFolders(added, removed);
 
     return success(null);
   }
+
+  /// Return the result of converting the list of workspace [folders] to file
+  /// paths.
+  List<String> _convertWorkspaceFolders(List<WorkspaceFolder> folders) {
+    return folders.map((wf) => Uri.parse(wf.uri).toFilePath()).toList();
+  }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
index e728d79..a0a34fa 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
@@ -26,6 +26,8 @@
       server,
     );
 
+    server.analyticsManager.initialized(openWorkspacePaths: openWorkspacePaths);
+
     if (server.initializationOptions.onlyAnalyzeProjectsWithOpenFiles) {
       await server.fetchClientConfigurationAndPerformDynamicRegistration();
     } else {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
index d690c0b..a8d459b 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
@@ -27,6 +27,11 @@
   void apply(DartFileEditBuilder builder, DataDrivenFix fix, _Data data) {
     var referenceRange = data.referenceRange;
     builder.addSimpleReplacement(referenceRange, _referenceTo(newElement));
+    var libraryUris = newElement.libraryUris;
+    if (libraryUris.isEmpty) return;
+    if (!libraryUris.any((uri) => builder.importsLibrary(uri))) {
+      builder.importLibraryElement(libraryUris.first);
+    }
   }
 
   @override
diff --git a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
index ec74340..905c990 100644
--- a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
+++ b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
@@ -63,6 +63,35 @@
     ]);
   }
 
+  void test_server_request_analysisDidChangeWorkspaceFolders() {
+    _defaultStartup();
+    var params = DidChangeWorkspaceFoldersParams(
+        event: WorkspaceFoldersChangeEvent(added: [], removed: []));
+    var request = RequestMessage(
+        jsonrpc: '',
+        id: Either2.t1(1),
+        method: Method.workspace_didChangeWorkspaceFolders,
+        params: params.toJson());
+    manager.startedRequestMessage(request: request, startTime: _now());
+    manager
+        .changedWorkspaceFolders(added: ['a', 'b', 'c'], removed: ['d', 'e']);
+    manager.sentResponseMessage(
+        response: ResponseMessage(jsonrpc: '', id: Either2.t1(1)));
+    manager.shutdown();
+    analytics.assertEvents([
+      _ExpectedEvent.session(),
+      _ExpectedEvent.request(parameters: {
+        'latency': _IsPercentiles(),
+        'method': Method.workspace_didChangeWorkspaceFolders.toString(),
+        'duration': _IsPercentiles(),
+        'added':
+            '{"count":1,"percentiles":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]}',
+        'removed':
+            '{"count":1,"percentiles":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]}',
+      }),
+    ]);
+  }
+
   void test_server_request_analysisSetAnalysisRoots() {
     _defaultStartup();
     var params = AnalysisSetAnalysisRootsParams(['a', 'b', 'c'], ['d', 'e']);
@@ -127,6 +156,31 @@
     ]);
   }
 
+  void test_server_request_initialized() {
+    _defaultStartup();
+    var params = InitializedParams();
+    var request = RequestMessage(
+        jsonrpc: '',
+        id: Either2.t1(1),
+        method: Method.initialized,
+        params: params.toJson());
+    manager.startedRequestMessage(request: request, startTime: _now());
+    manager.initialized(openWorkspacePaths: ['a', 'b', 'c']);
+    manager.sentResponseMessage(
+        response: ResponseMessage(jsonrpc: '', id: Either2.t1(1)));
+    manager.shutdown();
+    analytics.assertEvents([
+      _ExpectedEvent.session(),
+      _ExpectedEvent.request(parameters: {
+        'latency': _IsPercentiles(),
+        'method': Method.initialized.toString(),
+        'duration': _IsPercentiles(),
+        'openWorkspacePaths':
+            '{"count":1,"percentiles":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]}',
+      }),
+    ]);
+  }
+
   void test_server_request_noAdditional() {
     _defaultStartup();
     manager.startedRequest(
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
index a7b70a4..b4643f2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/replaced_by_test.dart
@@ -14,6 +14,7 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplacedByTest);
+    defineReflectiveTests(ReplacedByUriSemanticsTest);
   });
 }
 
@@ -862,6 +863,83 @@
   }
 }
 
+@reflectiveTest
+class ReplacedByUriSemanticsTest extends DataDrivenFixProcessorTest {
+  Future<void> test_new_element_uris_multiple() async {
+    setPackageContent('');
+    newFile('$workspaceRootPath/p/lib/expect.dart', '''
+void expect(actual, expected) {}
+''');
+    newFile('$workspaceRootPath/p/lib/export.dart', '''
+export 'expect.dart';
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title:  'Replace expect'
+    date: 2022-05-12
+    bulkApply: false
+    element:
+      uris: ['$importUri']
+      function: 'expect'
+    changes:
+      - kind: 'replacedBy'
+        newElement:
+          uris: ['package:p/expect.dart', 'package:p/export.dart']
+          function: 'expect'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+f() {
+  expect(true, true);
+}
+''');
+    await assertHasFix('''
+import 'package:p/expect.dart';
+import '$importUri';
+
+f() {
+  expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+  }
+
+  Future<void> test_new_element_uris_single() async {
+    setPackageContent('');
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title:  'Replace expect'
+    date: 2022-05-12
+    bulkApply: false
+    element:
+      uris: ['$importUri']
+      function: 'expect'
+    changes:
+      - kind: 'replacedBy'
+        newElement:
+          uris: ['package:matcher/expect.dart']
+          function: 'expect'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''');
+    await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+  }
+}
+
 class _Element {
   final ElementKind kind;
   final List<String> components;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
index 544f27c..f9623c1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
@@ -17,6 +17,7 @@
 import 'rename_test.dart' as rename;
 import 'replaced_by_test.dart' as replaced_by;
 import 'sdk_fix_test.dart' as sdk_fix;
+import 'test_use_case_test.dart' as test_use_case;
 import 'transform_override_set_parser_test.dart'
     as transform_override_set_parser;
 import 'transform_set_manager_test.dart' as transform_set_manager;
@@ -37,6 +38,7 @@
     rename.main();
     replaced_by.main();
     sdk_fix.main();
+    test_use_case.main();
     transform_override_set_parser.main();
     transform_set_manager.main();
     transform_set_parser.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart
new file mode 100644
index 0000000..aa0386b
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_use_case_test.dart
@@ -0,0 +1,102 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../fix_processor.dart';
+import 'data_driven_test_support.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TestUseCaseTest);
+  });
+}
+
+@reflectiveTest
+class TestUseCaseTest extends DataDrivenFixProcessorTest {
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/23067')
+  Future<void> test_expect_export_deprecated() async {
+    newFile('$workspaceRootPath/p/lib/lib.dart', '''
+library p;
+@deprecated
+export 'package:matcher/expect.dart' show expect;
+''');
+    newFile('$workspaceRootPath/matcher/lib/expect.dart', '''
+void expect(actual, matcher) {}
+''');
+
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'matcher', rootPath: '$workspaceRootPath/matcher')
+        ..add(name: 'p', rootPath: '$workspaceRootPath/p'),
+    );
+
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title:  'Replace expect'
+    date: 2022-05-12
+    bulkApply: false
+    element:
+      uris: ['$importUri']
+      function: 'expect'
+    changes:
+      - kind: 'replacedBy'
+        newElement:
+          uris: ['package:matcher/expect.dart']
+          function: 'expect'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''');
+    await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''');
+  }
+
+  Future<void> test_expect_removed() async {
+    setPackageContent('''
+''');
+
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title:  'Replace expect'
+    date: 2022-05-12
+    bulkApply: false
+    element:
+      uris: ['$importUri']
+      function: 'expect'
+    changes:
+      - kind: 'replacedBy'
+        newElement:
+          uris: ['package:matcher/expect.dart']
+          function: 'expect'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''');
+    await assertHasFix('''
+import 'package:matcher/expect.dart';
+import '$importUri';
+
+main() {
+  expect(true, true);
+}
+''', errorFilter: ignoreUnusedImport);
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index a37d97a..7eb9526 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart' as impl;
+import 'package:analyzer/src/summary2/combinator.dart';
 
 /// The scope defined by a class.
 class ClassScope extends EnclosedScope {
@@ -141,10 +141,21 @@
   PrefixScope(this._library, PrefixElement? prefix) {
     for (var import in _library.imports) {
       if (import.prefix == prefix) {
-        var elements = impl.NamespaceBuilder().getImportedElements(import);
-        elements.forEach(_add);
-        if (import.isDeferred) {
-          _deferredLibrary ??= import.importedLibrary;
+        final importedLibrary = import.importedLibrary;
+        if (importedLibrary is LibraryElementImpl) {
+          // TODO(scheglov) Ask it from `_library`.
+          final elementFactory = importedLibrary.session.elementFactory;
+          final combinators = import.combinators.build();
+          for (final exportedReference in importedLibrary.exportedReferences) {
+            final reference = exportedReference.reference;
+            if (combinators.allows(reference.name)) {
+              final element = elementFactory.elementOfReference(reference)!;
+              _add(element);
+            }
+          }
+          if (import.isDeferred) {
+            _deferredLibrary ??= importedLibrary;
+          }
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
index 02c0dcd..a507543 100644
--- a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
@@ -19,6 +19,8 @@
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary2/linked_element_factory.dart';
+import 'package:analyzer/src/summary2/reference.dart';
 
 MicroContextObjects createMicroContextObjects({
   required FileResolver fileResolver,
@@ -56,6 +58,12 @@
   analysisContext2.currentSession = analysisSession;
   analysisSession.analysisContext = analysisContext2;
 
+  analysisSession.elementFactory = LinkedElementFactory(
+    analysisContext,
+    analysisSession,
+    Reference.root(),
+  );
+
   return MicroContextObjects._(
     declaredVariables: declaredVariables,
     synchronousSession: synchronousSession,
@@ -152,6 +160,9 @@
   @override
   late _MicroAnalysisContextImpl analysisContext;
 
+  @override
+  late final LinkedElementFactory elementFactory;
+
   _MicroAnalysisSessionImpl(
     this.fileResolver,
     this.declaredVariables,
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index ea109b6..1224e31 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -35,7 +35,6 @@
 import 'package:analyzer/src/summary2/bundle_reader.dart';
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/reference.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
@@ -858,8 +857,6 @@
   final CiderByteStore byteStore;
   final MicroContextObjects contextObjects;
 
-  late final LinkedElementFactory elementFactory;
-
   Set<LibraryCycle> loadedBundles = Set.identity();
 
   LibraryContext(
@@ -868,12 +865,10 @@
     this.resourceProvider,
     this.byteStore,
     this.contextObjects,
-  ) {
-    elementFactory = LinkedElementFactory(
-      contextObjects.analysisContext,
-      contextObjects.analysisSession,
-      Reference.root(),
-    );
+  );
+
+  LinkedElementFactory get elementFactory {
+    return contextObjects.analysisSession.elementFactory;
   }
 
   /// Notifies this object that it is about to be discarded.
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 83c03c4..9a76055 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -197,19 +197,6 @@
     return Namespace(definedNames);
   }
 
-  /// Return elements imported with the given [element].
-  Iterable<Element> getImportedElements(ImportElement element) {
-    var importedLibrary = element.importedLibrary;
-
-    // If the URI is invalid.
-    if (importedLibrary == null) {
-      return [];
-    }
-
-    var map = _getExportMapping(importedLibrary);
-    return _applyCombinators(map, element.combinators).values;
-  }
-
   /// Add the given [element] to the table of [definedNames] if it has a
   /// publicly visible name.
   void _addIfPublic(Map<String, Element> definedNames, Element element) {
diff --git a/pkg/analyzer/lib/src/summary2/combinator.dart b/pkg/analyzer/lib/src/summary2/combinator.dart
index 96f1152..27226ba 100644
--- a/pkg/analyzer/lib/src/summary2/combinator.dart
+++ b/pkg/analyzer/lib/src/summary2/combinator.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/dart/element/element.dart';
+
 class Combinator {
   final bool isShow;
   final Set<String> names;
@@ -21,3 +23,28 @@
     return names.contains(name);
   }
 }
+
+extension CombinatorListExtension on List<Combinator> {
+  /// Return `true` if this list of combinators allows the [name].
+  bool allows(String name) {
+    for (final combinator in this) {
+      if (combinator.isShow && !combinator.matches(name)) return false;
+      if (combinator.isHide && combinator.matches(name)) return false;
+    }
+    return true;
+  }
+}
+
+extension NamespaceCombinatorListExtension on List<NamespaceCombinator> {
+  List<Combinator> build() {
+    return map((combinator) {
+      if (combinator is ShowElementCombinator) {
+        return Combinator.show(combinator.shownNames);
+      } else if (combinator is HideElementCombinator) {
+        return Combinator.hide(combinator.hiddenNames);
+      } else {
+        throw UnimplementedError();
+      }
+    }).toList();
+  }
+}
diff --git a/pkg/analyzer/lib/src/summary2/export.dart b/pkg/analyzer/lib/src/summary2/export.dart
index 2c79392..9f88ade 100644
--- a/pkg/analyzer/lib/src/summary2/export.dart
+++ b/pkg/analyzer/lib/src/summary2/export.dart
@@ -14,11 +14,10 @@
   Export(this.exporter, this.index, this.combinators);
 
   bool addToExportScope(String name, ExportedReference exported) {
-    for (Combinator combinator in combinators) {
-      if (combinator.isShow && !combinator.matches(name)) return false;
-      if (combinator.isHide && combinator.matches(name)) return false;
+    if (combinators.allows(name)) {
+      return exporter.exportScope.export(index, name, exported);
     }
-    return exporter.exportScope.export(index, name, exported);
+    return false;
   }
 }
 
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 33ca9f8..497160f 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -152,6 +152,7 @@
     }
   }
 
+  /// TODO(scheglov) Why would this method return `null`?
   Element? elementOfReference(Reference reference) {
     if (reference.element != null) {
       return reference.element;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 6608327..9ad3e64 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1484,6 +1484,26 @@
   }
 
   @override
+  bool importsLibrary(Uri uri) {
+    // Self-reference.
+    if (resolvedUnit.libraryElement.source.uri == uri) return false;
+
+    // Existing import.
+    for (var import in resolvedUnit.libraryElement.imports) {
+      var importedLibrary = import.importedLibrary;
+      if (importedLibrary != null && importedLibrary.source.uri == uri) {
+        return true;
+      }
+    }
+
+    // Queued change.
+    var importChange = (libraryChangeBuilder ?? this).librariesToImport[uri];
+    if (importChange != null) return true;
+
+    return false;
+  }
+
+  @override
   void replaceTypeWithFuture(
       TypeAnnotation? typeAnnotation, TypeProvider typeProvider) {
     //
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index 4eababe..2082af0 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -359,6 +359,10 @@
   /// If there is no existing import, a new import is added.
   ImportLibraryElementResult importLibraryElement(Uri uri);
 
+  /// Return `true` if the given library [uri] is already imported or will be
+  /// imported by a scheduled edit.
+  bool importsLibrary(Uri uri);
+
   /// Optionally create an edit to replace the given [typeAnnotation] with the
   /// type `Future` (with the given type annotation as the type argument). The
   /// [typeProvider] is used to check the current type, because if it is already
diff --git a/pkg/compiler/lib/src/js_model/class_type_variable_access.dart b/pkg/compiler/lib/src/js_model/class_type_variable_access.dart
new file mode 100644
index 0000000..3d2b39b
--- /dev/null
+++ b/pkg/compiler/lib/src/js_model/class_type_variable_access.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Enum that defines how a member has access to the current type variables.
+enum ClassTypeVariableAccess {
+  /// The member has no access to type variables.
+  none,
+
+  /// Type variables are accessible as a property on `this`.
+  property,
+
+  /// Type variables are accessible as parameters in the current context.
+  parameter,
+
+  /// If the current context is a generative constructor, type variables are
+  /// accessible as parameters, otherwise type variables are accessible as
+  /// a property on `this`.
+  ///
+  /// This is used for instance fields whose initializers are executed in the
+  /// constructors.
+  // TODO(johnniwinther): Avoid the need for this by adding a field-setter
+  // to the J-model.
+  instanceField,
+}
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index cb36eb7..fad1f00 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -15,11 +15,11 @@
 import '../ir/element_map.dart';
 import '../ir/static_type_cache.dart';
 import '../js_backend/annotations.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../js_model/element_map.dart';
 import '../js_model/env.dart';
 import '../ordered_typeset.dart';
 import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
 import '../universe/selector.dart';
 import 'elements.dart';
 import 'js_world_builder.dart' show JsClosedWorldBuilder;
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index 2994fbe..9ba22fe 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -17,10 +17,10 @@
 import '../ir/closure.dart';
 import '../ir/static_type_provider.dart';
 import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../js_model/elements.dart' show JGeneratorBody;
 import '../native/behavior.dart';
 import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
 import '../universe/call_structure.dart';
 import '../universe/selector.dart';
 import '../world.dart';
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 55c36df..c794980 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -38,6 +38,7 @@
 import '../ir/util.dart';
 import '../js_backend/annotations.dart';
 import '../js_backend/native_data.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../kernel/dart2js_target.dart' show allowedNativeTest;
 import '../kernel/element_map.dart';
 import '../kernel/env.dart';
@@ -46,7 +47,6 @@
 import '../options.dart';
 import '../ordered_typeset.dart';
 import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
 import '../universe/call_structure.dart';
 import '../universe/member_usage.dart';
 import '../universe/selector.dart';
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index c987921..b2a9bd3 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -15,9 +15,9 @@
 import '../ir/element_map.dart';
 import '../ir/static_type_cache.dart';
 import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../ordered_typeset.dart';
 import '../serialization/serialization.dart';
-import '../ssa/type_builder.dart';
 import 'closure.dart';
 import 'element_map.dart';
 import 'element_map_impl.dart';
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 398082b..2d71b3d 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -20,10 +20,10 @@
 import '../ir/element_map.dart';
 import '../ir/static_type_cache.dart';
 import '../ir/util.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../js_model/element_map.dart';
 import '../js_model/env.dart';
 import '../ordered_typeset.dart';
-import '../ssa/type_builder.dart';
 import '../universe/member_usage.dart';
 import 'element_map.dart';
 
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 0c073db..8445d27 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -39,10 +39,11 @@
 import '../js_backend/native_data.dart';
 import '../js_backend/runtime_types_resolution.dart';
 import '../js_emitter/code_emitter_task.dart' show ModularEmitter;
-import '../js_model/locals.dart' show GlobalLocalsMap, JumpVisitor;
-import '../js_model/elements.dart' show JGeneratorBody;
+import '../js_model/class_type_variable_access.dart';
 import '../js_model/element_map.dart';
+import '../js_model/elements.dart' show JGeneratorBody;
 import '../js_model/js_strategy.dart';
+import '../js_model/locals.dart' show GlobalLocalsMap, JumpVisitor;
 import '../js_model/type_recipe.dart';
 import '../kernel/invocation_mirror_constants.dart';
 import '../native/behavior.dart';
diff --git a/pkg/compiler/lib/src/ssa/type_builder.dart b/pkg/compiler/lib/src/ssa/type_builder.dart
index 86f3504..db034ca 100644
--- a/pkg/compiler/lib/src/ssa/type_builder.dart
+++ b/pkg/compiler/lib/src/ssa/type_builder.dart
@@ -9,34 +9,13 @@
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../inferrer/abstract_value_domain.dart';
+import '../js_model/class_type_variable_access.dart';
 import '../js_model/type_recipe.dart';
 import '../io/source_information.dart';
 import '../options.dart';
 import '../universe/use.dart' show TypeUse;
 import '../world.dart';
 
-/// Enum that defines how a member has access to the current type variables.
-enum ClassTypeVariableAccess {
-  /// The member has no access to type variables.
-  none,
-
-  /// Type variables are accessible as a property on `this`.
-  property,
-
-  /// Type variables are accessible as parameters in the current context.
-  parameter,
-
-  /// If the current context is a generative constructor, type variables are
-  /// accessible as parameters, otherwise type variables are accessible as
-  /// a property on `this`.
-  ///
-  /// This is used for instance fields whose initializers are executed in the
-  /// constructors.
-  // TODO(johnniwinther): Avoid the need for this by adding a field-setter
-  // to the J-model.
-  instanceField,
-}
-
 /// Functions to insert type checking, coercion, and instruction insertion
 /// depending on the environment for dart code.
 abstract class TypeBuilder {
diff --git a/pkg/compiler/test/model/supermixin_test.dart b/pkg/compiler/test/model/supermixin_test.dart
index b7b0ada..324145d 100644
--- a/pkg/compiler/test/model/supermixin_test.dart
+++ b/pkg/compiler/test/model/supermixin_test.dart
@@ -23,7 +23,7 @@
   method1(a) => 'B$a';
 }
 
-class Mixin extends SuperA {
+mixin Mixin on SuperA {
   method1(a) => super.method1('M$a');
   method2(a) => 'M$a';
 }
@@ -55,8 +55,10 @@
 
     Expect.isTrue(elementEnvironment.isMixinApplicationWithMembers(superClass));
     Expect.equals(mixin, elementEnvironment.getEffectiveMixinClass(superClass));
-    Expect.equals(superA, elementEnvironment.getSuperClass(mixin));
     Expect.equals(superB, elementEnvironment.getSuperClass(superClass));
+    Expect.equals(superA, elementEnvironment.getSuperClass(superB));
+    Expect.equals(elementEnvironment.getSuperClass(superA),
+        elementEnvironment.getSuperClass(mixin));
 
     MemberEntity method1 = lookupMember(elementEnvironment, 'Class.method1');
     Expect.equals(superClass, method1.enclosingClass);
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 3d80125..b4df57c 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -417,9 +417,7 @@
         ? hierarchy.getDispatchTarget(instanceClass, name, setter: isSetter)
         : hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
     if (isSuper && target == null) {
-      if (cls.isMixinDeclaration ||
-          (libraryBuilder.loader.target.backendTarget.enableSuperMixins &&
-              this.isAbstract)) {
+      if (cls.isMixinDeclaration) {
         target =
             hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
       }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 40a52c4..985dc64 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -487,8 +487,8 @@
       loader.buildClassHierarchy(sortedSourceClassBuilders, objectClassBuilder);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
-      loader.checkSupertypes(
-          sortedSourceClassBuilders, enumClass, underscoreEnumClass);
+      loader.checkSupertypes(sortedSourceClassBuilders, objectClass, enumClass,
+          underscoreEnumClass);
 
       if (macroApplications != null) {
         benchmarker?.enterPhase(BenchmarkPhases.outline_applyDeclarationMacros);
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 973ee8c..3e629a1 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
@@ -41,6 +41,7 @@
 import '../fasta_codes.dart';
 import '../kernel/combined_member_signature.dart';
 import '../kernel/hierarchy/hierarchy_builder.dart';
+import '../kernel/hierarchy/hierarchy_node.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/kernel_target.dart' show KernelTarget;
 import '../kernel/redirecting_factory_body.dart'
@@ -729,6 +730,7 @@
   void checkSupertypes(
       CoreTypes coreTypes,
       ClassHierarchyBuilder hierarchyBuilder,
+      Class objectClass,
       Class enumClass,
       Class underscoreEnumClass,
       Class? macroClass) {
@@ -738,16 +740,17 @@
     // Moreover, it checks that `FutureOr` and `void` are not among the
     // supertypes and that `Enum` is not implemented by non-abstract classes.
 
+    ClassHierarchyNode classHierarchyNode =
+        hierarchyBuilder.getNodeFromClass(cls);
     if (libraryBuilder.libraryFeatures.enhancedEnums.isEnabled && !isEnum) {
       bool hasEnumSuperinterface = false;
-      List<Supertype> interfaces =
-          hierarchyBuilder.getNodeFromClass(cls).superclasses;
+      List<Supertype> interfaces = classHierarchyNode.superclasses;
       for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
           hasEnumSuperinterface = true;
         }
       }
-      interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+      interfaces = classHierarchyNode.interfaces;
       for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
           hasEnumSuperinterface = true;
@@ -810,14 +813,13 @@
     if (macroClass != null && !cls.isMacro && !cls.isAbstract) {
       // TODO(johnniwinther): Merge this check with the loop above.
       bool isMacroFound = false;
-      List<Supertype> interfaces =
-          hierarchyBuilder.getNodeFromClass(cls).superclasses;
+      List<Supertype> interfaces = classHierarchyNode.superclasses;
       for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
         if (interfaces[i].classNode == macroClass) {
           isMacroFound = true;
         }
       }
-      interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+      interfaces = classHierarchyNode.interfaces;
       for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
         if (interfaces[i].classNode == macroClass) {
           isMacroFound = true;
@@ -866,6 +868,23 @@
         superClass = decl;
       }
     }
+    if (classHierarchyNode.isMixinApplication) {
+      assert(mixedInTypeBuilder != null,
+          "No mixed in type builder for mixin application $this.");
+      ClassHierarchyNode mixedInNode = classHierarchyNode.mixedInNode!;
+      ClassHierarchyNode? mixinSuperClassNode =
+          mixedInNode.directSuperClassNode;
+      if (mixinSuperClassNode != null &&
+          mixinSuperClassNode.classBuilder.cls != objectClass &&
+          !mixedInNode.classBuilder.cls.isMixinDeclaration) {
+        addProblem(
+            templateMixinInheritsFromNotObject
+                .withArguments(mixedInNode.classBuilder.name),
+            mixedInTypeBuilder!.charOffset ?? TreeNode.noOffset,
+            noLength);
+      }
+    }
+
     if (interfaceBuilders == null) return;
 
     // Validate interfaces.
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 ffced81..a8312e7 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -2117,12 +2117,12 @@
     ticker.logMs("Computed core types");
   }
 
-  void checkSupertypes(List<SourceClassBuilder> sourceClasses, Class enumClass,
-      Class underscoreEnumClass) {
+  void checkSupertypes(List<SourceClassBuilder> sourceClasses,
+      Class objectClass, Class enumClass, Class underscoreEnumClass) {
     for (SourceClassBuilder builder in sourceClasses) {
       if (builder.libraryBuilder.loader == this && !builder.isPatch) {
-        builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass,
-            underscoreEnumClass, _macroClassBuilder?.cls);
+        builder.checkSupertypes(coreTypes, hierarchyBuilder, objectClass,
+            enumClass, underscoreEnumClass, _macroClassBuilder?.cls);
       }
     }
     ticker.logMs("Checked supertypes");
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 3c2d1fe..5c0668e 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5604,3 +5604,11 @@
 
 EnumAbstractMember:
   problemMessage: "Enums can't declare abstract members."
+
+MixinInheritsFromNotObject:
+  problemMessage: "The class '#name' can't be used as a mixin because it extends a class other than 'Object'."
+  analyzerCode: MIXIN_INHERITS_FROM_NOT_OBJECT
+  script: |
+    class Base {}
+    class Mixin extends Base {}
+    class C extends Base with Mixin {}
diff --git a/pkg/front_end/test/deps_git_test.dart b/pkg/front_end/test/deps_git_test.dart
index e123def..5969343 100644
--- a/pkg/front_end/test/deps_git_test.dart
+++ b/pkg/front_end/test/deps_git_test.dart
@@ -23,21 +23,19 @@
 final Uri repoDir = computeRepoDirUri();
 
 Set<String> allowlistedExternalDartFiles = {
-  "third_party/pkg/charcode/lib/ascii.dart",
-
-  "third_party/pkg_tested/package_config/lib/package_config.dart",
-  "third_party/pkg_tested/package_config/lib/package_config_types.dart",
-  "third_party/pkg_tested/package_config/lib/src/discovery.dart",
-  "third_party/pkg_tested/package_config/lib/src/errors.dart",
-  "third_party/pkg_tested/package_config/lib/src/package_config_impl.dart",
-  "third_party/pkg_tested/package_config/lib/src/package_config_io.dart",
-  "third_party/pkg_tested/package_config/lib/src/package_config_json.dart",
-  "third_party/pkg_tested/package_config/lib/src/package_config.dart",
-  "third_party/pkg_tested/package_config/lib/src/packages_file.dart",
-  "third_party/pkg_tested/package_config/lib/src/util.dart",
+  "third_party/pkg/package_config/lib/package_config.dart",
+  "third_party/pkg/package_config/lib/package_config_types.dart",
+  "third_party/pkg/package_config/lib/src/discovery.dart",
+  "third_party/pkg/package_config/lib/src/errors.dart",
+  "third_party/pkg/package_config/lib/src/package_config_impl.dart",
+  "third_party/pkg/package_config/lib/src/package_config_io.dart",
+  "third_party/pkg/package_config/lib/src/package_config_json.dart",
+  "third_party/pkg/package_config/lib/src/package_config.dart",
+  "third_party/pkg/package_config/lib/src/packages_file.dart",
+  "third_party/pkg/package_config/lib/src/util.dart",
 
   // TODO(johnniwinther): Fix to allow dependency of package:package_config.
-  "third_party/pkg_tested/package_config/lib/src/util_io.dart",
+  "third_party/pkg/package_config/lib/src/util_io.dart",
 
   // TODO(CFE-team): These files should not be included.
   // The package isn't even in pubspec.yaml.
diff --git a/pkg/front_end/test/fasta/super_mixins_test.dart b/pkg/front_end/test/fasta/super_mixins_test.dart
index 2ef4893..d1db05d 100644
--- a/pkg/front_end/test/fasta/super_mixins_test.dart
+++ b/pkg/front_end/test/fasta/super_mixins_test.dart
@@ -108,7 +108,7 @@
     ..target = new NoneTargetWithSuperMixins(new TargetFlags());
   await compileScript(testSource, options: options);
   Expect.setEquals(
-      const <String>['baz', 'foo', 'quux'], missingSuperMethodNames);
+      const <String>['bar', 'baz', 'foo', 'quux'], missingSuperMethodNames);
 }
 
 void main() {
diff --git a/pkg/front_end/test/macros/application/data/tests/sequence.dart b/pkg/front_end/test/macros/application/data/tests/sequence.dart
index 0318ffd..cce1603 100644
--- a/pkg/front_end/test/macros/application/data/tests/sequence.dart
+++ b/pkg/front_end/test/macros/application/data/tests/sequence.dart
@@ -166,7 +166,6 @@
 */
 class Class6a {}
 
-@SequenceMacro(0)
 /*class: Class7d:
 declarations:
 
@@ -174,7 +173,8 @@
   method2() {}
 }
 */
-class Class7d with Class7b, Class7c {}
+@SequenceMacro(0)
+class Class7d extends Class7b with Class7c {}
 
 @SequenceMacro(0)
 /*class: Class7c:
diff --git a/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect b/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
index 80e82bb..691ef16 100644
--- a/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
+++ b/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
@@ -95,24 +95,17 @@
     ;
   method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ method() → dynamic {}
 }
-abstract class _Class7d&Object&Class7b = core::Object with self::Class7b /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Class7d&Object&Class7b
-    : super core::Object::•()
-    ;
-  mixin-super-stub method method1() → dynamic
-    return super.{self::Class7b::method1}();
-}
-abstract class _Class7d&Object&Class7b&Class7c = self::_Class7d&Object&Class7b with self::Class7c /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Class7d&Object&Class7b&Class7c
-    : super self::_Class7d&Object&Class7b::•()
+abstract class _Class7d&Class7b&Class7c = self::Class7b with self::Class7c /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class7d&Class7b&Class7c
+    : super self::Class7b::•()
     ;
   mixin-super-stub method method() → dynamic
     return super.{self::Class7c::method}();
 }
 @#C2
-class Class7d extends self::_Class7d&Object&Class7b&Class7c {
+class Class7d extends self::_Class7d&Class7b&Class7c {
   synthetic constructor •() → self::Class7d
-    : super self::_Class7d&Object&Class7b&Class7c::•()
+    : super self::_Class7d&Class7b&Class7c::•()
     ;
   method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ method2() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
index ddee41a..867944a 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart
@@ -6,7 +6,7 @@
   int get foo => index;
 }
 
-enum EA with A { element }
+enum EA with A { element } // Error.
 
 abstract class B implements Enum { // Ok.
   int get foo => index;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 806437d..64e3b29f 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index fefad44..8d2555e 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index bbf22ca..a059a89 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index bbf22ca..a059a89 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
index c664069..305483e 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index 5cdd088..d117fd5 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -1,4 +1,11 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart:9:14: Error: The class 'A' can't be used as a mixin because it extends a class other than 'Object'.
+// enum EA with A { element } // Error.
+//              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/issue48167.dart b/pkg/front_end/testcases/general/issue48167.dart
new file mode 100644
index 0000000..5207b6e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Base {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+mixin Mixin2a on Base {}
+
+mixin Mixin2b on Base, Mixin2a {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect
new file mode 100644
index 0000000..b9524fa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class Base {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+mixin Mixin2a on Base {}
+mixin Mixin2b on Base, Mixin2a {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f907e98
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+class Base {}
+
+class C1a extends Base with Mixin1a {}
+
+class C1b extends Base with Mixin1b {}
+
+class C2a extends Base with Mixin2a {}
+
+class C2b extends Base with Mixin2a, Mixin2b {}
+
+class Mixin1a extends Base {}
+
+class Mixin1b extends Mixin1a {}
+
+mixin Mixin2a on Base {}
+mixin Mixin2b on Base, Mixin2a {}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.expect
new file mode 100644
index 0000000..9c5a12c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+//                             ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Mixin1a extends self::Base {
+  synthetic constructor •() → self::Mixin1a
+    : super self::Base::•()
+    ;
+}
+class Mixin1b extends self::Mixin1a {
+  synthetic constructor •() → self::Mixin1b
+    : super self::Mixin1a::•()
+    ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1a&Base&Mixin1a
+    : super self::Base::•()
+    ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+  synthetic constructor •() → self::C1a
+    : super self::_C1a&Base&Mixin1a::•()
+    ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1b&Base&Mixin1b
+    : super self::Base::•()
+    ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+  synthetic constructor •() → self::C1b
+    : super self::_C1b&Base&Mixin1b::•()
+    ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/  {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/  {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2a&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+  synthetic constructor •() → self::C2a
+    : super self::_C2a&Base&Mixin2a::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+    : super self::_C2b&Base&Mixin2a::•()
+    ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+  synthetic constructor •() → self::C2b
+    : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect
new file mode 100644
index 0000000..9c5a12c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+//                             ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Mixin1a extends self::Base {
+  synthetic constructor •() → self::Mixin1a
+    : super self::Base::•()
+    ;
+}
+class Mixin1b extends self::Mixin1a {
+  synthetic constructor •() → self::Mixin1b
+    : super self::Mixin1a::•()
+    ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1a&Base&Mixin1a
+    : super self::Base::•()
+    ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+  synthetic constructor •() → self::C1a
+    : super self::_C1a&Base&Mixin1a::•()
+    ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1b&Base&Mixin1b
+    : super self::Base::•()
+    ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+  synthetic constructor •() → self::C1b
+    : super self::_C1b&Base&Mixin1b::•()
+    ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/  {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/  {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2a&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+  synthetic constructor •() → self::C2a
+    : super self::_C2a&Base&Mixin2a::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+    : super self::_C2b&Base&Mixin2a::•()
+    ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+  synthetic constructor •() → self::C2b
+    : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect
new file mode 100644
index 0000000..fbb38a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.outline.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+//                             ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    ;
+}
+class Mixin1a extends self::Base {
+  synthetic constructor •() → self::Mixin1a
+    ;
+}
+class Mixin1b extends self::Mixin1a {
+  synthetic constructor •() → self::Mixin1b
+    ;
+}
+abstract class _C1a&Base&Mixin1a = self::Base with self::Mixin1a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1a&Base&Mixin1a
+    : super self::Base::•()
+    ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+  synthetic constructor •() → self::C1a
+    ;
+}
+abstract class _C1b&Base&Mixin1b = self::Base with self::Mixin1b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C1b&Base&Mixin1b
+    : super self::Base::•()
+    ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+  synthetic constructor •() → self::C1b
+    ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/  {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+    ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/  {
+}
+abstract class _C2a&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2a&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+  synthetic constructor •() → self::C2a
+    ;
+}
+abstract class _C2b&Base&Mixin2a = self::Base with self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b = self::_C2b&Base&Mixin2a with self::Mixin2b /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+    : super self::_C2b&Base&Mixin2a::•()
+    ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+  synthetic constructor •() → self::C2b
+    ;
+}
diff --git a/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect
new file mode 100644
index 0000000..f2fe692
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48167.dart.weak.transformed.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48167.dart:11:29: Error: The class 'Mixin1a' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1a extends Base with Mixin1a {}
+//                             ^
+//
+// pkg/front_end/testcases/general/issue48167.dart:13:29: Error: The class 'Mixin1b' can't be used as a mixin because it extends a class other than 'Object'.
+// class C1b extends Base with Mixin1b {}
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Mixin1a extends self::Base {
+  synthetic constructor •() → self::Mixin1a
+    : super self::Base::•()
+    ;
+}
+class Mixin1b extends self::Mixin1a {
+  synthetic constructor •() → self::Mixin1b
+    : super self::Mixin1a::•()
+    ;
+}
+abstract class _C1a&Base&Mixin1a extends self::Base implements self::Mixin1a /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C1a&Base&Mixin1a
+    : super self::Base::•()
+    ;
+}
+class C1a extends self::_C1a&Base&Mixin1a {
+  synthetic constructor •() → self::C1a
+    : super self::_C1a&Base&Mixin1a::•()
+    ;
+}
+abstract class _C1b&Base&Mixin1b extends self::Base implements self::Mixin1b /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C1b&Base&Mixin1b
+    : super self::Base::•()
+    ;
+}
+class C1b extends self::_C1b&Base&Mixin1b {
+  synthetic constructor •() → self::C1b
+    : super self::_C1b&Base&Mixin1b::•()
+    ;
+}
+abstract class Mixin2a extends self::Base /*isMixinDeclaration*/  {
+}
+abstract class _Mixin2b&Base&Mixin2a extends core::Object implements self::Base, self::Mixin2a /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin2b&Base&Mixin2a
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2b extends self::_Mixin2b&Base&Mixin2a /*isMixinDeclaration*/  {
+}
+abstract class _C2a&Base&Mixin2a extends self::Base implements self::Mixin2a /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C2a&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+class C2a extends self::_C2a&Base&Mixin2a {
+  synthetic constructor •() → self::C2a
+    : super self::_C2a&Base&Mixin2a::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a extends self::Base implements self::Mixin2a /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a
+    : super self::Base::•()
+    ;
+}
+abstract class _C2b&Base&Mixin2a&Mixin2b extends self::_C2b&Base&Mixin2a implements self::Mixin2b /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_C2b&Base&Mixin2a&Mixin2b
+    : super self::_C2b&Base&Mixin2a::•()
+    ;
+}
+class C2b extends self::_C2b&Base&Mixin2a&Mixin2b {
+  synthetic constructor •() → self::C2b
+    : super self::_C2b&Base&Mixin2a&Mixin2b::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart b/pkg/front_end/testcases/general/mixin_super_repeated.dart
index e9453fd..d326a31 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart
@@ -6,7 +6,7 @@
   var m;
 }
 
-abstract class N extends M {
+mixin N on M {
   void set superM(value) {
     super.m = value;
   }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
index e92d32e..65c7ba3 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
@@ -2,7 +2,7 @@
   var m;
 }
 
-abstract class N extends M {
+mixin N on M {
   void set superM(value) {}
   get superM => super.m;
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
index 2d9c4d4..30ac627 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
@@ -2,13 +2,12 @@
   var m;
 }
 
-abstract class N extends M {
-  get superM => super.m;
-  void set superM(value) {}
-}
-
 class Named = S with M, N, M;
 
 class S {}
 
 main() {}
+mixin N on M {
+  get superM => super.m;
+  void set superM(value) {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
index 5ed308d..1c00ad2 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
@@ -8,10 +8,7 @@
     : super core::Object::•()
     ;
 }
-abstract class N extends self::M {
-  synthetic constructor •() → self::N
-    : super self::M::•()
-    ;
+abstract class N extends self::M /*isMixinDeclaration*/  {
   set superM(dynamic value) → void {
     super.{self::M::m} = value;
   }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
index 5ed308d..1c00ad2 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
@@ -8,10 +8,7 @@
     : super core::Object::•()
     ;
 }
-abstract class N extends self::M {
-  synthetic constructor •() → self::N
-    : super self::M::•()
-    ;
+abstract class N extends self::M /*isMixinDeclaration*/  {
   set superM(dynamic value) → void {
     super.{self::M::m} = value;
   }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
index 48f57f8..5af75a0 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
@@ -7,9 +7,7 @@
   synthetic constructor •() → self::M
     ;
 }
-abstract class N extends self::M {
-  synthetic constructor •() → self::N
-    ;
+abstract class N extends self::M /*isMixinDeclaration*/  {
   set superM(dynamic value) → void
     ;
   get superM() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
index 94d7058..b868047 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
@@ -8,10 +8,7 @@
     : super core::Object::•()
     ;
 }
-abstract class N extends self::M {
-  synthetic constructor •() → self::N
-    : super self::M::•()
-    ;
+abstract class N extends self::M /*isMixinDeclaration*/  {
   set superM(dynamic value) → void {
     super.{self::M::m} = value;
   }
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
index ee75714..d55612e 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
@@ -17,5 +17,5 @@
     class A extends Object with B<Object>, C {}
   b.dart: |
     // @dart=2.9
-    abstract class C<T extends Object> extends Object with B<T> {}
+    mixin C<T extends Object> on B<T> {}
     abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
index c20ad39..6858497 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
@@ -4,7 +4,7 @@
 // @dart=2.9
 class I<X> {}
 
-class M0<X, Y extends String> extends I<X> {}
+mixin M0<X, Y extends String> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
index 2a73ca9..7930d31 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
@@ -1,7 +1,7 @@
 // @dart = 2.9
 class I<X> {}
 
-class M0<X, Y extends String> extends I<X> {}
+mixin M0<X, Y extends String> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
index a214810..9474532 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
 
 class I<X> {}
 
-class M0<X, Y extends String> extends I<X> {}
-
 class M1 implements I<int> {}
 
 main() {}
+mixin M0<X, Y extends String> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
index ce1b438..0d4a458 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
index ce1b438..0d4a458 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
index d73c867..e554562 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
@@ -16,9 +16,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
index 0ac49c5..aa3fb5c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
index 5219f6e..6f236ea 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
@@ -4,7 +4,7 @@
 // @dart=2.9
 class I<X> {}
 
-class M0<X, Y extends X> extends I<X> {}
+mixin M0<X, Y extends X> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
index 4967e97..3cccb82 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
@@ -1,7 +1,7 @@
 // @dart = 2.9
 class I<X> {}
 
-class M0<X, Y extends X> extends I<X> {}
+mixin M0<X, Y extends X> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
index 37572af..1f00d34 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
 
 class I<X> {}
 
-class M0<X, Y extends X> extends I<X> {}
-
 class M1 implements I<int> {}
 
 main() {}
+mixin M0<X, Y extends X> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
index f202e79..53f7336 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
index f202e79..53f7336 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
index c7b5bf6..858797c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
@@ -16,9 +16,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
index 3988f83..49e100e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
index f17f138..b09deb8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
@@ -4,7 +4,7 @@
 // @dart=2.9
 class I<X> {}
 
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
index 12b7ba8..86c6e94 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
@@ -1,7 +1,7 @@
 // @dart = 2.9
 class I<X> {}
 
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
index 337d25b..6462f6d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
 
 class I<X> {}
 
-class M0<X, Y extends Comparable<Y>> extends I<X> {}
-
 class M1 implements I<int> {}
 
 main() {}
+mixin M0<X, Y extends Comparable<Y>> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
index 05a10e7..819871c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
@@ -8,7 +8,7 @@
 // class A extends M1 with M0 {}
 //                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 //             ^
 //
 import self as self;
@@ -29,10 +29,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
index 05a10e7..819871c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 // class A extends M1 with M0 {}
 //                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 //             ^
 //
 import self as self;
@@ -29,10 +29,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
index 98c5c87..9d065b1 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 // class A extends M1 with M0 {}
 //                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 //             ^
 //
 import self as self;
@@ -28,9 +28,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
index 06c6423..d3a2317 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 // class A extends M1 with M0 {}
 //                         ^
 // pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
-// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// mixin M0<X, Y extends Comparable<Y>> on I<X> {}
 //             ^
 //
 import self as self;
@@ -29,10 +29,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
index 595169f..09bcac5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
@@ -4,7 +4,7 @@
 // @dart=2.9
 class I<X> {}
 
-class M0<X, Y extends void Function({String name})> extends I<X> {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
index 242d773..d90ab5a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
@@ -1,7 +1,7 @@
 // @dart = 2.9
 class I<X> {}
 
-class M0<X, Y extends void Function({String name})> extends I<X> {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
index 58946b1..b7f442c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
@@ -3,8 +3,7 @@
 
 class I<X> {}
 
-class M0<X, Y extends void Function({String name})> extends I<X> {}
-
 class M1 implements I<int> {}
 
 main() {}
+mixin M0<X, Y extends void Function({String name})> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
index 4493630..21810ba 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
index 4493630..21810ba 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
index 11c5048..dd9cb86 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
@@ -16,9 +16,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
index 73fbc15..35928d5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
@@ -17,10 +17,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::I::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
index d133805..7d46deb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
@@ -6,7 +6,7 @@
 
 class J<X> {}
 
-class M0<X, Y> extends I<X> with J<Y> {}
+mixin M0<X, Y> on I<X>, J<Y> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
index 4287c58..5a2f3a0 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
@@ -3,7 +3,7 @@
 
 class J<X> {}
 
-class M0<X, Y> extends I<X> with J<Y> {}
+mixin M0<X, Y> on I<X>, J<Y> {}
 
 class M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
index b45667f..f60beeb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
@@ -5,10 +5,9 @@
 
 class J<X> {}
 
-class M0<X, Y> extends I<X> with J<Y> {}
-
 class M1 implements I<int> {}
 
 class M2 extends M1 implements J<double> {}
 
 main() {}
+mixin M0<X, Y> on I<X>, J<Y> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
index 4f31d67..42084e3d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
@@ -32,15 +32,22 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
-    : super self::I::•()
+    : 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 M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::_M0&I&J::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
index 4f31d67..42084e3d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
@@ -32,15 +32,22 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
-    : super self::I::•()
+    : 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 M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::_M0&I&J::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
index 8a6a14b..8b7ce31 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
@@ -30,14 +30,21 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
-    : super self::I::•()
     ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
index ec47bee..40101bf 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
@@ -32,15 +32,22 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::I<self::_M0&I&J::X*> implements self::J<self::_M0&I&J::Y*> /*isAnonymousMixin,isEliminatedMixin*/  {
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
-    : super self::I::•()
+    : 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 M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
-  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
-    : super self::_M0&I&J::•()
-    ;
+abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
 }
 class M1 extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
index 012dd24..f6f01f3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
@@ -1,4 +1,11 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+//                              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
index 012dd24..f6f01f3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
@@ -1,4 +1,11 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+//                              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
index 7c5b918..14be2ee 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
@@ -1,4 +1,11 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+//                              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
index 87156aa..04ba48f 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
@@ -1,4 +1,11 @@
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:30: Error: The class 'M0' can't be used as a mixin because it extends a class other than 'Object'.
+// class A extends M2<int> with M0 {}
+//                              ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
index 0c186dd..a81facd 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
@@ -6,7 +6,7 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 // M1 is inferred as M1<int>
 class A extends M0<int> with M1 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
index 5a57d83..bcb4e4e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
@@ -3,7 +3,7 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 class A extends M0<int> with M1 {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
index c678ba4..09a302b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
-
 main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
index 0f8933b..21fbce2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
@@ -22,10 +22,7 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
index 0f8933b..21fbce2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
@@ -22,10 +22,7 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
index 6944ee0..77a51bc 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
@@ -20,9 +20,7 @@
   synthetic constructor •() → self::M0<self::M0::T*>*
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
index 9909135..6604f0b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
@@ -22,10 +22,7 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
index e061ed7..7f1dff7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
@@ -6,9 +6,9 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
-class M2<T> extends I<T> {}
+mixin M2<T> on I<T> {}
 
 // M1 is inferred as M1<int>
 // M2 is inferred as M1<int>
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
index 2f58213..8035659 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
@@ -3,9 +3,8 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
-
-class M2<T> extends I<T> {}
+mixin M1<T> on I<T> {}
+mixin M2<T> on I<T> {}
 
 class A extends M0<int> with M1, M2 {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
index c2e033d..99cac73 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
@@ -5,8 +5,6 @@
 
 class M0<T> extends I<T> {}
 
-class M1<T> extends I<T> {}
-
-class M2<T> extends I<T> {}
-
 main() {}
+mixin M1<T> on I<T> {}
+mixin M2<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
index d7c017d..ac1a6239 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
@@ -22,15 +22,9 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
-    : super self::I::•()
-    ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
index d7c017d..ac1a6239 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
@@ -22,15 +22,9 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
-    : super self::I::•()
-    ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
index 1d14b87..6f2e7df 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
@@ -20,13 +20,9 @@
   synthetic constructor •() → self::M0<self::M0::T*>*
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
-    ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
index 0b98340..9516020 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
@@ -22,15 +22,9 @@
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
-class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
-    : super self::I::•()
-    ;
+abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_A&M0&M1*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
index 90b699b..2caa544 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
@@ -6,7 +6,7 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 // M0 is inferred as M0<dynamic>
 // Error since class hierarchy is inconsistent
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
index 216611a..e13c203 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
@@ -3,7 +3,7 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 class A extends Object with M0, M1<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
index 6a9e2c6..9310f10 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
-
 main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
index da805eec..d9fbc12 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
@@ -7,6 +7,16 @@
 //       ^
 //
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+//  - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -40,10 +50,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
index da805eec..d9fbc12 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
@@ -7,6 +7,16 @@
 //       ^
 //
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+//  - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -40,10 +50,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
index 6d82612..58e02afcb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
@@ -7,6 +7,16 @@
 //       ^
 //
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: '_A&Object&M0' doesn't implement 'I<int>' so it can't be used with 'M1<int>'.
+//  - 'Object with M0' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+//  - 'M1' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -38,9 +48,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
index 9fd048e..f602be6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
@@ -6,7 +6,7 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 // M0 is inferred as M0<dynamic> (unconstrained)
 // M1 is inferred as M1<dynamic> (constrained by inferred argument to M0)
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
index db097a6..d8111f8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
@@ -3,7 +3,7 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
+mixin M1<T> on I<T> {}
 
 class A extends Object with M0, M1 implements I<int> {}
 
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
index c64af1d..158c0b7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
@@ -5,6 +5,5 @@
 
 class M0<T> extends Object implements I<T> {}
 
-class M1<T> extends I<T> {}
-
 main() {}
+mixin M1<T> on I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
index 1391478..39d7387 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
@@ -40,10 +40,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
index 1391478..39d7387 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
@@ -40,10 +40,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    : super self::I::•()
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
index c419d1d..af04810 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
@@ -38,9 +38,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
-    ;
+abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_A&Object&M0*
diff --git a/pkg/scrape/lib/scrape.dart b/pkg/scrape/lib/scrape.dart
index bed0463..19c719c 100644
--- a/pkg/scrape/lib/scrape.dart
+++ b/pkg/scrape/lib/scrape.dart
@@ -247,7 +247,6 @@
 
       // Don't care about cached packages.
       if (entry.path.contains('sdk/third_party/pkg/')) continue;
-      if (entry.path.contains('sdk/third_party/pkg_tested/')) continue;
       if (entry.path.contains('/.dart_tool/')) continue;
 
       // Don't care about generated protobuf code.
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index e5157fe..5c3dddb 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -28,31 +28,32 @@
 /// simpler to add them to test.dart. Existing test suites should be moved to
 /// here, if possible.
 final testSuiteDirectories = [
-  Path('third_party/pkg/dartdoc'),
   Path('pkg'),
-  Path('third_party/pkg_tested'),
-  Path('runtime/tests/vm'),
-  Path('runtime/observatory/tests/service'),
   Path('runtime/observatory/tests/observatory_ui'),
-  Path('runtime/observatory_2/tests/service_2'),
+  Path('runtime/observatory/tests/service'),
   Path('runtime/observatory_2/tests/observatory_ui_2'),
+  Path('runtime/observatory_2/tests/service_2'),
+  Path('runtime/tests/vm'),
   Path('samples'),
-  Path('samples_2'),
   Path('samples-dev'),
+  Path('samples_2'),
   Path('tests/corelib'),
   Path('tests/corelib_2'),
-  Path('tests/web'),
-  Path('tests/web_2'),
   Path('tests/dartdevc'),
   Path('tests/dartdevc_2'),
+  Path('tests/ffi'),
+  Path('tests/ffi_2'),
   Path('tests/language'),
   Path('tests/language_2'),
   Path('tests/lib'),
   Path('tests/lib_2'),
   Path('tests/standalone'),
   Path('tests/standalone_2'),
-  Path('tests/ffi'),
-  Path('tests/ffi_2'),
+  Path('tests/web'),
+  Path('tests/web_2'),
+  Path('third_party/pkg/dart_style'),
+  Path('third_party/pkg/dartdoc'),
+  Path('third_party/pkg/package_config'),
   Path('utils/tests/peg'),
 ];
 
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 6e0473c..0e6735f 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -302,7 +302,7 @@
       main.writeAsStringSync("""
       import 'lib.dart';
       main() => print(foo());
-      class C1 extends Object with C2, C3 {
+      class C1 extends Object with C3, C2 {
         c1method() {
           print("c1");
         }
@@ -318,7 +318,7 @@
       import 'main.dart';
       foo() => 'foo';
       main() => print('bar');
-      class C2 extends Object with C3 {
+      mixin C2 on C3 {
         c2method() {
           print("c2");
         }
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart b/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
index aa53235..6ac3080 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
+++ b/pkg/vm/testcases/transformations/to_string_transformer/lib/main.dart
@@ -30,9 +30,9 @@
 @keepToStringInSubtypes
 class Base1 {}
 
-class Base2 extends Base1 {}
+mixin Base2 on Base1 {}
 
-class Base3 extends Object with Base2 {}
+class Base3 extends Object with Base1, Base2 {}
 
 class KeepInherited implements Base3 {
   @override
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
index 5a3a770..39a0384 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
@@ -45,19 +45,21 @@
     : super core::Object::•()
     ;
 }
-class Base2 extends self::Base1 {
-  synthetic constructor •() → self::Base2
-    : super self::Base1::•()
-    ;
+abstract class Base2 extends self::Base1 /*isMixinDeclaration*/  {
 }
-abstract class _Base3&Object&Base2 extends core::Object implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Base3&Object&Base2
+abstract class _Base3&Object&Base1 extends core::Object implements self::Base1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Base3&Object&Base1
     : super core::Object::•()
     ;
 }
-class Base3 extends self::_Base3&Object&Base2 {
+abstract class _Base3&Object&Base1&Base2 extends self::_Base3&Object&Base1 implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Base3&Object&Base1&Base2
+    : super self::_Base3&Object&Base1::•()
+    ;
+}
+class Base3 extends self::_Base3&Object&Base1&Base2 {
   synthetic constructor •() → self::Base3
-    : super self::_Base3&Object&Base2::•()
+    : super self::_Base3&Object&Base1&Base2::•()
     ;
 }
 class KeepInherited extends core::Object implements self::Base3 {
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
index 250e52d..d48dc28 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
@@ -45,19 +45,21 @@
     : super core::Object::•()
     ;
 }
-class Base2 extends self::Base1 {
-  synthetic constructor •() → self::Base2
-    : super self::Base1::•()
-    ;
+abstract class Base2 extends self::Base1 /*isMixinDeclaration*/  {
 }
-abstract class _Base3&Object&Base2 extends core::Object implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Base3&Object&Base2
+abstract class _Base3&Object&Base1 extends core::Object implements self::Base1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Base3&Object&Base1
     : super core::Object::•()
     ;
 }
-class Base3 extends self::_Base3&Object&Base2 {
+abstract class _Base3&Object&Base1&Base2 extends self::_Base3&Object&Base1 implements self::Base2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Base3&Object&Base1&Base2
+    : super self::_Base3&Object&Base1::•()
+    ;
+}
+class Base3 extends self::_Base3&Object&Base1&Base2 {
   synthetic constructor •() → self::Base3
-    : super self::_Base3&Object&Base2::•()
+    : super self::_Base3&Object&Base1&Base2::•()
     ;
 }
 class KeepInherited extends core::Object implements self::Base3 {
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 9761651..e7bec95 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -1669,7 +1669,6 @@
     "../../../tests/language/mixin/illegal_static_access_runtime_test.dart",
     "../../../tests/language/mixin/illegal_super_use_runtime_test.dart",
     "../../../tests/language/mixin/illegal_superclass_runtime_test.dart",
-    "../../../tests/language/mixin/illegal_superclass_test.dart",
     "../../../tests/language/mixin/implements2_test.dart",
     "../../../tests/language/mixin/implements_test.dart",
     "../../../tests/language/mixin/implicit_covariance_test.dart",
@@ -5116,7 +5115,6 @@
     "../../../tests/language_2/mixin/illegal_static_access_runtime_test.dart",
     "../../../tests/language_2/mixin/illegal_super_use_runtime_test.dart",
     "../../../tests/language_2/mixin/illegal_superclass_runtime_test.dart",
-    "../../../tests/language_2/mixin/illegal_superclass_test.dart",
     "../../../tests/language_2/mixin/implements2_test.dart",
     "../../../tests/language_2/mixin/implements_test.dart",
     "../../../tests/language_2/mixin/implicit_covariance_test.dart",
diff --git a/runtime/vm/mixin_test.cc b/runtime/vm/mixin_test.cc
index e359730..ef361c2 100644
--- a/runtime/vm/mixin_test.cc
+++ b/runtime/vm/mixin_test.cc
@@ -17,7 +17,7 @@
       "class A {\n"
       "  _bar() => 42;\n"
       "}\n"
-      "class M extends A {\n"
+      "mixin M on A {\n"
       "  bar() => -1;\n"
       "}\n"
       "class B extends A {\n"
@@ -66,7 +66,7 @@
       "  foo() => 4;\n"
       "  _bar() => 42;\n"
       "}\n"
-      "class M extends A {\n"
+      "mixin M on A {\n"
       "  bar() => -1;\n"
       "}\n"
       "class B extends A {\n"
diff --git a/tests/language/mixin/illegal_superclass_test.dart b/tests/language/mixin/illegal_superclass_test.dart
index c1e1e0c..a1b5b8f 100644
--- a/tests/language/mixin/illegal_superclass_test.dart
+++ b/tests/language/mixin/illegal_superclass_test.dart
@@ -19,57 +19,87 @@
 class C02 = S0 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C03 = S0 with M0, M1;
 class C04 = S0 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C05 = S0 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C06 = S0 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C07 = S0 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class C10 = S1 with M0;
 class C11 = S1 with M1;
 class C12 = S1 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C13 = S1 with M0, M1;
 class C14 = S1 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C15 = S1 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C16 = S1 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C17 = S1 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class C20 = S2 with M0;
 class C21 = S2 with M1;
 class C22 = S2 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C23 = S2 with M0, M1;
 class C24 = S2 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C25 = S2 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C26 = S2 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C27 = S2 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D00 extends S0 with M0 {}
 
@@ -78,19 +108,29 @@
 class D02 extends S0 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D03 extends S0 with M0, M1 {}
 class D04 extends S0 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D05 extends S0 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D06 extends S0 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D07 extends S0 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D10 extends S1 with M0 {}
 
@@ -99,19 +139,29 @@
 class D12 extends S1 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D13 extends S1 with M0, M1 {}
 class D14 extends S1 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D15 extends S1 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D16 extends S1 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D17 extends S1 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D20 extends S2 with M0 {}
 
@@ -120,19 +170,29 @@
 class D22 extends S2 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D23 extends S2 with M0, M1 {}
 class D24 extends S2 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D25 extends S2 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D26 extends S2 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D27 extends S2 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 main() {
   new C00();
diff --git a/tests/language_2/mixin/illegal_superclass_test.dart b/tests/language_2/mixin/illegal_superclass_test.dart
index 56427b5..9290955 100644
--- a/tests/language_2/mixin/illegal_superclass_test.dart
+++ b/tests/language_2/mixin/illegal_superclass_test.dart
@@ -21,57 +21,87 @@
 class C02 = S0 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C03 = S0 with M0, M1;
 class C04 = S0 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C05 = S0 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C06 = S0 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C07 = S0 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class C10 = S1 with M0;
 class C11 = S1 with M1;
 class C12 = S1 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C13 = S1 with M0, M1;
 class C14 = S1 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C15 = S1 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C16 = S1 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C17 = S1 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class C20 = S2 with M0;
 class C21 = S2 with M1;
 class C22 = S2 with M2;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C23 = S2 with M0, M1;
 class C24 = S2 with M0, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C25 = S2 with M2, M0;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C26 = S2 with M1, M2;
 //                      ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 25, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class C27 = S2 with M2, M1;
 //                  ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 21, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D00 extends S0 with M0 {}
 
@@ -80,19 +110,29 @@
 class D02 extends S0 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D03 extends S0 with M0, M1 {}
 class D04 extends S0 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D05 extends S0 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D06 extends S0 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D07 extends S0 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D10 extends S1 with M0 {}
 
@@ -101,19 +141,29 @@
 class D12 extends S1 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D13 extends S1 with M0, M1 {}
 class D14 extends S1 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D15 extends S1 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D16 extends S1 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D17 extends S1 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 class D20 extends S2 with M0 {}
 
@@ -122,19 +172,29 @@
 class D22 extends S2 with M2 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D23 extends S2 with M0, M1 {}
 class D24 extends S2 with M0, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D25 extends S2 with M2, M0 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D26 extends S2 with M1, M2 { }
 //                            ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 31, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 class D27 extends S2 with M2, M1 { }
 //                        ^^
 // [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+// [error column 27, length 0]
+// [cfe] The class 'M2' can't be used as a mixin because it extends a class other than 'Object'.
 
 main() {
   new C00();
diff --git a/third_party/.gitignore b/third_party/.gitignore
index 779e818c..9207a95 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -4,7 +4,6 @@
 # except for our files in boringssl.  The checkout is in boringssl/src.
 !.gitignore
 !pkg
-!pkg_tested
 !/tcmalloc
 !d8
 !firefox_jsshell
diff --git a/third_party/pkg_tested/OWNERS b/third_party/pkg_tested/OWNERS
deleted file mode 100644
index e1e4bf0..0000000
--- a/third_party/pkg_tested/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Test status file
-per-file pkg_tested.status=file:/tools/OWNERS_ENG
diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status
deleted file mode 100644
index 5fb6028..0000000
--- a/third_party/pkg_tested/pkg_tested.status
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Don't run any test-like files that show up in packages directories. It
-# shouldn't be necessary to run "pub install" in these packages, but if you do
-# it shouldn't break the tests.
-*/*/*/*/*/packages/*/*: Skip
-*/*/*/*/packages/*/*: Skip
-*/*/*/packages/*/*: Skip
-*/*/packages/*/*: Skip
-*/packages/*/*: Skip
-
-[ $runtime == vm ]
-http_io/test/http_cross_process_test: Skip # Fails with --no-preview-dart-2
-http_io/test/http_proxy_advanced_test: Pass, RuntimeError # flaky
-http_io/test/http_proxy_test: Pass, RuntimeError # flaky
-
-[ $browser ]
-dart_style/*: SkipByDesign
-pub/*: SkipByDesign
-
-[ $runtime == vm && $system == windows ]
-pub/test/run/app_can_read_from_stdin_test: Fail # Issue 19448
-pub/test/run/forwards_signal_posix_test: SkipByDesign
-
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $builder_tag == asan || $mode == debug) ]
-dart_style/test/command_line_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
-dart_style/test/formatter_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
-
-[ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
-http_io/*: SkipByDesign
diff --git a/tools/VERSION b/tools/VERSION
index 8c03cac..04f9938 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 184
+PRERELEASE 185
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index b202057..d0f40b6 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -7,7 +7,6 @@
       ".dart_tool/package_config.json",
       "pkg/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "tools/",
       "out/ReleaseX64/dart-sdk/",
       "xcodebuild/ReleaseX64/dart-sdk/"
@@ -50,7 +49,6 @@
       "third_party/babel/babel.min.js",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseIA32/dart-sdk/",
@@ -87,7 +85,6 @@
       "third_party/babel/babel.min.js",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseIA32/dart-sdk/",
@@ -134,7 +131,6 @@
       "tests/ffi_2/",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseIA32/dart",
@@ -173,7 +169,6 @@
       "tests/ffi/",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseX64/dart",
@@ -212,7 +207,6 @@
       "tests/ffi/",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseX64/dart"
@@ -258,7 +252,6 @@
       "tests/ffi_2/",
       "third_party/d8/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
       "xcodebuild/ReleaseIA32/",
@@ -268,7 +261,6 @@
       "runtime/tools/dartfuzz/",
       "out/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "tools/sdks/dart-sdk/",
       "pkg/_fe_analyzer_shared/",
       "pkg/async_helper/",
@@ -299,7 +291,6 @@
       "third_party/devtools/",
       "third_party/webdriver/",
       "third_party/pkg/",
-      "third_party/pkg_tested/",
       "tests/.dart_tool/package_config.json",
       "tests/angular/",
       "tests/co19/co19-analyzer.status",
@@ -3721,10 +3712,11 @@
           ]
         },
         {
-          "name": "third_party pkg_tested unit tests",
+          "name": "third_party tested packages",
           "arguments": [
             "-nunittest-asserts-${mode}-${system}",
-            "pkg_tested"
+            "dart_style",
+            "package_config"
           ]
         },
         {
@@ -3760,10 +3752,11 @@
           ]
         },
         {
-          "name": "third_party pkg_tested unit tests",
+          "name": "third_party tested packages",
           "arguments": [
             "-nunittest-asserts-${mode}-${system}-arm64",
-            "pkg_tested"
+            "dart_style",
+            "package_config"
           ]
         },
         {
@@ -3800,10 +3793,11 @@
           ]
         },
         {
-          "name": "third_party pkg_tested unit tests",
+          "name": "third_party tested packages",
           "arguments": [
             "-nunittest-asserts-${mode}-${system}",
-            "pkg_tested"
+            "dart_style",
+            "package_config"
           ]
         },
         {
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 4d758ec..20258a0 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -152,7 +152,6 @@
       sdk \
       samples-dev/swarm \
       third_party/pkg \
-      third_party/pkg_tested \
       .dart_tool/package_config.json \
       pkg \
       benchmarks \
@@ -300,7 +299,6 @@
       sdk \
       samples-dev/swarm \
       third_party/pkg \
-      third_party/pkg_tested \
       .dart_tool/package_config.json \
       pkg \
       benchmarks \
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index 7771bf7..3c7de74 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -17,7 +17,6 @@
   var packageDirs = [
     ...listSubdirectories(platform('pkg')),
     ...listSubdirectories(platform('third_party/pkg')),
-    ...listSubdirectories(platform('third_party/pkg_tested')),
     platform('pkg/vm_service/test/test_package'),
     platform(
         'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
@@ -105,8 +104,7 @@
         'governed by a BSD-style license that can be found in the LICENSE file.',
       ],
       'comment': [
-        'Package configuration for all packages in pkg/, third_party/pkg/, and',
-        'third_party/pkg_tested/',
+        'Package configuration for all packages in pkg/ and third_party/pkg/',
       ],
     },
   );
diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart
index 3cf437c..20e2370 100644
--- a/tools/package_deps/bin/package_deps.dart
+++ b/tools/package_deps/bin/package_deps.dart
@@ -69,10 +69,9 @@
     print('SDK DEPS');
     print('');
 
-    List<String> deps = [...sdkDeps.pkgs, ...sdkDeps.testedPkgs]..sort();
+    List<String> deps = [...sdkDeps.pkgs]..sort();
     for (var pkg in deps) {
-      final tested = sdkDeps.testedPkgs.contains(pkg);
-      print('package:$pkg${tested ? ' [tested]' : ''}');
+      print('package:$pkg');
     }
 
     // TODO(devoncarew): Find unused entries in the DEPS file.
@@ -421,7 +420,6 @@
   final File file;
 
   List<String> pkgs = [];
-  List<String> testedPkgs = [];
 
   final Map<String, ResolvedDep> _resolvedPackageVersions = {};
 
@@ -440,22 +438,15 @@
     // Var("dart_root") + "/third_party/pkg/dart2js_info":
     final pkgRegExp = RegExp(r'"/third_party/pkg/(\S+)"');
 
-    // Var("dart_root") + "/third_party/pkg_tested/dart_style":
-    final testedPkgRegExp = RegExp(r'"/third_party/pkg_tested/(\S+)"');
-
     for (var line in file.readAsLinesSync()) {
       var pkgDep = pkgRegExp.firstMatch(line);
-      var testedPkgDep = testedPkgRegExp.firstMatch(line);
 
       if (pkgDep != null) {
         pkgs.add(pkgDep.group(1)!);
-      } else if (testedPkgDep != null) {
-        testedPkgs.add(testedPkgDep.group(1)!);
       }
     }
 
     pkgs.sort();
-    testedPkgs.sort();
   }
 
   void _parseRepoPackageVersions() {
@@ -464,7 +455,6 @@
     _findPackages(Directory(path.join('third_party', 'pkg')));
     _findPackages(
         Directory(path.join('third_party', 'pkg', 'file', 'packages')));
-    _findPackages(Directory(path.join('third_party', 'pkg_tested')));
 
     if (verbose) {
       print('Package versions in the SDK:');
diff --git a/tools/rev_sdk_deps.dart b/tools/rev_sdk_deps.dart
index c9cbb5e..6897ae2 100644
--- a/tools/rev_sdk_deps.dart
+++ b/tools/rev_sdk_deps.dart
@@ -114,8 +114,7 @@
         rev: (entry.value as Map)['rev'],
       );
     }).where((PackageDependency deps) {
-      return deps.entry.startsWith('sdk/third_party/pkg/') ||
-          deps.entry.startsWith('sdk/third_party/pkg_tested/');
+      return deps.entry.startsWith('sdk/third_party/pkg/');
     }).where((PackageDependency deps) {
       return !pinned.contains(deps.name);
     }).toList();