/*
 * Copyright (c) 2019, 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.
 */
/**
 * @assertion The modifier required is added as a built-in identifier. The
 * grammar of function types is extended to allow any named parameter
 * declaration to be prefixed by the required modifier (e.g. int Function(int,
 * {int? y, required int z}).
 *
 * @description Check that it is a compile error if 'required' modifier is
 * misplaced
 * @author sgrekhov@unipro.ru
 */

class A {}

class C {
  static String staticTest1(required int x, {String z = "", required String y}) => y;
//                          ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
  static String staticTest2(int x, [String z = "", required String y]) => y;
//                                                 ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
  static String staticTest3(int x, {String z = "", final required String y}) => y;
//                                                       ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

  String test1(int x, [required String z = "",  String y = ""]) => y;
//                    ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
  String test2(required int x, {String z = "", required String y}) => y;
//             ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
  A test3(int x, {String z = "", covariant required  A y}) => y;
//                                         ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
  String test4(int x, {String z = "", final required String y}) => y;
//                                          ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}

String test1(required int x, {String z = "", required String y}) => y;
//           ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
String test2(int x, [String z = "", required String y]) => y;
//                                  ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
String test3(int x, {String z = "", final required String y}) => y;
//                                        ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

main() {
}
