library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:6:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib1.dart';
// ^
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:10:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib2.dart' hide legacyMethod2;
// ^
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:13:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib3.dart' show LegacyClass2;
// ^
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:16:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib3.dart' show legacyMethod1;
// ^
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:19:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib3.dart' show LegacyExtension;
// ^
//
// pkg/front_end/testcases/nnbd/export_from_opt_out.dart:22:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
// export 'export_from_opt_out_lib3.dart' show LegacyTypedef;
// ^
//
import self as self;
import "export_from_opt_out_lib1.dart" as exp;
import "export_from_opt_out_lib2.dart" as exp2;
import "export_from_opt_out_lib3.dart" as exp3;
import "export_from_opt_out_lib5.dart" as exp4;
additionalExports = (exp::LegacyClass1,
  exp2::LegacyClass3,
  exp2::LegacyClass4,
  exp3::LegacyClass2,
  exp3::legacyMethod1,
  exp3::LegacyExtension,
  exp3::LegacyTypedef,
  exp4::NnbdClass1,
  exp4::NnbdClass2)

export "org-dartlang-testcase:///export_from_opt_out_lib1.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib2.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib3.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib4.dart";
export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";

static method main() → dynamic {}

library;
import self as exp;
import "dart:core" as core;

class LegacyClass1 extends core::Object {
  synthetic constructor •() → exp::LegacyClass1*
    : super core::Object::•()
    ;
}

library;
import self as exp2;
import "dart:core" as core;

class LegacyClass3 extends core::Object {
  synthetic constructor •() → exp2::LegacyClass3*
    : super core::Object::•()
    ;
}
class LegacyClass4 extends core::Object {
  synthetic constructor •() → exp2::LegacyClass4*
    : super core::Object::•()
    ;
}
static method legacyMethod2() → dynamic {}

library;
import self as exp3;
import "dart:core" as core;
import "export_from_opt_out_lib5.dart" as exp4;
additionalExports = (exp4::NnbdClass1,
  exp4::NnbdClass2)

export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";

typedef LegacyTypedef = () →* void;
class LegacyClass2 extends core::Object {
  synthetic constructor •() → exp3::LegacyClass2*
    : super core::Object::•()
    ;
}
extension LegacyExtension on core::String* {
}
static method legacyMethod1() → dynamic {}

library;
import self as self2;
import "export_from_opt_out_lib5.dart" as exp4;
additionalExports = (exp4::NnbdClass1,
  exp4::NnbdClass2)

export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";


library /*isNonNullableByDefault*/;
import self as exp4;
import "dart:core" as core;

class NnbdClass1 extends core::Object {
  synthetic constructor •() → exp4::NnbdClass1
    : super core::Object::•()
    ;
}
class NnbdClass2 extends core::Object {
  synthetic constructor •() → exp4::NnbdClass2
    : super core::Object::•()
    ;
}
