library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:12: Error: Can only use type variables in instance methods.
//   static U foo1() { return null; }
//            ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Can only use type variables in instance methods.
//   static void foo2(U x) { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:23: Error: Can only use type variables in instance methods.
//   static U Function() foo8() { return null; }
//                       ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:27: Error: Can only use type variables in instance methods.
//   static void Function(U) foo9() { return null; }
//                           ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:15: Error: Can only use type variables in instance methods.
//   static void foo10(U Function()) { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:19:15: Error: Can only use type variables in instance methods.
//   static void foo12(void Function(U) b) { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Can only use type variables in instance methods.
//   static void foo13(void Function(U b)) { return null; }
//               ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22: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:7: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:5: Error: Type variables can't be used in static members.
//     U foo4;
//     ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:10:17: Error: Can only use type variables in instance methods.
//     void foo5(U y) => print(y);
//                 ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:11:11: Error: Can only use type variables in instance methods.
//     U foo6() => null;
//           ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:20: Error: Type variables can't be used in static members.
//     void Function (U y) foo7 = (U y) => y;
//                    ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:35: Error: Can only use type variables in instance methods.
//     void Function (U y) foo7 = (U y) => y;
//                                   ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:19: Error: Type variables can't be used in static members.
//     void Function (U y) foo7 = (U y) => y;
//                   ^
//
// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:31: 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:19: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:19:34: 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:21:34: Error: Type variables can't be used in static members.
//   static void foo13(void Function(U b)) { return 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 = null;
  synthetic constructor •() → self::Foo<self::Foo::U*>*
    : super core::Object::•()
    ;
  static method foo1() → dynamic {
    return null;
  }
  static method foo2(generic-covariant-impl dynamic x) → void {
    return null;
  }
  static method foo3() → void {
    invalid-type foo4;
    function foo5(dynamic y) → void
      return core::print(y);
    function foo6() → dynamic
      return null;
    (dynamic) →* dynamic foo7 = (dynamic y) → dynamic => y;
  }
  static method foo8() → () →* dynamic {
    return null;
  }
  static method foo9() → (dynamic) →* void {
    return null;
  }
  static method foo10(generic-covariant-impl () →* dynamic Function) → void {
    return null;
  }
  static method foo11((dynamic) →* void Function) → void {
    return null;
  }
  static method foo12((dynamic) →* void b) → void {
    return null;
  }
  static method foo13((dynamic) →* void Function) → void {
    return null;
  }
}
static method main() → dynamic {}
