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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method method1({required core::int a = #C1}) → void {}
  method method2({core::int? a = #C1, required core::int b = #C1}) → void {}
}
class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
}
class C extends self::A implements self::B {
  synthetic constructor •() → self::C
    : super self::A::•()
    ;
  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
    return super.{self::A::method1}(a: a);
  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
    return super.{self::A::method2}(a: a, b: b);
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
}
static method main() → dynamic {}

constants  {
  #C1 = null
}
