abstract class Implement1 {
  void method(covariant int a, int b, int c, int d, int e) {}
}

class C extends Object with M1, M2 {}

class Direct {
  void named({covariant int a, int b, covariant int c, int d}) {}
  void optional([covariant int a, int b, covariant int c, int d]) {}
  void positional(covariant int a, int b, covariant int c, int d, int e) {}
}

class Implement2 {
  void method(int a, covariant int b, int c, int d, int e) {}
}

class Implement3 {
  void method(int a, int b, covariant int c, int d, int e) {}
}

class Implement4 implements Implement3 {
  void method(int a, int b, int c, covariant int d, int e) {}
}

class Implement5 implements Implement1, Implement2, Implement4 {
  void method(int a, int b, int c, int d, covariant int e) {}
}

class Inherited extends Direct {}

class Interface1 {
  void method(covariant int a, int b, int c, int d, int e) {}
}

class Interface2 {
  void method(int a, covariant int b, int c, int d, int e) {}
}

class M1 {
  method(covariant int a, int b) {}
}

class M2 {
  method(int a, covariant int b) {}
}

class Mixed extends Superclass
    with Mixin1, Mixin2
    implements Interface1, Interface2 {}

class Mixin1 {
  void method(int a, int b, covariant int c, int d, int e) {}
}

class Mixin2 {
  void method(int a, int b, int c, covariant int d, int e) {}
}

class Override1 {
  void method(covariant int a, int b, int c, int d, int e) {}
}

class Override2 extends Override1 {
  void method(int a, int b, covariant int c, int d, int e) {}
}

class Override3 extends Override2 {
  void method(int a, int b, int c, int d, int e) {}
}

class Superclass {
  void method(int a, int b, int c, int d, covariant int e) {}
}

typedef void TakeInts(int a, int b, int c, int d, int e);
typedef void TakeNamedInts({int a, int b, int c, int d});
typedef void TakeNamedObjectsAndInts({Object a, int b, Object c, int d});
typedef void TakeObjects(Object a, Object b, Object c, Object d, Object e);
typedef void TakeObjectsAndInts(Object a, int b, Object c, int d, int e);
typedef void TakeOptionalInts([int a, int b, int c, int d]);
typedef void TakeOptionalObjectsAndInts([Object a, int b, Object c, int d]);
void isTrue(bool value) {}
void main() {}
void testDirect() {}
void testImplemented() {}
void testInherited() {}
void testMixed() {}
void testOverridden() {}
