// 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 For any member access, x.foo, x.bar(), x.baz = 42, x(42), x[0] = 1
/// or x + y, including null-aware and cascade accesses which effectively desugar
/// to one of those direct accesses, and including implicit member accesses on
/// this, the language first checks whether the static type of x has a member
/// with the same base name as the operation. That is, if it has a corresponding
/// instance member, respectively, a foo method or getter or a foo= setter, a bar
/// member or bar= setter, a baz member or baz= setter, a call method, a
/// []= operator or a + operator. If so, then the operation is unaffected by
/// extensions. This check does not care whether the invocation is otherwise
/// correct, based on number or type of the arguments, it only checks whether
/// there is a member at all.
///
/// @description Check that an instance member takes a precedence over an
/// extension member and it's never mind if the invocation is otherwise correct,
/// based on number or type of the arguments, it only checks whether there is a
/// member at all.
/// @author sgrekhov@unipro.ru



class A {}

class C extends A {
  String method(int i) => "$i";
}

extension E<T extends A> on T {
  String method(int i, String s) {}
//       ^
// [analyzer] unspecified
// [cfe] unspecified
}

main() {
  C c = new C();
  c.method(42, "-42");
//             ^
// [analyzer] unspecified
// [cfe] unspecified
}
