mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:27:17 +00:00
5f655a8c27
Change-Id: Icb4eae77fab5257ea00ff948d3f775725398e6ab Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142067 Commit-Queue: Bob Nystrom <rnystrom@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Erik Ernst <eernst@google.com>
59 lines
1.8 KiB
Dart
59 lines
1.8 KiB
Dart
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class A {}
|
|
|
|
abstract class B<T> {
|
|
// x will be marked genericCovariantInterface, since x's type is covariant in
|
|
// the type parameter T.
|
|
void set s2(T x);
|
|
|
|
// x will be marked genericCovariantInterface, since x's type is covariant in
|
|
// the type parameter T.
|
|
void set s3(T x);
|
|
|
|
void set s4(Object? x);
|
|
|
|
void set s5(Object? x) {
|
|
s4 = x;
|
|
}
|
|
}
|
|
|
|
class C extends B<A> {
|
|
A? s1;
|
|
|
|
// s2 will be marked genericCovariantImpl, since it might be called via
|
|
// e.g. B<Object>.
|
|
A? s2;
|
|
|
|
// s3 will be marked genericCovariantImpl, since it might be called via
|
|
// e.g. B<Object>.
|
|
covariant A? s3;
|
|
|
|
covariant A? s4;
|
|
}
|
|
|
|
main() {
|
|
// Dynamic method calls should always have their arguments type checked.
|
|
dynamic d = new C();
|
|
Expect.throwsTypeError(() => d.s1 = new Object()); //# 01: ok
|
|
|
|
// Interface calls should have any arguments marked "genericCovariantImpl"
|
|
// type checked provided that the corresponding argument on the interface
|
|
// target is marked "genericCovariantInterface".
|
|
B<Object> b = new C();
|
|
Expect.throwsTypeError(() => b.s2 = new Object()); //# 02: ok
|
|
|
|
// Interface calls should have any arguments marked "covariant" type checked,
|
|
// regardless of whether the corresponding argument on the interface target is
|
|
// marked "genericCovariantInterface".
|
|
Expect.throwsTypeError(() => b.s3 = new Object()); //# 03: ok
|
|
Expect.throwsTypeError(() => b.s4 = new Object()); //# 04: ok
|
|
|
|
// This calls should have any arguments marked "covariant" type checked.
|
|
Expect.throwsTypeError(() => b.s5 = new Object()); //# 05: ok
|
|
}
|