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

/// @assertion An interface I inherits any members of its superinterfaces that
/// are not overridden by members declared in I.
/// @description Checks that there're no static warnings produced when
/// attempting to access the inherited non-static members of a null variable
/// whose static type is an interface extending another interface that declares
/// those members. This should indirectly prove that they're indeed inherited
/// by the subinterface. Test type aliases
/// @author sgrekhov@unopro.ru

// SharedOptions=--enable-experiment=nonfunction-type-aliases
import '../../../../Utils/expect.dart';

abstract class I {
  void m();
  int get gett0r;
  void set sett0r(int v);
  I operator+(int i);
}

typedef IAlias = I;

abstract class C implements IAlias {
}

main() {
  C? c = null;

  c?.m();
  c?.gett0r;
  c?.sett0r = 1;
  Expect.throws(() {(c as C) + 1;});
}
