mixin Diagnosticable {
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
}

class DiagnosticPropertiesBuilder {}

abstract class PointerEvent with Diagnosticable {}

abstract class PointerSignalEvent extends PointerEvent {}

mixin _PointerEventDescription on PointerEvent {
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
}
mixin _CopyPointerScrollEvent on PointerEvent {}

class PointerScrollEvent extends PointerSignalEvent
    with _PointerEventDescription, _CopyPointerScrollEvent {
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
}

main() {}
