library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
// Try moving the import directives before the part directives.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:11:1: Error: Import directives must precede part directives.
// Try moving the import directives before the part directives.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:15:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = Object Function();
//         ^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = void Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:17:1: Error: Directives must appear before any declarations.
// Try moving the directive before any declarations.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:19:14: Context: Previous declaration of 'OldTypedef'.
// typedef void OldTypedef();
//              ^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:25:5: Error: 'field' is already declared in this scope.
// var field = "2nd";
//     ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
// var field = "1st";
//     ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:31:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:27:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
//   C(a, b);
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
//   C(a);
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
//   var field = "2nd";
//       ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
//   var field = "1st";
//       ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
//   m() {
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
//   m() {
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
//   static s() {
//          ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
//   static s() {
//          ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
//   Enum,
//   ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
//   a,
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
//   a,
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
//   _name,
//   ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
//   index,
//   ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
//   toString,
//   ^^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
//   values,
//   ^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
// enum AnotherEnum {
//      ^^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = void Function();
//         ^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:15:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = Object Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:19:14: Error: 'OldTypedef' is already declared in this scope.
// typedef void OldTypedef();
//              ^^^^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:21:16: Context: Previous declaration of 'OldTypedef'.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
// var field = "3rd";
//     ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:25:5: Context: Previous declaration of 'field'.
// var field = "2nd";
//     ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:29:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:31:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:41:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:75:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:11:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:15:9: Error: 'Typedef' is already declared in this scope.
// typedef Typedef = Object Function();
//         ^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = void Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:17:1: Error: The part-of directive must be the only directive in a part.
// Try removing the other directives, or moving them to the library for which this is a part.
// import 'duplicated_declarations_lib.dart' as Typedef;
// ^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
// typedef Object OldTypedef();
//                ^^^^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:19:14: Context: Previous declaration of 'OldTypedef'.
// typedef void OldTypedef();
//              ^^^^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
// var field = 4;
//     ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
// var field = "3rd";
//     ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:27:5: Error: 'field' is already declared in this scope.
// var field = 5.0;
//     ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:25:5: Context: Previous declaration of 'field'.
// var field = 4;
//     ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:33:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:29:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:37:1: Error: 'main' is already declared in this scope.
// main() {
// ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:33:1: Context: Previous declaration of 'main'.
// main() {
// ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:43:3: Error: 'C' is already declared in this scope.
//   C(a, b);
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:42:3: Context: Previous declaration of 'C'.
//   C(a);
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:46:7: Error: 'field' is already declared in this scope.
//   var field = "2nd";
//       ^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:44:7: Context: Previous declaration of 'field'.
//   var field = "1st";
//       ^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:52:3: Error: 'm' is already declared in this scope.
//   m() {
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:48:3: Context: Previous declaration of 'm'.
//   m() {
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:60:10: Error: 's' is already declared in this scope.
//   static s() {
//          ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:56:10: Context: Previous declaration of 's'.
//   static s() {
//          ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:67:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:41:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:71:7: Error: 'C' is already declared in this scope.
// class C {
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:67:7: Context: Previous declaration of 'C'.
// class C {
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:76:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
//   Enum,
//   ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:78:3: Error: 'a' is already declared in this scope.
//   a,
//   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:77:3: Context: Previous declaration of 'a'.
//   a,
//   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:82:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:75:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:88:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
//      ^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:82:6: Context: Previous declaration of 'Enum'.
// enum Enum {
//      ^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:9:46: Error: 'Typedef' is already declared in this scope.
// import 'duplicated_declarations_lib.dart' as Typedef;
//                                              ^^^^^^^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations_part.dart:15:9: Context: Previous declaration of 'Typedef'.
// typedef Typedef = Object Function();
//         ^^^^^^^
//
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
// class Sub extends C {
//                   ^
// pkg/front_end/testcases/general_nnbd_opt_out/duplicated_declarations.dart:67:19: Context: This isn't a type.
// class Sub extends C {
//                   ^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;

