// 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.
// @dart=2.9
class Class {}

extension Extension on Class {
  void method1({bool b = false, String s = ', '}) => null;
  void method2([bool b = false, String s = ', ']) => null;
  void method3(int i, {bool b = false, String s = ', '}) {}
  void method4(int i, [bool b = false, String s = ', ']) {}
}

main() {
  var c = new Class();
  c.method1();
  c.method1(s: 'foo');
  c.method1(b: true);
  c.method1(b: true, s: 'foo');
  c.method1(s: 'foo', b: true);
  c.method2();
  c.method2(true);
  c.method2(true, 'foo');
  c.method3(42);
  c.method3(42, s: 'foo');
  c.method3(42, b: true);
  c.method3(42, b: true, s: 'foo');
  c.method3(42, s: 'foo', b: true);
  c.method4(42);
  c.method4(42, true);
  c.method4(42, true, 'foo');
}
