library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
//   static int staticMethod() => 2;
//              ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
//   static int staticMethod() => 1;
//              ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
//   static int get staticGetter => 2;
//                  ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
//   static int get staticGetter => 1;
//                  ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
//   static void set staticSetter(value) {
//                   ^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
//   static void set staticSetter(value) {
//                   ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
//   static int staticField = 2;
//              ^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
//   static int staticField = 1;
//              ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
//   static final int staticDuplicateFieldAndSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
//   static void set staticFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static final int staticDuplicateFieldAndDuplicateSetter = 2;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static final int staticDuplicateFieldAndDuplicateSetter = 1;
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
//   static void set staticFieldAndSetter1(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
//   static int staticFieldAndSetter1 = 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
//   static void set staticFieldAndSetter2(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
//   static int staticFieldAndSetter2 = 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
//   static void set staticMethodAndSetter1(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
//   static int staticMethodAndSetter1() => 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
//   static void set staticMethodAndSetter2(int value) {
//                   ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
//   static int staticMethodAndSetter2() => 1;
//              ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
//   static void set staticMethodAndSetter1(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
//   static int staticMethodAndSetter1() => 1;
//              ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
//   static int staticMethodAndSetter2() => 1;
//              ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
//   static void set staticMethodAndSetter2(int value) {
//                   ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
//   Class.staticMethod();
//         ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
//   (Class.staticMethod)();
//          ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
//   Class.staticGetter;
//         ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
//   Class.staticSetter = 0;
//         ^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
//   Class.staticSetter = 0;
//                      ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
//   Class.staticField;
//         ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
//   Class.staticField = 0;
//         ^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
//   Class.staticField = 0;
//                     ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
//   Class.staticDuplicateFieldAndSetter;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
//   Class.staticDuplicateFieldAndSetter = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
//   Class.staticDuplicateFieldAndSetter = 0;
//                                       ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
//   Class.staticFieldAndDuplicateSetter = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
//   Class.staticDuplicateFieldAndDuplicateSetter;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
//   Class.staticDuplicateFieldAndDuplicateSetter = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
//   Class.staticDuplicateFieldAndDuplicateSetter = 0;
//                                                ^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
//   Class.staticMethodAndSetter1 = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
//   Class.staticMethodAndSetter2 = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  static field core::int staticField = null;
  static field core::int staticFieldAndSetter1 = 1;
  static field core::int staticFieldAndSetter2 = 1;
  late static final [setter] field core::int staticLateFinalFieldAndSetter1;
  late static final [setter] field core::int staticLateFinalFieldAndSetter2;
  static final field core::int staticDuplicateFieldAndSetter = null;
  static final field core::int staticFieldAndDuplicateSetter = 1;
  static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  static method staticMethod() → core::int
    return 1;
  static get staticGetter() → core::int
    return 1;
  static set staticSetter(dynamic value) → void {
    self::result = 1;
  }
  static set staticFieldAndSetter1(core::int value) → void {
    self::result = 2;
  }
  static set staticFieldAndSetter2(core::int value) → void {
    self::result = 2;
  }
  static set staticLateFinalFieldAndSetter1(core::int value) → void {
    self::result = 2;
  }
  static set staticLateFinalFieldAndSetter2(core::int value) → void {
    self::result = 2;
  }
  static set staticDuplicateFieldAndSetter(core::int value) → void {
    self::result = 3;
  }
  static set staticFieldAndDuplicateSetter(core::int value) → void {
    self::result = 2;
  }
  static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
    self::result = 3;
  }
  static method staticMethodAndSetter1() → core::int
    return 1;
  static set staticMethodAndSetter1(core::int value) → void {
    self::result = 2;
  }
  static set staticMethodAndSetter2(core::int value) → void {
    self::result = 2;
  }
  static method staticMethodAndSetter2() → core::int
    return 1;
}
static field dynamic result;
static method test() → dynamic {
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
  Class.staticMethod();
        ^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
  (Class.staticMethod)();
         ^^^^^^^^^^^^".call();
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
  Class.staticGetter;
        ^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
  Class.staticSetter = 0;
                     ^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
  Class.staticField;
        ^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
  Class.staticField = 0;
                    ^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
  Class.staticDuplicateFieldAndSetter;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
  Class.staticDuplicateFieldAndSetter = 0;
                                      ^";
  self::Class::staticFieldAndDuplicateSetter;
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
  Class.staticFieldAndDuplicateSetter = 0;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
  Class.staticDuplicateFieldAndDuplicateSetter;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
  Class.staticDuplicateFieldAndDuplicateSetter = 0;
                                               ^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
  Class.staticMethodAndSetter1 = 0;
        ^^^^^^^^^^^^^^^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
  Class.staticMethodAndSetter2 = 0;
        ^^^^^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
  self::result = null;
  self::Class::staticFieldAndSetter1 = 0;
  self::expect(null, self::result);
  self::expect(0, self::Class::staticFieldAndSetter1);
  self::result = null;
  self::Class::staticFieldAndSetter2 = 0;
  self::expect(null, self::result);
  self::expect(0, self::Class::staticFieldAndSetter2);
  self::result = null;
  self::Class::staticLateFinalFieldAndSetter1 = 0;
  self::expect(null, self::result);
  self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
  self::result = null;
  self::Class::staticLateFinalFieldAndSetter2 = 0;
  self::expect(null, self::result);
  self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
  self::expect(1, self::Class::staticMethodAndSetter1());
  self::expect(1, self::Class::staticMethodAndSetter2());
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → dynamic f) → dynamic {
  try {
    f.call();
  }
  on core::Object catch(final core::Object e) {
    core::print(e);
    return;
  }
  throw "Expected exception.";
}
