blob: 2815e552224eeeed66219c95dcc08d11a7460c88 [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?, Y extends core::Object> extends core::Object {
synthetic constructor •() self::C<self::C::X%, self::C::Y>
: super core::Object::•()
;
method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) dynamic {
core::Set<core::Object?> v = block {
final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
#t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
#t1.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
} =>#t1;
core::Set<core::Object?> w = block {
final core::Set<core::Object?> #t2 = col::LinkedHashSet::•<core::Object?>();
#t2.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
#t2.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
} =>#t2;
core::Set<core::Object?> p = block {
final core::Set<core::Object?> #t3 = col::LinkedHashSet::•<core::Object?>();
#t3.{core::Set::add}{Invariant}(y){(core::Object?) → core::bool};
#t3.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
} =>#t3;
core::Set<core::Object?> q = block {
final core::Set<core::Object?> #t4 = col::LinkedHashSet::•<core::Object?>();
#t4.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
#t4.{core::Set::add}{Invariant}(y){(core::Object?) → core::bool};
} =>#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 = col::LinkedHashSet::•<core::Object?>();
#t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
#t5.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
} =>#t5;
core::Set<core::Object?> w = block {
final core::Set<core::Object?> #t6 = col::LinkedHashSet::•<core::Object?>();
#t6.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
#t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
} =>#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 {
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){(core::int?, core::int?) dynamic};
new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) dynamic};
}