// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

class A {
  final int i;

  A.constructor1([this.i]); // error

  A.constructor2({this.i}); // error

  A.constructor3([int i]) // error
      : this.i = i; // ok

  A.constructor4({int i}) // error
      : this.i = i; // ok

  A.constructor5([int? i]) // ok
      : this.i = i; // error

  A.constructor6({int? i}) // ok
      : this.i = i; // error

  A.constructor7({required int i}) // ok
      : this.i = i; // ok

  external A.constructor8([int i]); // ok

  external A.constructor9({int i}); // ok

  factory A.factory3([int i]) = A.constructor3; // ok

  factory A.factory4({int i}) = A.constructor4; // ok

  factory A.factory5([int? i]) = A.constructor5; // ok

  factory A.factory6({int? i}) = A.constructor6; // ok

  factory A.factory7({required int i}) = A.constructor7; // ok

  method3([int i]) {} // error

  method4({int i}) {} // error

  method5([int? i]) {} // ok

  method6({int? i}) {} // ok

  method7({required int i}) {} // ok

  external method8([int i]); // ok

  external method9({int i}); // ok
}

abstract class B {
  var i = 42;

  method3([int i]); // ok

  method4({int i}); // ok

  method5([int? i]); // ok

  method6({int? i}); // ok

  method7({required int i}); // ok
}

class C implements B {
  var i;

  C.constructor1([this.i]); // error

  C.constructor2({this.i}); // error

  C.constructor3([int i]) : this.i = i; // error

  C.constructor4({int i}) : this.i = i; // error

  C.constructor5([int? i]) : this.i = i; // error

  C.constructor6({int? i}) : this.i = i; // error

  C.constructor7({required int i}) // ok
      : this.i = i; // ok

  factory C.factory3([int i]) = C.constructor3; // ok

  factory C.factory4({int i}) = C.constructor4; // ok

  factory C.factory5([int? i]) = C.constructor5; // ok

  factory C.factory6({int? i}) = C.constructor6; // ok

  factory C.factory7({required int i}) = C.constructor7; // ok

  method3([i]) {} // error

  method4({i}) {} // error

  method5([i]) {} // ok

  method6({i}) {} // ok

  method7({required i}) {} // ok
}

void main() {}
