library;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:7:14: Error: 'staticMethod' is already declared in this scope.
//   static int staticMethod() => 2;
//              ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:6:14: Context: Previous declaration of 'staticMethod'.
//   static int staticMethod() => 1;
//              ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:10:18: Error: 'staticGetter' is already declared in this scope.
//   static int get staticGetter => 2;
//                  ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:18: Context: Previous declaration of 'staticGetter'.
//   static int get staticGetter => 1;
//                  ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Error: 'staticSetter' is already declared in this scope.
//   static void set staticSetter(value) {}
//                   ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:19: Context: Previous declaration of 'staticSetter'.
//   static void set staticSetter(value) {}
//                   ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:17:14: Error: 'staticField' is already declared in this scope.
//   static int staticField = 2;
//              ^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:16:14: Context: Previous declaration of 'staticField'.
//   static int staticField = 1;
//              ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:20: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:19:14: Context: Field 'staticFieldAndSetter1' with the implicit setter.
//   static int staticFieldAndSetter1 = 1;
//              ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:24:14: Error: The declaration conflicts with setter 'staticFieldAndSetter2'.
//   static int staticFieldAndSetter2 = 1;
//              ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:19: Context: Conflicting setter 'staticFieldAndSetter2'.
//   static void set staticFieldAndSetter2(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:27: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:26:25: Context: Field 'staticLateFinalFieldAndSetter1' with the implicit setter.
//   static late final int staticLateFinalFieldAndSetter1;
//                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:31:25: Error: The declaration conflicts with setter 'staticLateFinalFieldAndSetter2'.
//   static late final int staticLateFinalFieldAndSetter2;
//                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:29:19: Context: Conflicting setter 'staticLateFinalFieldAndSetter2'.
//   static void set staticLateFinalFieldAndSetter2(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:33:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
//   static final int staticDuplicateFieldAndSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:40:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticFieldAndDuplicateSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:38:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
//   static void set staticFieldAndDuplicateSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:43:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndDuplicateSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:42:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static final int staticDuplicateFieldAndDuplicateSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:46:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:44:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:49:19: Error: The setter conflicts with declaration 'staticMethodAndSetter1'.
//   static void set staticMethodAndSetter1(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:14: Context: Conflicting declaration 'staticMethodAndSetter1'.
//   static int staticMethodAndSetter1() => 1;
//              ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:53:14: Error: The declaration conflicts with setter 'staticMethodAndSetter2'.
//   static int staticMethodAndSetter2() => 1;
//              ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:51:19: Context: Conflicting setter 'staticMethodAndSetter2'.
//   static void set staticMethodAndSetter2(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^
//
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 set staticSetter = set self::Extension|staticSetter;
  static field staticField = self::Extension|staticField;
  static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
  static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
  static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
  static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
  static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
  static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
  static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
  static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
  static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
  static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
  static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
  static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
}
static field core::int Extension|staticField;
static field core::int Extension|staticFieldAndSetter1;
late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
static final field core::int Extension|staticDuplicateFieldAndSetter;
static final field core::int Extension|staticFieldAndDuplicateSetter;
static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
static extension-member method Extension|staticMethod() → core::int
  ;
static extension-member get Extension|staticGetter() → core::int
  ;
static extension-member set Extension|staticSetter(dynamic value) → void
  ;
static extension-member set Extension|staticFieldAndSetter2(core::int value) → void
  ;
static extension-member set Extension|staticLateFinalFieldAndSetter2(core::int value) → void
  ;
static extension-member set Extension|staticDuplicateFieldAndSetter(core::int value) → void
  ;
static extension-member set Extension|staticFieldAndDuplicateSetter(core::int value) → void
  ;
static extension-member set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void
  ;
static extension-member method Extension|staticMethodAndSetter1() → core::int
  ;
static extension-member set Extension|staticMethodAndSetter2(core::int value) → void
  ;
static method test() → dynamic
  ;
