// @dart = 2.6
class A1<X extends Function<T>()> {
  A1(Function<X extends Function<T>()>() f);
  bar1(Function<X extends Function<T>()>() f) {}
  Function<X extends Function<T>()>() bar2() => throw 42;
  Function<X extends Function<T>()>() get baz1 => throw 42;
  void set qux1(Function<X extends Function<T>()>() value) {}
  Function<X extends Function<T>()>() quux1 = throw 42;
  static Function<X extends Function<T>()>() quux2 = throw 42;
}

class A2<X extends void Function<Y extends Function<T>()>()> {}

class A3<
    X extends Function(void Function<Y extends Function(Function<T>())>())> {}

foo1(Function<X extends Function<T>()>() f) {}
foo2(Function<X extends Function(Function<T>())>() f) {}
Function<X extends Function<T>()>() foo3() => throw 42;
Function<X extends Function(Function<T>())>() foo4() => throw 42;
Function<X extends Function<T>()>() get corge1 => throw 42;
void set grault1(Function<X extends Function<T>()>() value) {}
Function<X extends Function<T>()>() quuz1 = throw 42;
typedef F1 = void Function<X extends void Function<T>()>();
typedef F2 = void Function<X extends Function(void Function<T>())>();
typedef F3<X extends Function<T>()> = Function();
typedef F4<X extends Function<Y extends Function<T>()>()> = Function();
typedef F5<X extends Function(Function<Y extends Function(Function<T>())>())>
    = Function();

class B1 {}

extension E1<X extends Function<T>()> on B1 {
  bar3(Function<X extends Function<T>()>() f) {}
  Function<X extends Function<T>()>() bar4() => throw 42;
  Function<X extends Function<T>()>() get baz2 => throw 42;
  void set qux2(Function<X extends Function<T>()>() value) {}
  static Function<X extends Function<T>()>() quux3 = throw 42;
}

main() {}
