library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue42362.dart:45:16: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   method3([int i]) {} // error
//                ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:47:16: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   method4({int i}) {} // error
//                ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:8:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   A.constructor1([this.i]); // error
//                        ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:10:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   A.constructor2({this.i}); // error
//                        ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:12:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   A.constructor3([int i]) // error
//                       ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:15:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   A.constructor4({int i}) // error
//                       ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:41:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   factory A.factory8([int i]) => new A.constructor3(); // error
//                           ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:43:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   factory A.factory9({int i}) => new A.constructor4(); // error
//                           ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:106:12: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   method3([i]) {} // error
//            ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:108:12: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   method4({i}) {} // error
//            ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:77:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   C.constructor1([this.i]); // error
//                        ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:79:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   C.constructor2({this.i}); // error
//                        ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:81:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   C.constructor3([int i]) : this.i = i; // error
//                       ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:83:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   C.constructor4({int i}) : this.i = i; // error
//                       ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:102:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   factory C.factory8([int i]) => new C.constructor3(); // error
//                           ^
//
// pkg/front_end/testcases/nnbd/issue42362.dart:104:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.
//   factory C.factory9({int i}) => new C.constructor4(); // error
//                           ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  final field core::int i;
  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
  constructor constructor1([core::int i]) → self::A
    ;
  constructor constructor2({core::int i}) → self::A
    ;
  constructor constructor3([core::int i]) → self::A
    ;
  constructor constructor4({core::int i}) → self::A
    ;
  constructor constructor5([core::int? i]) → self::A
    ;
  constructor constructor6({core::int? i}) → self::A
    ;
  constructor constructor7({required core::int i}) → self::A
    ;
  external constructor constructor8([core::int i]) → self::A
    ;
  external constructor constructor9({core::int i}) → self::A
    ;
  static factory factory3([core::int i]) → self::A
    return new self::A::constructor3(i);
  static factory factory4({core::int i}) → self::A
    return new self::A::constructor4(i: i);
  static factory factory5([core::int? i]) → self::A
    return new self::A::constructor5(i);
  static factory factory6({core::int? i}) → self::A
    return new self::A::constructor6(i: i);
  static factory factory7({required core::int i}) → self::A
    return new self::A::constructor7(i: i);
  static factory factory8([core::int i]) → self::A
    ;
  static factory factory9({core::int i}) → self::A
    ;
  method method3([core::int i]) → dynamic
    ;
  method method4({core::int i}) → dynamic
    ;
  method method5([core::int? i]) → dynamic
    ;
  method method6({core::int? i}) → dynamic
    ;
  method method7({required core::int i}) → dynamic
    ;
  external method method8([core::int i]) → dynamic;
  external method method9({core::int i}) → dynamic;
}
abstract class B extends core::Object {
  field core::int i;
  synthetic constructor •() → self::B
    ;
  abstract method method3([core::int i]) → dynamic;
  abstract method method4({core::int i}) → dynamic;
  abstract method method5([core::int? i]) → dynamic;
  abstract method method6({core::int? i}) → dynamic;
  abstract method method7({required core::int i}) → dynamic;
}
class C extends core::Object implements self::B {
  field core::int i;
  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
  constructor constructor1([core::int i]) → self::C
    ;
  constructor constructor2({core::int i}) → self::C
    ;
  constructor constructor3([core::int i]) → self::C
    ;
  constructor constructor4({core::int i}) → self::C
    ;
  constructor constructor5([core::int? i]) → self::C
    ;
  constructor constructor6({core::int? i}) → self::C
    ;
  constructor constructor7({required core::int i}) → self::C
    ;
  static factory factory3([core::int i]) → self::C
    return new self::C::constructor3(i);
  static factory factory4({core::int i}) → self::C
    return new self::C::constructor4(i: i);
  static factory factory5([core::int? i]) → self::C
    return new self::C::constructor5(i);
  static factory factory6({core::int? i}) → self::C
    return new self::C::constructor6(i: i);
  static factory factory7({required core::int i}) → self::C
    return new self::C::constructor7(i: i);
  static factory factory8([core::int i]) → self::C
    ;
  static factory factory9({core::int i}) → self::C
    ;
  method method3([core::int i]) → dynamic
    ;
  method method4({core::int i}) → dynamic
    ;
  method method5([core::int? i]) → dynamic
    ;
  method method6({core::int? i}) → dynamic
    ;
  method method7({required core::int i}) → dynamic
    ;
}
static method main() → void
  ;


Extra constant evaluation status:
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory3)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory4)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory5)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory6)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory7)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory3)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory4)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory5)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory6)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory7)
Extra constant evaluation: evaluated: 32, effectively constant: 10
