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
    : 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 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1
    : super core::Object::•()
    ;
  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic {}
}
abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1&M2
    : super self::_C&Object&M1::•()
    ;
  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b) → dynamic {}
}
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 extends self::Superclass implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
    : super self::Superclass::•()
    ;
  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, covariant-by-declaration core::int? e) → void {}
}
abstract class _Mixed&Superclass&Mixin1&Mixin2 extends self::_Mixed&Superclass&Mixin1 implements self::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
    : super self::_Mixed&Superclass&Mixin1::•()
    ;
  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 {}
}
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 {
  self::testDirect();
  self::testInherited();
  self::testOverridden();
  self::testImplemented();
  self::testMixed();
}
static method testDirect() → void {
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Direct::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Direct::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Direct::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
}
static method testInherited() → void {
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Inherited::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Inherited::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Inherited::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
}
static method testOverridden() → void {
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method2 = new self::Override2::•().{self::Override2::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(method2 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(method2 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method3 = new self::Override3::•().{self::Override3::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(method3 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(method3 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
}
static method testImplemented() → void {
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Implement5::•().{self::Implement5::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
}
static method testMixed() → void {
  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Mixed::•().{self::Mixed::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
}
static method isTrue(core::bool value) → void {
  if(!value)
    throw "Expected true";
}

constants  {
  #C1 = null
}
