class Foo {}

int topLevelField;

class A {
  static int staticFieldOfA;
  int fieldOfA;
  A.foo();
  A.bar(this.fieldOfA);
}

class B<X extends Object?, Y extends Object> {
  X fieldOfB;
  Y fieldOfB2;
  B.foo();
  B.bar(this.fieldOfB, this.fieldOfB2);
}

mixin M {
  static int staticFieldOfM;
  int fieldOfM;
}
mixin N<X extends Object?, Y extends Object> {
  X fieldOfN;
  Y fieldOfN2;
}

extension P on Foo {
  static int staticFieldOfE;
}

int? nullableTopLevelField;
late int lateTopLevelField;
int topLevelFieldWithInitializer = 42;

class C<X extends Object?, Y extends Object> {
  static int? staticFieldOfX;
  static int staticFieldOfXInitialized = 42;
  X? fieldOfX;
  int? fieldOfX2;
  dynamic fieldOfX3;
  Null fieldOfX4;
  int Function()? fieldOfX5;
  Y? fieldOfX6;
  static late int lateStaticFieldOfC;
  late int fieldOfC7;
  late X fieldOfC8;
  late Y fieldOfC9;
  int fieldOfC10;
  C.foo(this.fieldOfC10);
  C.bar(this.fieldOfC10);
}

mixin L<X extends Object?, Y extends Object> {
  static int? staticFieldOfL;
  static int staticFieldOfLInitialized = 42;
  X? fieldOfL;
  int? fieldOfL2;
  dynamic fieldOfL3;
  Null fieldOfL4;
  int Function()? fieldOfL5;
  Y? fieldOfL6;
  static late int lateStaticFieldOfM;
  late int fieldOfM7;
  late X fieldOfM8;
  late Y fieldOfM9;
}

extension Q on Foo {
  static int? staticFieldOfQ;
  static late int lateStaticFieldOfQ;
  static int staticFieldOfQInitialized = 42;
}

main() {}
