// Copyright (c) 2021, 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 These grammar changes allows type parameters without following
/// parenthesized arguments in places where we previously did not allow them.
/// For example, this means that <typeArguments> becomes a selector by itself,
/// not just followed by arguments.
//
// It applies to instance methods as well as local, static and top-level
// function declarations. For instance methods, it applies to references of the
// form
//
// instanceMethod<int> (with implicit this),
// object.instanceMethod<int> (including this) and super.instanceMethod<int>.
///
/// @description Checks tear-off of inherited generic instance method including
/// 'this'
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=constructor-tearoffs

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

class A {
  T instanceMethod<T>(T t) => t;
}

class C extends A {
  var x;
  C() {
    x = this.instanceMethod<int>;
  }
}

main() {
  C c = new C();
  Expect.equals(42, c.x(42));
  dynamic d1 = -42;
  Expect.isTrue(c.x(d1) is int);
  Expect.isFalse(c.x(d1) is double); // to check that returned type is not dynamic
  dynamic d2 = 3.14;
  Expect.throws(() {c.x(d2);});
}
