library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
// int topLevelField; // Error.
//     ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Error: Field 'staticFieldOfA' should be initialized because its type 'int' doesn't allow null.
//   static int staticFieldOfA; // Error.
//              ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Error: Field 'staticFieldOfM' should be initialized because its type 'int' doesn't allow null.
//   static int staticFieldOfM; // Error.
//              ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
//   static int staticFieldOfE; // Error.
//              ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
//   A.foo();
//   ^
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Context: 'fieldOfA' is defined here.
//   int fieldOfA; // Error.
//       ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:19:3: Error: This constructor should initialize field 'fieldOfB' because its type 'X' doesn't allow null.
//   B.foo();
//   ^
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Context: 'fieldOfB' is defined here.
//   X fieldOfB; // Error.
//     ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:19:3: Error: This constructor should initialize field 'fieldOfB2' because its type 'Y' doesn't allow null.
//   B.foo();
//   ^
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Context: 'fieldOfB2' is defined here.
//   Y fieldOfB2; // Error.
//     ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Error: Field 'fieldOfM' should be initialized because its type 'int' doesn't allow null.
//   int fieldOfM; // Error.
//       ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Error: Field 'fieldOfN' should be initialized because its type 'X' doesn't allow null.
//   X fieldOfN; // Error.
//     ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Error: Field 'fieldOfN2' should be initialized because its type 'Y' doesn't allow null.
//   Y fieldOfN2; // Error.
//     ^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Foo extends core::Object {
  synthetic constructor •() → self::Foo
    : super core::Object::•()
    ;
}
class A extends core::Object {
  static field core::int staticFieldOfA = null;
  field core::int fieldOfA;
  constructor foo() → self::A
    : self::A::fieldOfA = null, super core::Object::•()
    ;
  constructor bar(core::int fieldOfA) → self::A
    : self::A::fieldOfA = fieldOfA, super core::Object::•()
    ;
}
class B<X extends core::Object? = core::Object?, Y extends core::Object = core::Object> extends core::Object {
  generic-covariant-impl field self::B::X% fieldOfB;
  generic-covariant-impl field self::B::Y fieldOfB2;
  constructor foo() → self::B<self::B::X%, self::B::Y>
    : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
    ;
  constructor bar(self::B::X% fieldOfB, self::B::Y fieldOfB2) → self::B<self::B::X%, self::B::Y>
    : self::B::fieldOfB = fieldOfB, self::B::fieldOfB2 = fieldOfB2, super core::Object::•()
    ;
}
abstract class M extends core::Object /*isMixinDeclaration*/  {
  static field core::int staticFieldOfM = null;
  field core::int fieldOfM = null;
}
abstract class N<X extends core::Object? = core::Object?, Y extends core::Object = core::Object> extends core::Object /*isMixinDeclaration*/  {
  generic-covariant-impl field self::N::X% fieldOfN = null;
  generic-covariant-impl field self::N::Y fieldOfN2 = null;
}
class C<X extends core::Object? = core::Object?, Y extends core::Object = core::Object> extends core::Object {
  static field core::int? staticFieldOfX = null;
  static field core::int staticFieldOfXInitialized = 42;
  generic-covariant-impl field self::C::X? fieldOfX = null;
  field core::int? fieldOfX2 = null;
  field dynamic fieldOfX3 = null;
  field Null fieldOfX4 = null;
  field () →? core::int fieldOfX5 = null;
  generic-covariant-impl field self::C::Y? fieldOfX6 = null;
  late static field core::int lateStaticFieldOfC;
  late field core::int fieldOfC7;
  late generic-covariant-impl field self::C::X% fieldOfC8;
  late generic-covariant-impl field self::C::Y fieldOfC9;
  field core::int fieldOfC10;
  constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
    : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
    ;
  constructor bar(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
    : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
    ;
}
abstract class L<X extends core::Object? = core::Object?, Y extends core::Object = core::Object> extends core::Object /*isMixinDeclaration*/  {
  static field core::int? staticFieldOfL = null;
  static field core::int staticFieldOfLInitialized = 42;
  generic-covariant-impl field self::L::X? fieldOfL = null;
  field core::int? fieldOfL2 = null;
  field dynamic fieldOfL3 = null;
  field Null fieldOfL4 = null;
  field () →? core::int fieldOfL5 = null;
  generic-covariant-impl field self::L::Y? fieldOfL6 = null;
  late static field core::int lateStaticFieldOfM;
  late field core::int fieldOfM7;
  late generic-covariant-impl field self::L::X% fieldOfM8;
  late generic-covariant-impl field self::L::Y fieldOfM9;
}
extension P on self::Foo {
  static field staticFieldOfE = self::P|staticFieldOfE;
}
extension Q on self::Foo {
  static field staticFieldOfQ = self::Q|staticFieldOfQ;
  static field lateStaticFieldOfQ = self::Q|lateStaticFieldOfQ;
  static field staticFieldOfQInitialized = self::Q|staticFieldOfQInitialized;
}
static field core::int topLevelField;
static field core::int P|staticFieldOfE;
static field core::int? nullableTopLevelField;
late static field core::int lateTopLevelField;
static field core::int topLevelFieldWithInitializer = 42;
static field core::int? Q|staticFieldOfQ;
late static field core::int Q|lateStaticFieldOfQ;
static field core::int Q|staticFieldOfQInitialized = 42;
static method main() → dynamic {}