part duplicated_declarations_part.dart;
typedef Typedef = () →* void;
typedef OldTypedef = () →* void;
class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  constructor _() → self::C#4*
    ;
}
class C#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  constructor _() → self::C#3*
    ;
}
class C#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  field core::String* field;
  constructor •(dynamic a) → self::C#2*
    ;
  method m() → dynamic
    ;
  static method s() → dynamic
    ;
  static method f() → dynamic
    ;
}
class C#1 extends core::Object {
  constructor _() → self::C#1*
    ;
}
class C extends core::Object {
  field core::String* field;
  constructor •(dynamic a) → self::C*
    ;
  method m() → dynamic
    ;
  static method s() → dynamic
    ;
  static method f() → dynamic
    ;
}
class Sub extends core::Object {
  constructor •() → self::Sub*
    ;
  method m() → dynamic
    ;
}
class Enum#4 extends core::Object /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Enum#4*>* values = const <self::Enum#4*>[self::Enum#4::a];
  static const field self::Enum#4* a = const self::Enum#4::•(0, "Enum.a");
  const constructor •(core::int* index, core::String* _name) → self::Enum#4*
    : self::Enum#4::index = index, self::Enum#4::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Enum#4::_name};
}
class Enum#3 extends core::Object /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Enum#3*>* values = const <self::Enum#3*>[self::Enum#3::a, self::Enum#3::b, self::Enum#3::c];
  static const field self::Enum#3* a = const self::Enum#3::•(0, "Enum.a");
  static const field self::Enum#3* b = const self::Enum#3::•(1, "Enum.b");
  static const field self::Enum#3* c = const self::Enum#3::•(2, "Enum.c");
  const constructor •(core::int* index, core::String* _name) → self::Enum#3*
    : self::Enum#3::index = index, self::Enum#3::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Enum#3::_name};
}
class Enum#2 extends core::Object /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Enum#2*>* values = const <self::Enum#2*>[self::Enum#2::Enum, self::Enum#2::a, self::Enum#2::b];
  static const field self::Enum#2* Enum = const self::Enum#2::•(0, "Enum.Enum");
  static const field self::Enum#2* a = const self::Enum#2::•(1, "Enum.a");
  static const field self::Enum#2* b = const self::Enum#2::•(2, "Enum.b");
  const constructor •(core::int* index, core::String* _name) → self::Enum#2*
    : self::Enum#2::index = index, self::Enum#2::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Enum#2::_name};
}
class Enum#1 extends core::Object /*isEnum*/  {
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Enum#1*>* values = const <self::Enum#1*>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
  static const field self::Enum#1* a = const self::Enum#1::•(0, "Enum.a");
  static const field self::Enum#1* b = const self::Enum#1::•(1, "Enum.b");
  static const field self::Enum#1* c = const self::Enum#1::•(2, "Enum.c");
  const constructor •(core::int* index, core::String* _name) → self::Enum#1*
    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Enum#1::_name};
}
class Enum extends core::Object /*isEnum*/  {
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Enum*>* values = const <self::Enum*>[self::Enum::Enum, self::Enum::a, self::Enum::b];
  static const field self::Enum* Enum = const self::Enum::•(0, "Enum.Enum");
  static const field self::Enum* a = const self::Enum::•(1, "Enum.a");
  static const field self::Enum* b = const self::Enum::•(2, "Enum.b");
  const constructor •(core::int* index, core::String* _name) → self::Enum*
    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Enum::_name};
}
class AnotherEnum extends core::Object /*isEnum*/  {
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::AnotherEnum*>* values = const <self::AnotherEnum*>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
  static const field self::AnotherEnum* a = const self::AnotherEnum::•(0, "AnotherEnum.a");
  static const field self::AnotherEnum* b = const self::AnotherEnum::•(1, "AnotherEnum.b");
  static const field self::AnotherEnum* c = const self::AnotherEnum::•(2, "AnotherEnum.c");
  const constructor •(core::int* index, core::String* _name) → self::AnotherEnum*
    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::AnotherEnum::_name};
}
static field core::String* field;
static method main() → dynamic
  ;
static method foo() → dynamic
  ;
static method useAnotherEnum() → dynamic
  ;

library /*isNonNullableByDefault*/;
import self as self2;
