library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
//   static U foo1() { return null; }
//          ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
//   static List<U> foo1Prime() { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
//   static void foo2(U x) { return null; }
//                    ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
//   static void foo2Prime(List<U> x) { return null; }
//                              ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
//   static U Function() foo8() { return null; }
//          ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
//   static List<U> Function() foo8Prime() { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
//   static void Function(U) foo9() { return null; }
//                        ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
//   static void Function(List<U>) foo9Prime() { return null; }
//                             ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
//   static void foo10(U Function()) { return null; }
//                     ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
//   static void foo10Prime(List<U> Function()) { return null; }
//                               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
//   static void foo12(void Function(U) b) { return null; }
//                                   ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
//   static void foo12Prime(void Function(List<U>) b) { return null; }
//                                             ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
//   static void foo13(void Function(U b)) { return null; }
//                                   ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
//   static void foo13Prime(void Function(List<U> b)) { return null; }
//                                             ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
//   static U foo14 = null;
//          ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
//   static List<U> foo14Prime = null;
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
//   static U Function(U) foo15 = null;
//          ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
//   static U Function(U) foo15 = null;
//                     ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
//   static List<U> Function(List<U>) foo15Prime = null;
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
//   static List<U> Function(List<U>) foo15Prime = null;
//                                ^
//
import self as self;
import "dart:core" as core;

extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
  static method foo1 = self::Foo|foo1;
  static method foo1Prime = self::Foo|foo1Prime;
  static method foo2 = self::Foo|foo2;
  static method foo2Prime = self::Foo|foo2Prime;
  static method foo3 = self::Foo|foo3;
  static method foo8 = self::Foo|foo8;
  static method foo8Prime = self::Foo|foo8Prime;
  static method foo9 = self::Foo|foo9;
  static method foo9Prime = self::Foo|foo9Prime;
  static method foo10 = self::Foo|foo10;
  static method foo10Prime = self::Foo|foo10Prime;
  static method foo11 = self::Foo|foo11;
  static method foo12 = self::Foo|foo12;
  static method foo12Prime = self::Foo|foo12Prime;
  static method foo13 = self::Foo|foo13;
  static method foo13Prime = self::Foo|foo13Prime;
  static field foo14 = self::Foo|foo14;
  static field foo14Prime = self::Foo|foo14Prime;
  static field foo15 = self::Foo|foo15;
  static field foo15Prime = self::Foo|foo15Prime;
}
static field invalid-type Foo|foo14;
static field core::List<invalid-type>* Foo|foo14Prime;
static field (invalid-type) →* invalid-type Foo|foo15;
static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime;
static method Foo|foo1() → invalid-type
  ;
static method Foo|foo1Prime() → core::List<invalid-type>*
  ;
static method Foo|foo2(invalid-type x) → void
  ;
static method Foo|foo2Prime(core::List<invalid-type>* x) → void
  ;
static method Foo|foo3() → void
  ;
static method Foo|foo8() → () →* invalid-type
  ;
static method Foo|foo8Prime() → () →* core::List<invalid-type>*
  ;
static method Foo|foo9() → (invalid-type) →* void
  ;
static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void
  ;
static method Foo|foo10(() →* invalid-type Function) → void
  ;
static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void
  ;
static method Foo|foo11((dynamic) →* void Function) → void
  ;
static method Foo|foo12((invalid-type) →* void b) → void
  ;
static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void
  ;
static method Foo|foo13((invalid-type) →* void Function) → void
  ;
static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void
  ;
static method main() → dynamic
  ;
