// @dart = 2.9
class Foo<U> {
  static List<U> Function() foo8Prime() {}
  static List<U> Function(List<U>) foo15Prime = null;
  static List<U> foo14Prime = null;
  static List<U> foo1Prime() {}
  static U Function() foo8() {}
  static U Function(U) foo15 = null;
  static U foo1() {}
  static U foo14 = null;
  static void Function(List<U>) foo9Prime() {}
  static void Function(U) foo9() {}
  static void foo10(U Function()) {}
  static void foo10Prime(List<U> Function()) {}
  static void foo11(void Function(U)) {}
  static void foo12(void Function(U) b) {}
  static void foo12Prime(void Function(List<U>) b) {}
  static void foo13(void Function(U b)) {}
  static void foo13Prime(void Function(List<U> b)) {}
  static void foo2(U x) {}
  static void foo2Prime(List<U> x) {}
  static void foo3() {}
}

main() {}
