| // Copyright (c) 2019, 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. |
| |
| /*cfe.library: nnbd=false*/ |
| /*cfe:nnbd.library: nnbd=true*/ |
| |
| abstract class ClassWithCall { |
| ClassWithCall call(); |
| int method(); |
| } |
| |
| class Class { |
| ClassWithCall get classWithCall => |
| /*cfe.Never*/ /*cfe:nnbd.Never*/ |
| throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42; |
| |
| int method() => |
| /*cfe.ClassWithCall*/ |
| /*cfe:nnbd.ClassWithCall!*/ |
| classWithCall |
| /*cfe.invoke: ClassWithCall*/ |
| /*cfe:nnbd.invoke: ClassWithCall!*/ |
| () |
| . /*cfe.invoke: int*/ |
| /*cfe:nnbd.invoke: int!*/ |
| method(); |
| } |
| |
| abstract class GenericClassWithCall<T> { |
| T call(); |
| T method(); |
| } |
| |
| class GenericClass<S, T extends GenericClassWithCall<S>> { |
| GenericClassWithCall<T> get classWithCall => |
| /*cfe.Never*/ /*cfe:nnbd.Never*/ |
| throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42; |
| |
| S method() => |
| /*cfe.GenericClassWithCall<T>*/ |
| /*cfe:nnbd.GenericClassWithCall<T!>!*/ |
| classWithCall /*cfe.invoke: T*/ /*cfe:nnbd.invoke: T!*/ () |
| . /*cfe.invoke: S*/ /*cfe:nnbd.invoke: S%*/ method(); |
| } |
| |
| main() { |
| new /*cfe.GenericClass<String,GenericClassWithCall<String>>*/ |
| /*cfe:nnbd.GenericClass<String!,GenericClassWithCall<String!>!>!*/ |
| GenericClass<String, GenericClassWithCall<String>> |
| /*cfe.<String,GenericClassWithCall<String>>*/ |
| /*cfe:nnbd.<String!,GenericClassWithCall<String!>!>*/ () |
| . /*cfe.GenericClassWithCall<GenericClassWithCall<String>>*/ |
| /*cfe:nnbd.GenericClassWithCall<GenericClassWithCall<String!>!>!*/ |
| classWithCall |
| /*cfe.invoke: GenericClassWithCall<String>*/ |
| /*cfe:nnbd.invoke: GenericClassWithCall<String!>!*/ |
| () |
| . /*cfe.invoke: String*/ /*cfe:nnbd.invoke: String!*/ method(); |
| } |