// 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 Members inherited in a class in an opted-in library, which are
 * inherited via a class or mixin defined in a legacy library are viewed with
 * their erased legacy signature, even if they were original defined in an
 * opted-in library. Note that if a class which is defined in a legacy library
 * inherits a member with the same name from multiple super-interfaces, then
 * error checking is done as usual using the legacy typing rules which ignore
 * nullability. This means that it is valid for a legacy class to inherit the
 * same member signature with contradictory nullability information. For the
 * purposes of member lookup within a legacy library, nullability information is
 * ignored, and so it is valid to simply erase the nullability information
 * within the legacy library. When referenced from an opted-in library, the same
 * erasure is performed, and the member is seen at its legacy type.
 *
 * We use legacy subtyping when checking inherited member signature coherence in
 * classes because opted out libraries may bring together otherwise incompatible
 * member signatures without causing an error.
 *
 * @description Check that legacy class can inherit the same getter from two
 * opted in classes with contradictory nullability information.
 *
 * @author iarkh@unipro.ru
 */
// Requirements=nnbd-weak

import "../../../../Utils/expect.dart";
import "override_checking_A03_opted_out_lib.dart";
import "override_checking_A03_opted_in_lib.dart";

main() {
  LEGACY_GETTER_1 x1 = LEGACY_GETTER_1();
  Expect.isNull(x1.getInt);
  Expect.isNull(x1.getObject);
  Expect.isNull(x1.getFunction);

  LEGACY_GETTER_2 x2 = LEGACY_GETTER_2();
  Expect.equals(1, x2.getInt);
  Expect.equals(1, x2.getObject);
  Expect.equals(testme, x2.getFunction);
}
