typedef A<T> = Class<T>;
typedef B<T extends num> = Class<T>;
class Class<T> {
  const Class();
  @T()
  static T? method0<S extends T>(T arg) {}
  @Class<T>()
  static Class<T>? method1<S extends Class<T>>(Class<T> arg) {}
  @Class<Class<T>>()
  static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {}
  @A<T>()
  static A<T>? method3<S extends A<T>>(A<T> arg) {}
  @A<A<T>>()
  static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {}
  @B<T>()
  static B<T>? method5<S extends B<T>>(B<T> arg) {}
  @A<B<T>>()
  static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {}
  @Class<void Function<S extends T>()>()
  static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {}
  @T()
  static T field0;
  @Class<T>()
  static Class<T>? field1;
  @Class<Class<T>>()
  static Type field2 = T;
  @A<T>()
  static Type field3 = Class<T>;
  @B<T>()
  static var field4 = (T t) => T;
  @T()
  final T? instanceField;
  @T()
  T instanceMethod<S extends T>(T t) {}
}
extension Extension<T> on T {
  Extension(T t);
  factory Extension.fact(T t) => null;
  @T()
  static T field0;
  @T()
  T field1;
  @T()
  static T? staticMethod<S extends T>(T arg) {}
  @T()
  T instanceMethod<S extends T>(T t) {}
}
mixin Mixin<T> {
  Mixin(T t);
  factory Mixin.fact(T t) => null;
  @T()
  static T field0;
  @T()
  static T? staticMethod<S extends T>(T arg) {}
  @T()
  T? instanceField;
  @T()
  T instanceMethod<S extends T>(T t) {}
}
main() {}
