// Copyright (c) 2020, 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 flatten function is modified as follows:
///
/// [flatten(T)] is defined by cases on [T]:
///
///   if [T] is [S?] then [flatten(T) = flatten(S)?]
///   otherwise if [T] is [S*] then [flatten(T) = flatten(S)*]
///   otherwise if [T] is [FutureOr<S>] then [flatten(T) = S]
///   otherwise [if T <: Future] then let [S] be a type such that [T <:
///       Future<S>] and for all [R], if [T <: Future<R>] then [S <: R]; then
///       [flatten(T) = S]
///   otherwise [flatten(T) = T]
///
/// @description Checks that type of await expression matches with the expected
/// non-nullable legacy types statically and the expression cannot be null.
///
/// @description Check that type of `await` expression match with expected type
/// dynamically for the custom legacy class type parameter and the expression can
/// be `null` in weak mode.
///
/// Here is a situation where sound and non-sound null checking produce different
/// results. The `null` value is tested using `null as A`, and such a cast
/// succeeds. So `test()` does not throw error  and returns `Future<A>` that will
/// be completed with `null`. No dynamic error here.
///
/// @author iarkh@unipro.ru

// Requirements=nnbd-weak

import "dart:async";
import "future_flattening_legacy_lib.dart";

Future<A> test() async {
  A a = await (null as A);
  return new Future<A>.value(new A());
}

main() {}
