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 externalInstanceField;
//            ^^^^^^^^
//
// 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 externalFinalInstanceField;
//            ^^^^^^^^
//
// 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 externalCovariantInstanceField;
//            ^^^^^^^^
//
// 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 externalInstanceField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:25: Error: 'externalInstanceField' is already declared in this scope.
//   abstract external int externalInstanceField;
//                         ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:25: Context: Previous declaration of 'externalInstanceField'.
//   external abstract int externalInstanceField;
//                         ^^^^^^^^^^^^^^^^^^^^^
//
// 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 externalFinalInstanceField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:31: Error: 'externalFinalInstanceField' is already declared in this scope.
//   abstract external final int externalFinalInstanceField;
//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:31: Context: Previous declaration of 'externalFinalInstanceField'.
//   external abstract final int externalFinalInstanceField;
//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// 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 externalCovariantInstanceField;
//   ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:35: Error: 'externalCovariantInstanceField' is already declared in this scope.
//   abstract external covariant num externalCovariantInstanceField;
//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:35: Context: Previous declaration of 'externalCovariantInstanceField'.
//   external abstract covariant num externalCovariantInstanceField;
//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// 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;
//                       ^^^^^^^^^^^^^^^^^^^^
//
// 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;
//   ^^^^^^^^
//
// 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;
//                             ^^^^^^^^^^^^^^^^^^^^^^^^^
//
// 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;
//   ^^^^^^^^
//
// 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;
//                             ^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:12:37: Error: Abstract fields cannot have initializers.
// Try removing the initializer or the 'abstract' keyword.
//   abstract int fieldWithInitializer = 0;
//                                     ^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
// Try removing the field initializer or the 'abstract' keyword from the field declaration.
//   A(this.initializedField1) : this.initializedField2 = 0;
//          ^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
// Try removing the field initializer or the 'abstract' keyword from the field declaration.
//   A(this.initializedField1) : this.initializedField2 = 0;
//                                    ^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:29: Error: Final field 'finalStaticField' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   abstract static final int finalStaticField;
//                             ^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:29: Error: Final field 'finalStaticField' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   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 = null;
  static final field core::int finalStaticField = null;
  late field core::int lateInstanceField;
  constructor •(core::int initializedField1) → self::A
    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
Try removing the field initializer or the 'abstract' keyword from the field declaration.
  A(this.initializedField1) : this.initializedField2 = 0;
         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
Try removing the field initializer or the 'abstract' keyword from the field declaration.
  A(this.initializedField1) : this.initializedField2 = 0;
                                   ^^^^^^^^^^^^^^^^^"
    ;
  abstract get fieldWithInitializer() → core::int;
  abstract set fieldWithInitializer(core::int #t3) → void;
  abstract get initializedField1() → core::int;
  abstract set initializedField1(core::int #t4) → void;
  abstract get initializedField2() → core::int;
  abstract set initializedField2(core::int #t5) → void;
  external get externalInstanceField() → core::int;
  external set externalInstanceField(core::int #t6) → void;
  external get externalFinalInstanceField() → core::int;
  external get externalCovariantInstanceField() → core::num;
  external set externalCovariantInstanceField(covariant core::num #t7) → void;
  external get externalLateInstanceField() → core::int;
  external set externalLateInstanceField(core::int #t8) → void;
}
abstract class B extends core::Object /*isMixinDeclaration*/  {
  static field core::int staticField = null;
  static final field core::int finalStaticField = null;
  external get externalInstanceField() → core::int;
  external set externalInstanceField(core::int #t9) → void;
  external get externalFinalInstanceField() → core::int;
  external get externalCovariantInstanceField() → core::num;
  external set externalCovariantInstanceField(covariant core::num #t10) → 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 = 0;
static const field core::int constField = #C1;
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 #t11) → void;
static abstract get Extension|finalExtensionInstanceField() → core::int;
static method main() → dynamic {}

constants  {
  #C1 = 0
}
