library;
import self as self;
import "dart:test" as test;

import "dart:test";

static method main() → dynamic {
  test::Class? c = new test::Class::•();
}

library;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
//   void patchedMethod([int i]) {}
//                           ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
//   void _injectedMethod([int i]) {}
//                             ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
// void patchedMethod([int i]) {}
//                         ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
// void _injectedMethod([int i]) {}
//                           ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
//   void method([int i]) {}
//                    ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
//   external void patchedMethod([int i]);
//                                    ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
// void method([int i]) {}
//                  ^
//
// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
// external void patchedMethod([int i]);
//                                  ^
//
import self as test;
import "dart:_internal" as _in;
import "dart:core" as core;

import "dart:_internal";

@#C1
class Class extends core::Object {
  synthetic constructor •() → test::Class
    : super core::Object::•()
    ;
  method method([core::int i = #C2]) → void {}
  @#C1
  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
}
static method method([core::int i = #C2]) → void {}
@#C1
static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}

constants  {
  #C1 = _in::_Patch {}
  #C2 = null
}
