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

class C<X extends core::Object? = core::Object?, Y extends core::Object = core::Object> extends core::Object {
  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
    : super core::Object::•()
    ;
  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
    core::Set<core::Object?> v = let final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t2 = #t1.{core::Set::add}(x) in let final dynamic #t3 = #t1.{core::Set::add}(42) in #t1;
    core::Set<core::Object?> w = let final core::Set<core::Object?> #t4 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t5 = #t4.{core::Set::add}(42) in let final dynamic #t6 = #t4.{core::Set::add}(x) in #t4;
    core::Set<core::Object?> p = let final core::Set<core::Object?> #t7 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t8 = #t7.{core::Set::add}(y) in let final dynamic #t9 = #t7.{core::Set::add}(42) in #t7;
    core::Set<core::Object?> q = let final core::Set<core::Object?> #t10 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t11 = #t10.{core::Set::add}(42) in let final dynamic #t12 = #t10.{core::Set::add}(y) in #t10;
    self::assertRightSubtype(v);
    self::assertLeftSubtype<core::Set<core::Object?>>(v);
    self::assertRightSubtype(w);
    self::assertLeftSubtype<core::Set<core::Object?>>(w);
    self::assertRightSubtype(p);
    self::assertLeftSubtype<core::Set<core::Object?>>(p);
    self::assertRightSubtype(q);
    self::assertLeftSubtype<core::Set<core::Object?>>(q);
    if(x is{ForNonNullableByDefault} core::Object?) {
      core::Set<core::Object?> v = let final core::Set<core::Object?> #t13 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t14 = #t13.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}) in let final dynamic #t15 = #t13.{core::Set::add}(42) in #t13;
      core::Set<core::Object?> w = let final core::Set<core::Object?> #t16 = col::LinkedHashSet::•<core::Object?>() in let final dynamic #t17 = #t16.{core::Set::add}(42) in let final dynamic #t18 = #t16.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}) in #t16;
      self::assertRightSubtype(v);
      self::assertLeftSubtype<core::Set<core::Object?>>(v);
      self::assertRightSubtype(w);
      self::assertLeftSubtype<core::Set<core::Object?>>(w);
    }
  }
}
static method assertRightSubtype(dynamic x) → dynamic {
  x as{ForNonNullableByDefault} core::Set<core::Object?>;
}
static method assertLeftSubtype<X extends core::Object? = dynamic>(self::assertLeftSubtype::X% x) → dynamic {
  col::LinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
}
static method main() → dynamic {
  new self::C::•<core::int?, core::int>().{self::C::test}(42, null);
  new self::C::•<core::int?, core::int>().{self::C::test}(null, null);
}
