library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class M1 extends core::Object {
  synthetic constructor •() → self::M1
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b) → dynamic {}
}
class M2 extends core::Object {
  synthetic constructor •() → self::M2
    : super core::Object::•()
    ;
  method method(core::int a, covariant-by-declaration core::int b) → dynamic {}
}
abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1
    : super core::Object::•()
    ;
  mixin-super-stub method method(covariant-by-declaration core::int a, core::int b) → dynamic
    return super.{self::M1::method}(a, b);
}
abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1&M2
    : super self::_C&Object&M1::•()
    ;
  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b) → dynamic
    return super.{self::M2::method}(a, b);
}
class C extends self::_C&Object&M1&M2 {
  synthetic constructor •() → self::C
    : super self::_C&Object&M1&M2::•()
    ;
}
class Direct extends core::Object {
  synthetic constructor •() → self::Direct
    : super core::Object::•()
    ;
  method positional(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
  method optional([covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1]) → void {}
  method named({covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1}) → void {}
}
class Inherited extends self::Direct {
  synthetic constructor •() → self::Inherited
    : super self::Direct::•()
    ;
}
class Override1 extends core::Object {
  synthetic constructor •() → self::Override1
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
}
class Override2 extends self::Override1 {
  synthetic constructor •() → self::Override2
    : super self::Override1::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
}
class Override3 extends self::Override2 {
  synthetic constructor •() → self::Override3
    : super self::Override2::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
}
abstract class Implement1 extends core::Object {
  synthetic constructor •() → self::Implement1
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
}
class Implement2 extends core::Object {
  synthetic constructor •() → self::Implement2
    : super core::Object::•()
    ;
  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
}
class Implement3 extends core::Object {
  synthetic constructor •() → self::Implement3
    : super core::Object::•()
    ;
  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
}
class Implement4 extends core::Object implements self::Implement3 {
  synthetic constructor •() → self::Implement4
    : super core::Object::•()
    ;
  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, core::int e) → void {}
}
class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
  synthetic constructor •() → self::Implement5
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void {}
}
class Interface1 extends core::Object {
  synthetic constructor •() → self::Interface1
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
}
class Interface2 extends core::Object {
  synthetic constructor •() → self::Interface2
    : super core::Object::•()
    ;
  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
}
class Mixin1 extends core::Object {
  synthetic constructor •() → self::Mixin1
    : super core::Object::•()
    ;
  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
}
class Mixin2 extends core::Object {
  synthetic constructor •() → self::Mixin2
    : super core::Object::•()
    ;
  method method(core::int a, core::int b, core::int c, covariant-by-declaration core::int d, core::int e) → void {}
}
class Superclass extends core::Object {
  synthetic constructor •() → self::Superclass
    : super core::Object::•()
    ;
  method method(core::int a, core::int b, core::int c, core::int d, covariant-by-declaration core::int e) → void {}
}
abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
    : super self::Superclass::•()
    ;
  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, covariant-by-declaration core::int e) → void
    return super.{self::Mixin1::method}(a, b, c, d, e);
}
abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
    : super self::_Mixed&Superclass&Mixin1::•()
    ;
  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
    return super.{self::Mixin2::method}(a, b, c, d, e);
}
class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
  synthetic constructor •() → self::Mixed
    : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
    ;
  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
    return super.{self::Mixin2::method}(a, b, c, d, e);
}
static method main() → void {}

constants  {
  #C1 = 0
}
