library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:1: Error: Can't have modifier 'abstract' here.
// Try removing 'abstract'.
// abstract int topLevelField;
// ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:7:1: Error: Can't have modifier 'abstract' here.
// Try removing 'abstract'.
// abstract final int finalTopLevelField = 0;
// ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:9:1: Error: Can't have modifier 'abstract' here.
// Try removing 'abstract'.
// abstract const int constField = 0;
// ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:20:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static int staticField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static final int finalStaticField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:24:3: Error: Abstract fields cannot be late.
// Try removing the 'abstract' or 'late' keyword.
//   abstract late int lateInstanceField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract int externalInstanceField1;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract final int externalFinalInstanceField1;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract covariant num externalCovariantInstanceField1;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   abstract external int externalInstanceField2;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   abstract external final int externalFinalInstanceField2;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   abstract external covariant num externalCovariantInstanceField2;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract late int externalLateInstanceField;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Abstract fields cannot be late.
// Try removing the 'abstract' or 'late' keyword.
//   external abstract late int externalLateInstanceField;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:42:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static int staticField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static final int finalStaticField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:46:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract int externalInstanceField;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:48:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract final int externalFinalInstanceField;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:50:12: Error: Fields can't be declared both 'abstract' and 'external'.
// Try removing the 'abstract' or 'external' keyword.
//   external abstract covariant num externalCovariantInstanceField;
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:55:16: Error: Extension fields can't be declared 'abstract'.
// Try removing the 'abstract' keyword.
//   abstract int extensionInstanceField;
//                ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:55:16: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   abstract int extensionInstanceField;
//                ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:56:22: Error: Extension fields can't be declared 'abstract'.
// Try removing the 'abstract' keyword.
//   abstract final int finalExtensionInstanceField;
//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:56:22: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   abstract final int finalExtensionInstanceField;
//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
// Try removing the 'abstract' keyword.
//   abstract static int extensionStaticField = 0;
//                       ^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static int extensionStaticField = 0;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
// Try removing the 'abstract' keyword.
//   abstract static final int finalExtensionStaticField = 0;
//                             ^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
// Try removing the 'abstract' or 'static' keyword.
//   abstract static final int finalExtensionStaticField = 0;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
// abstract int topLevelField;
//              ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:20:23: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
//   abstract static int staticField;
//                       ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:29: Error: Field 'finalStaticField' should be initialized because its type 'int' doesn't allow null.
//   abstract static final int finalStaticField;
//                             ^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:42:23: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
//   abstract static int staticField;
//                       ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:29: Error: Field 'finalStaticField' should be initialized because its type 'int' doesn't allow null.
//   abstract static final int finalStaticField;
//                             ^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  static field core::int staticField;
  static final field core::int finalStaticField;
  late field core::int lateInstanceField;
  constructor •(core::int initializedField1) → self::A
    ;
  abstract get fieldWithInitializer() → core::int;
  abstract set fieldWithInitializer(core::int #externalFieldValue) → void;
  abstract get initializedField1() → core::int;
  abstract set initializedField1(core::int #externalFieldValue) → void;
  abstract get initializedField2() → core::int;
  abstract set initializedField2(core::int #externalFieldValue) → void;
  external get externalInstanceField1() → core::int;
  external set externalInstanceField1(core::int #externalFieldValue) → void;
  external get externalFinalInstanceField1() → core::int;
  external get externalCovariantInstanceField1() → core::num;
  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
  external get externalInstanceField2() → core::int;
  external set externalInstanceField2(core::int #externalFieldValue) → void;
  external get externalFinalInstanceField2() → core::int;
  external get externalCovariantInstanceField2() → core::num;
  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
  external get externalLateInstanceField() → core::int;
  external set externalLateInstanceField(core::int #externalFieldValue) → void;
}
abstract class B extends core::Object /*isMixinDeclaration*/  {
  static field core::int staticField;
  static final field core::int finalStaticField;
  external get externalInstanceField() → core::int;
  external set externalInstanceField(core::int #externalFieldValue) → void;
  external get externalFinalInstanceField() → core::int;
  external get externalCovariantInstanceField() → core::num;
  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
}
extension Extension on self::A {
  get extensionInstanceField = get self::Extension|extensionInstanceField;
  set extensionInstanceField = set self::Extension|extensionInstanceField;
  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
  static field extensionStaticField = self::Extension|extensionStaticField;
  static field finalExtensionStaticField = self::Extension|finalExtensionStaticField;
}
static field core::int topLevelField;
static final field core::int finalTopLevelField;
static const field core::int constField = 0;
static field core::int Extension|extensionStaticField;
static final field core::int Extension|finalExtensionStaticField;
static abstract get Extension|extensionInstanceField() → core::int;
static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
static abstract get Extension|finalExtensionInstanceField() → core::int;
static method main() → dynamic
  ;
