library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
// class C with A, B {} // error
//       ^
// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'A.method'.
//   String method(num i);
//          ^
// pkg/front_end/testcases/general/issue41210a.dart:14:10: Context: This is the overridden method ('method').
//   String method(num i, {String s = "hello"}) => s;
//          ^
//
import self as self;
import "dart:core" as core;

abstract class Interface extends core::Object {
  synthetic constructor •() → self::Interface*
    ;
  abstract method method(core::num* i) → core::String*;
}
abstract class Interface2 extends core::Object {
  synthetic constructor •() → self::Interface2*
    ;
  abstract method method(covariant core::int* i) → core::String*;
}
abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
  method method(core::num* i, {core::String* s = "hello"}) → core::String*
    ;
}
abstract class B extends core::Object implements self::Interface {
  synthetic constructor •() → self::B*
    ;
  abstract method method(core::num* i) → core::String*;
}
abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&A*
    : super core::Object::•()
    ;
}
abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&A&B*
    : super self::_C&Object&A::•()
    ;
  abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
}
class C extends self::_C&Object&A&B {
  synthetic constructor •() → self::C*
    ;
  abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
}
abstract class D extends core::Object implements self::Interface, self::Interface2 {
  synthetic constructor •() → self::D*
    ;
  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
}
abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_E&Object&A*
    : super core::Object::•()
    ;
}
abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_E&Object&A&D*
    : super self::_E&Object&A::•()
    ;
  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
    return super.{self::A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
  synthetic constructor •() → self::E*
    ;
  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
    return super.{self::A::method}(i, s: s);
}
static method main() → dynamic
  ;
