// 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.


// Test that it is an error if an optional parameter (named or otherwise) with
// no default value has a potentially non-nullable type.
main() {}

// Non-nullable types
void f01({int a = 0}) {}
void f02({int a}) {} //# 01: compile-time error
void f03({required int a}) {}
void f04([int a = 0]) {}
void f05([int a]) {} //# 02: compile-time error
void f06(int a) {}

// Nullable types
void f07({int? a = 0}) {}
void f08({int? a}) {}
void f09({required int? a}) {}
void f10([int? a = 0]) {}
void f11([int? a]) {}
void f12(int? a) {}

class A {
  var f;
  A(void this.f({String s})) {}
}
typedef void f13({String s});
void printToLog(void f({String s})) {}
void Function({String s})? f14;

class B<T extends Object?> {
  // Potentially non-nullable types
  void f15({T a = null}) {} //# 03: compile-time error
  void f16({T a}) {} //# 04: compile-time error
  void f17({required T a}) {}
  void f18([T a = null]) {} //# 05: compile-time error
  void f19([T a]) {} //# 06: compile-time error
  void f20(T a) {}

  // Nullable types
  void f21({T? a = null}) {}
  void f22({T? a}) {}
  void f23({required T? a}) {}
  void f24([T? a = null]) {}
  void f25([T? a]) {}
  void f26(T? a) {}
}

class C<T extends Object> {
  // Non-nullable types
  void f27({T a = null}) {} //# 07: compile-time error
  void f28({T a}) {} //# 08: compile-time error
  void f29({required T a}) {}
  void f30([T a = null]) {} //# 09: compile-time error
  void f31([T a]) {} //# 10: compile-time error
  void f32(T a) {}

  // Nullable types
  void f33({T? a = null}) {}
  void f34({T? a}) {}
  void f35({required T? a}) {}
  void f36([T? a = null]) {}
  void f37([T? a]) {}
  void f38(T? a) {}
}
