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

class C<X extends core::Object?, Y extends 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 = block {
      final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
      #t1.{core::Set::add}{Invariant}(x);
      #t1.{core::Set::add}{Invariant}(42);
    } =>#t1;
    core::Set<core::Object?> w = block {
      final core::Set<core::Object?> #t2 = new col::_CompactLinkedHashSet::•<core::Object?>();
      #t2.{core::Set::add}{Invariant}(42);
      #t2.{core::Set::add}{Invariant}(x);
    } =>#t2;
    core::Set<core::Object?> p = block {
      final core::Set<core::Object?> #t3 = new col::_CompactLinkedHashSet::•<core::Object?>();
      #t3.{core::Set::add}{Invariant}(y);
      #t3.{core::Set::add}{Invariant}(42);
    } =>#t3;
    core::Set<core::Object?> q = block {
      final core::Set<core::Object?> #t4 = new col::_CompactLinkedHashSet::•<core::Object?>();
      #t4.{core::Set::add}{Invariant}(42);
      #t4.{core::Set::add}{Invariant}(y);
    } =>#t4;
    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 = block {
        final core::Set<core::Object?> #t5 = new col::_CompactLinkedHashSet::•<core::Object?>();
        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
        #t5.{core::Set::add}{Invariant}(42);
      } =>#t5;
      core::Set<core::Object?> w = block {
        final core::Set<core::Object?> #t6 = new col::_CompactLinkedHashSet::•<core::Object?>();
        #t6.{core::Set::add}{Invariant}(42);
        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
      } =>#t6;
      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 {
  new col::_CompactLinkedHashSet::•<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);
}
