// 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.

// @dart = 2.9

typedef F1<X> = void Function(X);
typedef F2<X> = X Function(X);
typedef F3<X> = void Function<Y extends X>();
typedef F4<X> = X Function(X Function(void));
typedef F5<X, Y> = Y Function(X);
typedef F6<X, Y> = X Function(Y);

class A<X> {}

class B<X> extends A<F1<X>> {} //# 01: compile-time error

class B<X> extends A<F2<X>> {} //# 02: compile-time error

class B<X> extends A<F3<X>> {} //# 03: compile-time error

class B<X> extends A<F4<X>> {} //# 04: compile-time error

class B<X, Y> extends A<F5<X, Y>> {} //# 05: compile-time error

class B<X, Y> extends A<F6<X, Y>> {} //# 06: compile-time error

class B<X> extends Object with A<F1<X>> {} //# 07: compile-time error

class B<X> extends Object with A<F2<X>> {} //# 08: compile-time error

class B<X> extends Object with A<F3<X>> {} //# 09: compile-time error

class B<X> extends Object with A<F4<X>> {} //# 10: compile-time error

class B<X, Y> extends Object with A<F5<X, Y>> {} //# 11: compile-time error

class B<X, Y> extends Object with A<F6<X, Y>> {} //# 12: compile-time error

class B<X> implements A<F1<X>> {} //# 13: compile-time error

class B<X> implements A<F2<X>> {} //# 14: compile-time error

class B<X> implements A<F3<X>> {} //# 15: compile-time error

class B<X> implements A<F4<X>> {} //# 16: compile-time error

class B<X, Y> implements A<F5<X, Y>> {} //# 17: compile-time error

class B<X, Y> implements A<F6<X, Y>> {} //# 18: compile-time error

class B<X> extends A<void Function(X)> {} //# 19: compile-time error

class B<X> extends A<X Function(X)> {} //# 20: compile-time error

// Two errors here: Invariance in superinterface and
// generic function type used as actual type argument.
class B<X> extends A<void Function<Y extends X>()> {} //# 21: compile-time error

class B<X> extends A<X Function(X Function(void))> {} //# 22: compile-time error

class B<X, Y> extends A<Y Function(X)> {} //# 23: compile-time error

class B<X, Y> extends A<X Function(Y)> {} //# 24: compile-time error

class B<X> extends Object with A<void Function(X)> {} //# 25: compile-time error

class B<X> extends Object with A<X Function(X)> {} //# 26: compile-time error

// Two errors here: Invariance in superinterface and
// generic function type used as actual type argument.
class B<X> extends Object //# 27: compile-time error
    with //# 27: continued
        A<void Function<Y extends X>()> {} //# 27: continued

class B<X> extends Object //# 28: compile-time error
    with //# 28: continued
        A<X Function(X Function(void))> {} //# 28: continued

class B<X, Y> extends Object with A<Y Function(X)> {} //# 29: compile-time error

class B<X, Y> extends Object with A<X Function(Y)> {} //# 30: compile-time error

class B<X> implements A<void Function(X)> {} //# 31: compile-time error

class B<X> implements A<X Function(X)> {} //# 32: compile-time error

// Two errors here: Invariance in superinterface and
// generic function type used as actual type argument.
class B<X> //# 33: compile-time error
    implements //# 33: continued
        A<void Function<Y extends X>()> {} //# 33: continued

class B<X> //# 34: compile-time error
    implements //# 34: continued
        A<X Function(X Function(void))> {} //# 34: continued

class B<X, Y> implements A<Y Function(X)> {} //# 35: compile-time error

class B<X, Y> implements A<X Function(Y)> {} //# 36: compile-time error

main() {
  A();
}
