[api_summary] Include mixins in textual API summaries (#2417)
diff --git a/pkgs/api_summary/lib/src/api_description.dart b/pkgs/api_summary/lib/src/api_description.dart
index 7f88e35..9899c65 100644
--- a/pkgs/api_summary/lib/src/api_description.dart
+++ b/pkgs/api_summary/lib/src/api_description.dart
@@ -260,6 +260,7 @@
case InterfaceElement(
:final typeParameters,
:final supertype,
+ :final mixins,
:final interfaces,
):
final instanceDescription = <Object?>[
@@ -284,6 +285,11 @@
..._describeType(supertype),
]);
}
+ if (mixins.isNotEmpty) {
+ instanceDescription.addAll(
+ mixins.map(_describeType).separatedBy(prefix: ' with '),
+ );
+ }
if (element is MixinElement &&
element.superclassConstraints.isNotEmpty) {
instanceDescription.addAll(
diff --git a/pkgs/api_summary/test/api_description_test.dart b/pkgs/api_summary/test/api_description_test.dart
index 0fa98b4..c860d46 100644
--- a/pkgs/api_summary/test/api_description_test.dart
+++ b/pkgs/api_summary/test/api_description_test.dart
@@ -36,6 +36,28 @@
super.setUp();
}
+ Future<void> test_class_mixins() async {
+ final summary = await _build({
+ '$testPackageLibPath/file.dart': '''
+mixin M1 {}
+mixin M2 {}
+class C1 extends Object with M1 {}
+class C2 extends Object with M2 implements M1 {}
+''',
+ });
+ expect(summary, '''
+package:test/file.dart:
+ C1 (class extends Object with M1):
+ new (constructor: C1 Function())
+ C2 (class extends Object with M2 implements M1):
+ new (constructor: C2 Function())
+ M1 (mixin on Object)
+ M2 (mixin on Object)
+dart:core:
+ Object (referenced)
+''');
+ }
+
Future<void> test_class_modifiers() async {
final summary = await _build({
'$testPackageLibPath/file.dart': '''