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

typedef TakeInts = (core::int?, core::int?, core::int?, core::int?, core::int?) → void;
typedef TakeObjectsAndInts = (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void;
typedef TakeObjects = (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void;
typedef TakeOptionalInts = ([core::int?, core::int?, core::int?, core::int?]) → void;
typedef TakeOptionalObjectsAndInts = ([core::Object?, core::int?, core::Object?, core::int?]) → void;
typedef TakeNamedInts = ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void;
typedef TakeNamedObjectsAndInts = ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void;
class M1 extends core::Object {
  synthetic constructor •() → self::M1
    ;
  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic
    ;
}
class M2 extends core::Object {
  synthetic constructor •() → self::M2
    ;
  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
    ;
}
class Direct extends core::Object {
  synthetic constructor •() → self::Direct
    ;
  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 = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null]) → void
    ;
  method named({covariant-by-declaration core::int? a = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null}) → void
    ;
}
class Inherited extends self::Direct {
  synthetic constructor •() → self::Inherited
    ;
}
class Override1 extends core::Object {
  synthetic constructor •() → self::Override1
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
    ;
  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
  ;
static method testDirect() → void
  ;
static method testInherited() → void
  ;
static method testOverridden() → void
  ;
static method testImplemented() → void
  ;
static method testMixed() → void
  ;
static method isTrue(core::bool value) → void
  ;
