blob: 47bd5a29a35c79c398d48e2667e974f4208b8c8e [file] [log] [blame]
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 = 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);
}