blob: 98373e925a815159c9fe688a3428d45baaa793ca [file] [log] [blame]
// Copyright (c) 2023, 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.
extension type Ext(Function it) {
String call() => 'call from Ext: ${it()}';
}
class C {
String call() => 'call from C';
}
extension type Ext2(C c) implements C {}
class D {
Function get getter1 => Ext(C());
Function get getter2 {
var result = Ext(C());
return result;
}
Function get getter3 => Ext2(C());
Function get getter4 {
var result = Ext2(C());
return result;
}
Function method1<T extends C>(T c) {
return c;
}
Function method2<T extends C>(T c) {
var result = Ext(c);
return result;
}
Function method3<T extends Ext>(Ext e) {
return e;
}
Function method4<T extends Ext2>(Ext2 e) {
return e;
}
Function method5<T>(T c) {
if (c is C) {
return c;
}
return () => null;
}
Function method6<T, S extends C>(T c) {
if (c is S) {
return c;
}
return () => null;
}
}
class E {
String get getter1 => Ext(C())();
String get getter2 {
var result = Ext(C())();
return result;
}
String get getter3 => Ext2(C())();
String get getter4 {
var result = Ext2(C())();
return result;
}
String method1<T extends C>(T c) {
return c();
}
String method2<T extends C>(T c) {
var result = Ext(c)();
return result;
}
String method3<T extends Ext>(Ext e) {
return e();
}
String method4<T extends Ext2>(Ext2 e) {
return e();
}
String method5<T>(T c) {
if (c is C) {
return c();
}
return "";
}
String method6<T, S extends C>(T c) {
if (c is S) {
return c();
}
return "";
}
}
void main() {
var d = D();
print(d.getter1());
print(d.getter2());
print(d.getter3());
print(d.getter4());
print(d.method1(C())());
print(d.method2(C())());
print(d.method3(Ext(C()))());
print(d.method4(Ext2(C()))());
print(d.method5(C())());
print(d.method6(C())());
var e = E();
print(e.getter1);
print(e.getter2);
print(e.getter3);
print(e.getter4);
print(e.method1(C()));
print(e.method2(C()));
print(e.method3(Ext(C())));
print(e.method4(Ext2(C())));
print(e.method5(C()));
print(e.method6(C()));
}