library /*isNonNullableByDefault*/;
import self as self;
import "main_declaration.dart" as mai;
additionalExports = (mai::main)

import "org-dartlang-testcase:///export_main_declaration_class_lib.dart" as class_lib;
import "org-dartlang-testcase:///export_main_declaration_extension_lib.dart" as extension_lib;
import "org-dartlang-testcase:///export_main_declaration_field_lib.dart" as field_lib;
import "org-dartlang-testcase:///export_main_declaration_getter_lib.dart" as getter_lib;
import "org-dartlang-testcase:///export_main_declaration_method_extra_optional_parameters_lib.dart" as method_extra_optional_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_named_parameters_lib.dart" as method_named_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_one_optional_parameter_lib.dart" as method_one_optional_parameter_lib;
import "org-dartlang-testcase:///export_main_declaration_method_one_parameter_lib.dart" as method_one_parameter_lib;
import "org-dartlang-testcase:///export_main_declaration_method_one_required_optional_lib.dart" as method_one_required_optional_lib;
import "org-dartlang-testcase:///export_main_declaration_method_required_named_parameters_lib.dart" as method_required_named_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_too_many_parameters_lib.dart" as method_too_many_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_two_optional_parameters_lib.dart" as method_two_optional_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_two_parameters_lib.dart" as method_two_parameters_lib;
import "org-dartlang-testcase:///export_main_declaration_method_wrong_parameter_type_lib.dart" as method_wrong_parameter_type_lib;
import "org-dartlang-testcase:///export_main_declaration_setter_lib.dart" as setter_lib;
import "org-dartlang-testcase:///export_main_declaration_typedef_lib.dart" as typedef_lib;
export "org-dartlang-testcase:///main_declaration.dart";


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_class_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_class_lib.dart:5:7: Context: This is exported 'main' declaration.
// class main /* error */ {}
//       ^
//
import self as self2;
import "main_declaration_class_lib.dart" as mai2;
additionalExports = (mai2::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_extension_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_extension_lib.dart:5:11: Context: This is exported 'main' declaration.
// extension main /* error */ on Object {}
//           ^
//
import self as self3;
import "main_declaration_extension_lib.dart" as mai3;
additionalExports = (mai3::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_field_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_field_lib.dart:5:17: Context: This is exported 'main' declaration.
// void Function() main /* error */ = () {};
//                 ^^^^
//
import self as self4;
import "main_declaration_field_lib.dart" as mai4;
additionalExports = (mai4::main,
  mai4::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_getter_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_getter_lib.dart:5:21: Context: This is exported 'main' declaration.
// void Function() get main /* error */ => () {};
//                     ^^^^
//
import self as self5;
import "main_declaration_getter_lib.dart" as mai5;
additionalExports = (mai5::main)

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


library /*isNonNullableByDefault*/;
import self as self6;
import "main_declaration_method_extra_optional_parameters_lib.dart" as mai6;
additionalExports = (mai6::main)

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


library /*isNonNullableByDefault*/;
import self as self7;
import "main_declaration_method_named_parameters_lib.dart" as mai7;
additionalExports = (mai7::main)

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


library /*isNonNullableByDefault*/;
import self as self8;
import "main_declaration_method_one_optional_parameter_lib.dart" as mai8;
additionalExports = (mai8::main)

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


library /*isNonNullableByDefault*/;
import self as self9;
import "main_declaration_method_one_parameter_lib.dart" as mai9;
additionalExports = (mai9::main)

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


library /*isNonNullableByDefault*/;
import self as self10;
import "main_declaration_method_one_required_optional_lib.dart" as mai10;
additionalExports = (mai10::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_method_required_named_parameters_lib.dart: Error: The exported 'main' method cannot have required named parameters.
// pkg/front_end/testcases/nnbd/main_declaration_method_required_named_parameters_lib.dart:5:6: Context: This is exported 'main' declaration.
// void main({required List<String> args}) /* error */ {}
//      ^^^^
//
import self as self11;
import "main_declaration_method_required_named_parameters_lib.dart" as mai11;
additionalExports = (mai11::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_method_too_many_parameters_lib.dart: Error: The exported 'main' method must have at most 2 required parameters.
// pkg/front_end/testcases/nnbd/main_declaration_method_too_many_parameters_lib.dart:5:6: Context: This is exported 'main' declaration.
// void main(List<String> args, a, b) /* error */ {}
//      ^^^^
//
import self as self12;
import "main_declaration_method_too_many_parameters_lib.dart" as mai12;
additionalExports = (mai12::main)

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


library /*isNonNullableByDefault*/;
import self as self13;
import "main_declaration_method_two_optional_parameters_lib.dart" as mai13;
additionalExports = (mai13::main)

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


library /*isNonNullableByDefault*/;
import self as self14;
import "main_declaration_method_two_parameters_lib.dart" as mai14;
additionalExports = (mai14::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_method_wrong_parameter_type_lib.dart: Error: The type 'Set<String>' of the first parameter of the exported 'main' method is not a supertype of 'List<String>'.
//  - 'Set' is from 'dart:core'.
//  - 'List' is from 'dart:core'.
// pkg/front_end/testcases/nnbd/main_declaration_method_wrong_parameter_type_lib.dart:5:6: Context: This is exported 'main' declaration.
// void main(Set<String> args) /* error */ {}
//      ^^^^
//
import self as self15;
import "main_declaration_method_wrong_parameter_type_lib.dart" as mai15;
additionalExports = (mai15::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_setter_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_setter_lib.dart:5:10: Context: This is exported 'main' declaration.
// void set main(void Function() f) /* error */ {}
//          ^^^^
//
import self as self16;
import "main_declaration_setter_lib.dart" as mai16;
additionalExports = (mai16::main)

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


library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/export_main_declaration_typedef_lib.dart: Error: The exported 'main' declaration must be a function declaration.
// pkg/front_end/testcases/nnbd/main_declaration_typedef_lib.dart:5:9: Context: This is exported 'main' declaration.
// typedef main /* error */ = void Function();
//         ^
//
import self as self17;
import "main_declaration_typedef_lib.dart" as mai17;
additionalExports = (mai17::main)

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


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

import "org-dartlang-testcase:///main_declaration_class_lib.dart" as class_lib;
import "org-dartlang-testcase:///main_declaration_extension_lib.dart" as extension_lib;
import "org-dartlang-testcase:///main_declaration_field_lib.dart" as field_lib;
import "org-dartlang-testcase:///main_declaration_getter_lib.dart" as getter_lib;
import "org-dartlang-testcase:///main_declaration_method_extra_optional_parameters_lib.dart" as method_extra_optional_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_named_parameters_lib.dart" as method_named_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_one_optional_parameter_lib.dart" as method_one_optional_parameter_lib;
import "org-dartlang-testcase:///main_declaration_method_one_parameter_lib.dart" as method_one_parameter_lib;
import "org-dartlang-testcase:///main_declaration_method_one_required_optional_lib.dart" as method_one_required_optional_lib;
import "org-dartlang-testcase:///main_declaration_method_required_named_parameters_lib.dart" as method_required_named_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_too_many_parameters_lib.dart" as method_too_many_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_two_optional_parameters_lib.dart" as method_two_optional_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_two_parameters_lib.dart" as method_two_parameters_lib;
import "org-dartlang-testcase:///main_declaration_method_wrong_parameter_type_lib.dart" as method_wrong_parameter_type_lib;
import "org-dartlang-testcase:///main_declaration_setter_lib.dart" as setter_lib;
import "org-dartlang-testcase:///main_declaration_typedef_lib.dart" as typedef_lib;

static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_class_lib.dart:5:7: Error: The 'main' declaration must be a function declaration.
// class main /* error */ {}
//       ^
//
import self as mai2;
import "dart:core" as core;

class main extends core::Object {
  synthetic constructor •() → mai2::main
    ;
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_extension_lib.dart:5:11: Error: The 'main' declaration must be a function declaration.
// extension main /* error */ on Object {}
//           ^
//
import self as mai3;
import "dart:core" as core;

extension main on core::Object {
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_field_lib.dart:5:17: Error: The 'main' declaration must be a function declaration.
// void Function() main /* error */ = () {};
//                 ^^^^
//
import self as mai4;

static field () → void main;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_getter_lib.dart:5:21: Error: The 'main' declaration must be a function declaration.
// void Function() get main /* error */ => () {};
//                     ^^^^
//
import self as mai5;

static get main() → () → void
  ;

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

static method main(core::List<core::String> args, dynamic other, [dynamic extra]) → void
  ;

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

static method main({core::List<core::String> args}) → void
  ;

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

static method main([core::List<core::String>? args]) → void
  ;

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

static method main(core::List<core::String> args) → void
  ;

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

static method main(core::List<core::String> args, [dynamic other]) → void
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_method_required_named_parameters_lib.dart:5:6: Error: The 'main' method cannot have required named parameters.
// void main({required List<String> args}) /* error */ {}
//      ^^^^
//
import self as mai11;
import "dart:core" as core;

static method main({required core::List<core::String> args}) → void
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_method_too_many_parameters_lib.dart:5:6: Error: The 'main' method must have at most 2 required parameters.
// void main(List<String> args, a, b) /* error */ {}
//      ^^^^
//
import self as mai12;
import "dart:core" as core;

static method main(core::List<core::String> args, dynamic a, dynamic b) → void
  ;

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

static method main([core::List<core::String> args, dynamic other]) → void
  ;

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

static method main(core::List<core::String> args, dynamic other) → void
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_method_wrong_parameter_type_lib.dart:5:6: Error: The type 'Set<String>' of the first parameter of the 'main' method is not a supertype of 'List<String>'.
//  - 'Set' is from 'dart:core'.
//  - 'List' is from 'dart:core'.
// void main(Set<String> args) /* error */ {}
//      ^^^^
//
import self as mai15;
import "dart:core" as core;

static method main(core::Set<core::String> args) → void
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_setter_lib.dart:5:10: Error: The 'main' declaration must be a function declaration.
// void set main(void Function() f) /* error */ {}
//          ^^^^
//
import self as mai16;

static set main(() → void f) → void
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/main_declaration_typedef_lib.dart:5:9: Error: The 'main' declaration must be a function declaration.
// typedef main /* error */ = void Function();
//         ^
//
import self as mai17;

typedef main = () → void;
