// Copyright (c) 2012, 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.

// @dart = 2.9

class A {
  const A(a);
  const A.named({a: 42});
  const A.optional([a]);
}

main() {
  const A(1);
  const A();
  //     ^^
  // [analyzer] COMPILE_TIME_ERROR.NOT_ENOUGH_POSITIONAL_ARGUMENTS
  // [cfe] Too few positional arguments: 1 required, 0 given.
  const A(1, 2);
  //         ^
  // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
  //     ^^^^^^
  // [cfe] Too many positional arguments: 1 allowed, but 2 found.
  const A.named();
  const A.named(b: 1);
  //            ^
  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_NAMED_PARAMETER
  // [cfe] No named parameter with the name 'b'.
  const A.named(a: 1, a: 2);
  //                  ^
  // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_NAMED_ARGUMENT
  // [cfe] Duplicated named argument 'a'.
  const A.named(a: 1, b: 2);
  //                  ^
  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_NAMED_PARAMETER
  // [cfe] No named parameter with the name 'b'.
  const A.optional();
  const A.optional(42);
  const A.optional(42, 54);
  //                   ^^
  // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
  //              ^^^^^^^^
  // [cfe] Too many positional arguments: 1 allowed, but 2 found.
}
