fdc765faad
TEST=existing Change-Id: I0a8fdf09f742b55357411f12dc6164d4050bb83c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196283 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
67 lines
2.9 KiB
Plaintext
67 lines
2.9 KiB
Plaintext
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 = col::LinkedHashSet::•<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 = col::LinkedHashSet::•<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 = col::LinkedHashSet::•<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 = col::LinkedHashSet::•<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 = col::LinkedHashSet::•<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 = col::LinkedHashSet::•<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 {
|
|
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);
|
|
}
|