blob: e2c9c7c95fbf53d45da705938574bf2032526c0b [file] [log] [blame]
// @dart = 2.9
class A<T> {}
class B<T> extends A<Function(T)> {}
class Bc<T> extends A<ContravariantUse<T>> {}
class Bi<T> extends A<InvariantUse<T>> {}
class C<T> implements A<Function(T)> {}
class Cc<T> implements A<ContravariantUse<T>> {}
class Ci<T> implements A<InvariantUse<T>> {}
class D<T> = Object with A<Function(T)>;
class Dc<T> = Object with A<ContravariantUse<T>>;
class Di<T> = Object with A<InvariantUse<T>>;
class E<T> = A<Function(T)> with Empty;
class Ec<T> = A<ContravariantUse<T>> with Empty;
class Ei<T> = A<InvariantUse<T>> with Empty;
class Empty {}
class F<T> extends Object with A<Function(T)> {}
class Fc<T> extends Object with A<ContravariantUse<T>> {}
class Fi<T> extends Object with A<InvariantUse<T>> {}
class G<T> extends A<Function(T)> with Empty {}
class Gc<T> extends A<ContravariantUse<T>> with Empty {}
class Gi<T> extends A<InvariantUse<T>> with Empty {}
class Hcc<T> extends A<ContravariantUse<ContravariantUse<T>>> {}
class Hcf<T> extends A<ContravariantUse<Function(T)>> {}
class Hfc<T> extends A<Function(ContravariantUse<T>)> {}
class Hff<T> extends A<Function(Function(T))> {}
class Hii<T> extends A<InvariantUse<InvariantUse<T>>> {}
class Iacf<T> extends A<A<ContravariantUse<Function(T)>>> {}
class Iafc<T> extends A<A<Function(ContravariantUse<T>)>> {}
class Icaf<T> extends A<ContravariantUse<A<Function(T)>>> {}
class Icfa<T> extends A<ContravariantUse<Function(A<T>)>> {}
class Ifac<T> extends A<Function(A<ContravariantUse<T>>)> {}
class Ifca<T> extends A<Function(ContravariantUse<A<T>>)> {}
class Jccc<T>
extends A<ContravariantUse<ContravariantUse<ContravariantUse<T>>>> {}
class Jccf<T> extends A<ContravariantUse<ContravariantUse<Function(T)>>> {}
class Jcfc<T> extends A<ContravariantUse<Function(ContravariantUse<T>)>> {}
class Jcff<T> extends A<ContravariantUse<Function(Function(T))>> {}
class Jfcc<T> extends A<Function(ContravariantUse<ContravariantUse<T>>)> {}
class Jfcf<T> extends A<Function(ContravariantUse<Function(T)>)> {}
class Jffc<T> extends A<Function(Function(ContravariantUse<T>))> {}
class Jfff<T> extends A<Function(Function(Function(T)))> {}
main() {}
typedef ContravariantUse<T> = Function(T);
typedef InvariantUse<T> = T Function(T);