library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
//   static int staticMethod() => 2;
//              ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
//   static int staticMethod() => 1;
//              ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
//   static int get staticGetter => 2;
//                  ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
//   static int get staticGetter => 1;
//                  ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
//   static void set staticSetter(value) {
//                   ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
//   static void set staticSetter(value) {
//                   ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
//   static int staticField = 2;
//              ^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
//   static int staticField = 1;
//              ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
//   static final int staticDuplicateFieldAndSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
//   static void set staticFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndDuplicateSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static final int staticDuplicateFieldAndDuplicateSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter1'.
//   static void set staticFieldAndSetter1(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
//   static int staticFieldAndSetter1 = 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter2'.
//   static void set staticFieldAndSetter2(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
//   static int staticFieldAndSetter2 = 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:37:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter1'.
//   static void set staticLateFinalFieldAndSetter1(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:36:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter1'.
//   static late final int staticLateFinalFieldAndSetter1;
//                         ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:41:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter2'.
//   static void set staticLateFinalFieldAndSetter2(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:45:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter2'.
//   static late final int staticLateFinalFieldAndSetter2;
//                         ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
//   static void set staticMethodAndSetter1(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
//   static int staticMethodAndSetter1() => 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
//   static void set staticMethodAndSetter2(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
//   static int staticMethodAndSetter2() => 1;
//              ^
//
import self as self;
import "dart:core" as core;

extension Extension on core::int {
  static method staticMethod = self::Extension|staticMethod;
  static get staticGetter = get self::Extension|staticGetter;
  static field staticField = self::Extension|staticField;
  static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
  static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
  static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
  static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
  static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
  static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
  static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
  static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
  static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
  static set staticSetter = set self::Extension|staticSetter;
  static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
  static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
  static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
  static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
  static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
}
static field dynamic result;
static field core::int Extension|staticField;
static field core::int Extension|staticFieldAndSetter1;
static field core::int Extension|staticFieldAndSetter2;
late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
static final field core::int Extension|staticDuplicateFieldAndSetter;
static final field core::int Extension|staticFieldAndDuplicateSetter;
static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
static method Extension|staticMethod() → core::int
  ;
static get Extension|staticGetter() → core::int
  ;
static set Extension|staticSetter(dynamic value) → void
  ;
static set Extension|staticDuplicateFieldAndSetter(core::int value) → void
  ;
static set Extension|staticFieldAndDuplicateSetter(core::int value) → void
  ;
static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void
  ;
static method Extension|staticMethodAndSetter1() → core::int
  ;
static set Extension|staticMethodAndSetter1(core::int value) → void
  ;
static set Extension|staticMethodAndSetter2(core::int value) → void
  ;
static method Extension|staticMethodAndSetter2() → core::int
  ;
static method test() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f) → dynamic
  ;
