library;
//
// Problems in library:
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:21:7: Context: Override was introduced in the mixin application class 'A0'.
// class A0 = S with M;
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:22:7: Context: Override was introduced in the mixin application class 'A1'.
// class A1 = S with M1, M;
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:23:7: Context: Override was introduced in the mixin application class 'A2'.
// class A2 = S with M1, M2, M;
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:25:7: Context: Override was introduced when the mixin 'M' was applied to 'S'.
// class A0X = S with M, MX;
//       ^^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1'.
// class A1X = S with M1, M, MX;
//       ^^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1, M2'.
// class A2X = S with M1, M2, M, MX;
//       ^^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:29:7: Context: Override was introduced when the mixin 'M' was applied to 'S'.
// class B0 extends S with M {}
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1'.
// class B1 extends S with M1, M {}
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1, M2'.
// class B2 extends S with M1, M2, M {}
//       ^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:35:7: Context: Override was introduced when the mixin 'M' was applied to 'S'.
// class B0X extends S with M, MX {}
//       ^^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1'.
// class B1X extends S with M1, M, MX {}
//       ^^^
//
// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
//   foo() {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
//   foo([x]) {}
//   ^
// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Override was introduced when the mixin 'M' was applied to 'S with M1, M2'.
// class B2X extends S with M1, M2, M, MX {}
//       ^^^
//
import self as self;
import "dart:core" as core;

class S extends core::Object {
  synthetic constructor •() → self::S
    ;
  method foo([dynamic x]) → dynamic
    ;
}
class M extends core::Object {
  synthetic constructor •() → self::M
    ;
  method foo() → dynamic
    ;
}
class M1 extends core::Object {
  synthetic constructor •() → self::M1
    ;
}
class M2 extends core::Object {
  synthetic constructor •() → self::M2
    ;
}
class MX extends core::Object {
  synthetic constructor •() → self::MX
    ;
}
class A0 = self::S with self::M {
  synthetic constructor •() → self::A0
    : super self::S::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _A1&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_A1&S&M1
    : super self::S::•()
    ;
}
class A1 = self::_A1&S&M1 with self::M {
  synthetic constructor •() → self::A1
    : super self::_A1&S&M1::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _A2&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_A2&S&M1
    : super self::S::•()
    ;
}
abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 {
  synthetic constructor •() → self::_A2&S&M1&M2
    : super self::_A2&S&M1::•()
    ;
}
class A2 = self::_A2&S&M1&M2 with self::M {
  synthetic constructor •() → self::A2
    : super self::_A2&S&M1&M2::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _A0X&S&M = self::S with self::M {
  synthetic constructor •() → self::_A0X&S&M
    : super self::S::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class A0X = self::_A0X&S&M with self::MX {
  synthetic constructor •() → self::A0X
    : super self::_A0X&S&M::•()
    ;
}
abstract class _A1X&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_A1X&S&M1
    : super self::S::•()
    ;
}
abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M {
  synthetic constructor •() → self::_A1X&S&M1&M
    : super self::_A1X&S&M1::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class A1X = self::_A1X&S&M1&M with self::MX {
  synthetic constructor •() → self::A1X
    : super self::_A1X&S&M1&M::•()
    ;
}
abstract class _A2X&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_A2X&S&M1
    : super self::S::•()
    ;
}
abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 {
  synthetic constructor •() → self::_A2X&S&M1&M2
    : super self::_A2X&S&M1::•()
    ;
}
abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M {
  synthetic constructor •() → self::_A2X&S&M1&M2&M
    : super self::_A2X&S&M1&M2::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
  synthetic constructor •() → self::A2X
    : super self::_A2X&S&M1&M2&M::•()
    ;
}
abstract class _B0&S&M = self::S with self::M {
  synthetic constructor •() → self::_B0&S&M
    : super self::S::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B0 extends self::_B0&S&M {
  synthetic constructor •() → self::B0
    ;
}
abstract class _B1&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_B1&S&M1
    : super self::S::•()
    ;
}
abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M {
  synthetic constructor •() → self::_B1&S&M1&M
    : super self::_B1&S&M1::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B1 extends self::_B1&S&M1&M {
  synthetic constructor •() → self::B1
    ;
}
abstract class _B2&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_B2&S&M1
    : super self::S::•()
    ;
}
abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 {
  synthetic constructor •() → self::_B2&S&M1&M2
    : super self::_B2&S&M1::•()
    ;
}
abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M {
  synthetic constructor •() → self::_B2&S&M1&M2&M
    : super self::_B2&S&M1&M2::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B2 extends self::_B2&S&M1&M2&M {
  synthetic constructor •() → self::B2
    ;
}
abstract class _B0X&S&M = self::S with self::M {
  synthetic constructor •() → self::_B0X&S&M
    : super self::S::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX {
  synthetic constructor •() → self::_B0X&S&M&MX
    : super self::_B0X&S&M::•()
    ;
}
class B0X extends self::_B0X&S&M&MX {
  synthetic constructor •() → self::B0X
    ;
}
abstract class _B1X&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_B1X&S&M1
    : super self::S::•()
    ;
}
abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M {
  synthetic constructor •() → self::_B1X&S&M1&M
    : super self::_B1X&S&M1::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX {
  synthetic constructor •() → self::_B1X&S&M1&M&MX
    : super self::_B1X&S&M1&M::•()
    ;
}
class B1X extends self::_B1X&S&M1&M&MX {
  synthetic constructor •() → self::B1X
    ;
}
abstract class _B2X&S&M1 = self::S with self::M1 {
  synthetic constructor •() → self::_B2X&S&M1
    : super self::S::•()
    ;
}
abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 {
  synthetic constructor •() → self::_B2X&S&M1&M2
    : super self::_B2X&S&M1::•()
    ;
}
abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M {
  synthetic constructor •() → self::_B2X&S&M1&M2&M
    : super self::_B2X&S&M1&M2::•()
    ;
  abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX {
  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
    : super self::_B2X&S&M1&M2&M::•()
    ;
}
class B2X extends self::_B2X&S&M1&M2&M&MX {
  synthetic constructor •() → self::B2X
    ;
}
static method main() → dynamic
  ;
