library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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_class.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;

class Foo<U extends core::Object* = dynamic> extends core::Object {
  static field invalid-type foo14;
  static field core::List<invalid-type>* foo14Prime;
  static field (invalid-type) →* invalid-type foo15;
  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime;
  synthetic constructor •() → self::Foo<self::Foo::U*>*
    ;
  static method foo1() → invalid-type
    ;
  static method foo1Prime() → core::List<invalid-type>*
    ;
  static method foo2(invalid-type x) → void
    ;
  static method foo2Prime(core::List<invalid-type>* x) → void
    ;
  static method foo3() → void
    ;
  static method foo8() → () →* invalid-type
    ;
  static method foo8Prime() → () →* core::List<invalid-type>*
    ;
  static method foo9() → (invalid-type) →* void
    ;
  static method foo9Prime() → (core::List<invalid-type>*) →* void
    ;
  static method foo10(() →* invalid-type Function) → void
    ;
  static method foo10Prime(() →* core::List<invalid-type>* Function) → void
    ;
  static method foo11((dynamic) →* void Function) → void
    ;
  static method foo12((invalid-type) →* void b) → void
    ;
  static method foo12Prime((core::List<invalid-type>*) →* void b) → void
    ;
  static method foo13((invalid-type) →* void Function) → void
    ;
  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic
  ;
