// 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 extension application is an expression of the form E(expr) or
 * E<typeArgs>(expr) where E denotes an extension declaration (that is, E a
 * simple or qualified identifier which refers to the extension declaration).
 *
 * An extension application is subject to static type inference. If E is an
 * extension declared as extension E<X...> on T {...}, then the type inference
 * for an extension application is done exactly the same as it would be for the
 * same syntax considered as a constructor invocation on a class declared as:
 *
 *  class E<X...> {
 *    final T $target;
 *    E(this.$target);
 *  }
 * with no context type for the constructor invocation.
 *
 * @description Check that an extension application is subject to static type
 * inference
 * @author sgrekhov@unipro.ru
 */


class A {
  String name = "My name is A";
}

class C extends A {
  String name = "My name is C";
}

extension ExtendedA on A {
  String checkme() => this.name;
}

extension ExtendedC on C {
  String checkme() => this.name;
}

main() {
  A a = A();
  ExtendedC(a).checkme();
//          ^
// [analyzer] unspecified
// [cfe] unspecified
}
