/*
 * 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.
 */
/**
 * @description Regression test for the issue 33701 (Dart does not throw error
 * if function argument parameter extends [Null]). Checks that [typedef] type
 * parameter cannot extend [Null]
 *
 * Finally, analyzer behavior was updated, so checks that function type
 * parameter can extends [Null] with nnbd turned on.
 *
 * @Issue 33701
 * @author iarkh@unipro.ru
 */

typedef F1<X extends Null> = X Function();
typedef F2<X extends Null> = void Function(X);
typedef F3<X extends Null> = X Function(X);
typedef F4<X extends Null> = void Function();
typedef F5<X extends Null> = void Function<X1 extends X>();
typedef F6<X extends Null> = X Function<X1 extends X>(X);
typedef F7<X extends Null> = void Function<X1 extends X>(X);
typedef F8<X extends Null> = void Function<X1 extends Null>(X);

main() {
  print(F7);
}
