Files
sdk/tests/language/generic/f_bounded_quantification_test.dart
T
Robert Nystrom 2bf3259005 Migrate language_2/generic to NNBD.
Change-Id: I582fa00eb713282c3bd6fc1607efc0242ce9076f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146686
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2020-05-13 01:00:35 +00:00

40 lines
1.6 KiB
Dart

// Copyright (c) 2011, 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.
// Test for F-Bounded Quantification.
class FBound<F extends FBound<F>> {}
class Bar extends FBound<Bar> {}
class SubBar extends Bar {}
class Baz<T> extends FBound<Baz<T>> {}
class SubBaz<T> extends Baz<T> {}
main() {
FBound<Bar> fb = new FBound<Bar>();
FBound<SubBar> fsb = new FBound<SubBar>();
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
// ^
// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
// ^
// [cfe] Type argument 'SubBar' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
FBound<Baz<Bar>> fbb = new FBound<Baz<Bar>>();
FBound<SubBaz<Bar>> fsbb = new FBound<SubBaz<Bar>>();
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
// ^
// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
// ^
// [cfe] Type argument 'SubBaz<Bar>' doesn't conform to the bound 'FBound<F>' of the type variable 'F' on 'FBound'.
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
}