library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
//   int instanceMethod() => 2;
//       ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:8:7: Context: Previous declaration of 'instanceMethod'.
//   int instanceMethod() => 1;
//       ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
//   int get instanceGetter => 2;
//           ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:11:11: Context: Previous declaration of 'instanceGetter'.
//   int get instanceGetter => 1;
//           ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
//   void set instanceSetter(value) {
//            ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:14:12: Context: Previous declaration of 'instanceSetter'.
//   void set instanceSetter(value) {
//            ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   int instanceField = 1;
//       ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   int instanceField = 2;
//       ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: 'instanceField' is already declared in this scope.
//   int instanceField = 2;
//       ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Context: Previous declaration of 'instanceField'.
//   int instanceField = 1;
//       ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   int instanceFieldAndSetter1 = 1;
//       ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   int instanceFieldAndSetter2 = 1;
//       ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:35:18: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   late final int instanceLateFinalFieldAndSetter1;
//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:43:18: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   late final int instanceLateFinalFieldAndSetter2;
//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   final int instanceDuplicateFieldAndSetter = 1;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   final int instanceDuplicateFieldAndSetter = 2;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
//   final int instanceDuplicateFieldAndSetter = 2;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
//   final int instanceDuplicateFieldAndSetter = 1;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:51:13: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   final int instanceFieldAndDuplicateSetter = 1;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:56:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
//   void set instanceFieldAndDuplicateSetter(int value) {
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:52:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
//   void set instanceFieldAndDuplicateSetter(int value) {
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   final int instanceDuplicateFieldAndDuplicateSetter = 1;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: Extensions can't declare instance fields
// Try removing the field declaration or making it a static field
//   final int instanceDuplicateFieldAndDuplicateSetter = 2;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   final int instanceDuplicateFieldAndDuplicateSetter = 2;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
//   final int instanceDuplicateFieldAndDuplicateSetter = 1;
//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:66:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:62:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:26:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter1'.
//   void set instanceFieldAndSetter1(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
//   int instanceFieldAndSetter1 = 1;
//       ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:30:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter2'.
//   void set instanceFieldAndSetter2(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
//   int instanceFieldAndSetter2 = 1;
//       ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:36:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter1'.
//   void set instanceLateFinalFieldAndSetter1(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:35:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter1'.
//   late final int instanceLateFinalFieldAndSetter1;
//                  ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:40:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter2'.
//   void set instanceLateFinalFieldAndSetter2(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:43:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter2'.
//   late final int instanceLateFinalFieldAndSetter2;
//                  ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:71:12: Error: Conflicts with member 'instanceMethodAndSetter1'.
//   void set instanceMethodAndSetter1(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:70:7: Error: Conflicts with setter 'instanceMethodAndSetter1'.
//   int instanceMethodAndSetter1() => 1;
//       ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:75:12: Error: Conflicts with member 'instanceMethodAndSetter2'.
//   void set instanceMethodAndSetter2(int value) {
//            ^
//
// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:78:7: Error: Conflicts with setter 'instanceMethodAndSetter2'.
//   int instanceMethodAndSetter2() => 1;
//       ^
//
import self as self;
import "dart:core" as core;

extension Extension on core::int {
  method instanceMethod = self::Extension|instanceMethod;
  tearoff instanceMethod = self::Extension|get#instanceMethod;
  get instanceGetter = self::Extension|get#instanceGetter;
  field instanceField = self::Extension|instanceField;
  field instanceFieldAndSetter1 = self::Extension|instanceFieldAndSetter1;
  field instanceFieldAndSetter2 = self::Extension|instanceFieldAndSetter2;
  field instanceLateFinalFieldAndSetter1 = self::Extension|instanceLateFinalFieldAndSetter1;
  field instanceLateFinalFieldAndSetter2 = self::Extension|instanceLateFinalFieldAndSetter2;
  field instanceDuplicateFieldAndSetter = self::Extension|instanceDuplicateFieldAndSetter;
  field instanceFieldAndDuplicateSetter = self::Extension|instanceFieldAndDuplicateSetter;
  field instanceDuplicateFieldAndDuplicateSetter = self::Extension|instanceDuplicateFieldAndDuplicateSetter;
  method instanceMethodAndSetter1 = self::Extension|instanceMethodAndSetter1;
  tearoff instanceMethodAndSetter1 = self::Extension|get#instanceMethodAndSetter1;
  method instanceMethodAndSetter2 = self::Extension|instanceMethodAndSetter2;
  tearoff instanceMethodAndSetter2 = self::Extension|get#instanceMethodAndSetter2;
  set instanceSetter = self::Extension|set#instanceSetter;
  set instanceDuplicateFieldAndSetter = self::Extension|set#instanceDuplicateFieldAndSetter;
  set instanceFieldAndDuplicateSetter = self::Extension|set#instanceFieldAndDuplicateSetter;
  set instanceDuplicateFieldAndDuplicateSetter = self::Extension|set#instanceDuplicateFieldAndDuplicateSetter;
  set instanceMethodAndSetter1 = self::Extension|set#instanceMethodAndSetter1;
  set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2;
}
static field dynamic result;
static field core::int Extension|instanceField;
static field core::int Extension|instanceFieldAndSetter1;
static field core::int Extension|instanceFieldAndSetter2;
late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1;
late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2;
static final field core::int Extension|instanceDuplicateFieldAndSetter;
static final field core::int Extension|instanceFieldAndDuplicateSetter;
static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter;
static method Extension|instanceMethod(lowered final core::int #this) → core::int
  ;
static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int
  return () → core::int => self::Extension|instanceMethod(#this);
static method Extension|get#instanceGetter(lowered final core::int #this) → core::int
  ;
static method Extension|set#instanceSetter(lowered final core::int #this, dynamic value) → void
  ;
static method Extension|set#instanceDuplicateFieldAndSetter(lowered final core::int #this, core::int value) → void
  ;
static method Extension|set#instanceFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void
  ;
static method Extension|set#instanceDuplicateFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void
  ;
static method Extension|instanceMethodAndSetter1(lowered final core::int #this) → core::int
  ;
static method Extension|get#instanceMethodAndSetter1(lowered final core::int #this) → () → core::int
  return () → core::int => self::Extension|instanceMethodAndSetter1(#this);
static method Extension|set#instanceMethodAndSetter1(lowered final core::int #this, core::int value) → void
  ;
static method Extension|set#instanceMethodAndSetter2(lowered final core::int #this, core::int value) → void
  ;
static method Extension|instanceMethodAndSetter2(lowered final core::int #this) → core::int
  ;
static method Extension|get#instanceMethodAndSetter2(lowered final core::int #this) → () → core::int
  return () → core::int => self::Extension|instanceMethodAndSetter2(#this);
static method test() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f) → dynamic
  ;
