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

// Ensure that the inferrer looks at default values for parameters in
// synthetic constructors using the correct context. If the constructor call
// to D without optional parameters is inferred using D's context, the default
// value `_SECRET` will not be visible and compilation will fail.

import '../libs/mixin_constructor_default_parameter_values_lib.dart';

class Mixin {
  /*element: Mixin.foo:[exact=JSString]*/
  String get foo => "Mixin:$this";
}

// ignore: MIXIN_HAS_NO_CONSTRUCTORS
class D = C with Mixin;

/*element: main:[null]*/
main() {
  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
  print(new D.a(42). /*[exact=D]*/ foo);
  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
  print(new D.b(42). /*[exact=D]*/ foo);
  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
  print(new D.a(42, "overt"). /*[exact=D]*/ foo);
  // ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
  print(new D.b(42, b: "odvert"). /*[exact=D]*/ foo);
}
