library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
// int topLevelMethod() => 2;
//     ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
// int topLevelMethod() => 1;
//     ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
// int get topLevelGetter => 2;
//         ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
// int get topLevelGetter => 1;
//         ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
// void set topLevelSetter(value) {
//          ^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
// void set topLevelSetter(value) {
//          ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
// int topLevelField = 2;
//     ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
// int topLevelField = 1;
//     ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
// final int topLevelDuplicateFieldAndSetter = 2;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
// final int topLevelDuplicateFieldAndSetter = 1;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
// void set topLevelFieldAndDuplicateSetter(int value) {
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
// void set topLevelFieldAndDuplicateSetter(int value) {
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
// void set topLevelFieldAndSetter1(int value) {
//          ^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
// int topLevelFieldAndSetter1 = 1;
//     ^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
// void set topLevelFieldAndSetter2(int value) {
//          ^
//
// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
// int topLevelFieldAndSetter2 = 1;
//     ^
//
import self as self;
import "dart:core" as core;

static field dynamic result;
static field core::int topLevelField;
static field core::int topLevelFieldAndSetter1;
static field core::int topLevelFieldAndSetter2;
late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
static final field core::int topLevelDuplicateFieldAndSetter;
static final field core::int topLevelFieldAndDuplicateSetter;
static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
static const field dynamic _exports# = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}" /*isLegacy, from null */;
static method topLevelMethod() → core::int
  ;
static get topLevelGetter() → core::int
  ;
static set topLevelSetter(dynamic value) → void
  ;
static set topLevelFieldAndSetter1(core::int value) → void
  ;
static set topLevelFieldAndSetter2(core::int value) → void
  ;
static set topLevelLateFinalFieldAndSetter1(core::int value) → void
  ;
static set topLevelLateFinalFieldAndSetter2(core::int value) → void
  ;
static set topLevelDuplicateFieldAndSetter(core::int value) → void
  ;
static set topLevelFieldAndDuplicateSetter(core::int value) → void
  ;
static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void
  ;
static method topLevelMethodAndSetter1() → core::int
  ;
static set topLevelMethodAndSetter1(core::int value) → void
  ;
static set topLevelMethodAndSetter2(core::int value) → void
  ;
static method topLevelMethodAndSetter2() → core::int
  ;
static method test() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f) → dynamic
  ;
