| // Copyright (c) 2021, 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. |
| |
| class Bound {} |
| |
| class BoundedGenericClass<A extends Bound?, B extends Bound> {} |
| |
| A boundedGenericA<A extends Bound?>() => throw ''; |
| B boundedGenericB<B extends Bound>() => throw ''; |
| |
| class GenericClass<X extends Bound?, Y extends Bound> { |
| method() { |
| new BoundedGenericClass/*<Bound?,Bound>*/(); |
| BoundedGenericClass<X, Y> class1a = new BoundedGenericClass/*<Never,Y>*/(); |
| BoundedGenericClass<Y, Y> class1b = new BoundedGenericClass/*<Y,Y>*/(); |
| BoundedGenericClass<Bound?, Bound> class1c = |
| new BoundedGenericClass/*<Bound?,Bound>*/(); |
| BoundedGenericClass<Bound, Bound> class1d = |
| new BoundedGenericClass/*<Bound,Bound>*/(); |
| |
| boundedGenericA/*<Bound?>*/(); |
| X x1 = boundedGenericA/*<Never>*/(); |
| Y y1 = boundedGenericA/*<Y>*/(); |
| Bound b1 = boundedGenericA/*<Bound>*/(); |
| Bound? b2 = boundedGenericA/*<Bound?>*/(); |
| |
| boundedGenericB/*<Bound>*/(); |
| Y y2 = boundedGenericB/*<Y>*/(); |
| Bound b3 = boundedGenericB/*<Bound>*/(); |
| } |
| } |
| |
| genericMethod<X extends Bound?, Y extends Bound>() { |
| new BoundedGenericClass/*<Bound?,Bound>*/(); |
| BoundedGenericClass<X, Y> class1a = new BoundedGenericClass/*<Never,Y>*/(); |
| BoundedGenericClass<Y, Y> class1b = new BoundedGenericClass/*<Y,Y>*/(); |
| BoundedGenericClass<Bound?, Bound> class1c = |
| new BoundedGenericClass/*<Bound?,Bound>*/(); |
| BoundedGenericClass<Bound, Bound> class1d = |
| new BoundedGenericClass/*<Bound,Bound>*/(); |
| |
| boundedGenericA/*<Bound?>*/(); |
| X x1 = boundedGenericA/*<Never>*/(); |
| Y y1 = boundedGenericA/*<Y>*/(); |
| Bound b1 = boundedGenericA/*<Bound>*/(); |
| Bound? b2 = boundedGenericA/*<Bound?>*/(); |
| |
| boundedGenericB/*<Bound>*/(); |
| Y y2 = boundedGenericB/*<Y>*/(); |
| Bound b3 = boundedGenericB/*<Bound>*/(); |
| } |