// 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.
// @dart=2.9
class Class1<T extends Function> {
  T field;

  Class1(this.field);

  method() {
    var v1 = field(); // ok
    var v2 = field(0); // ok
    var v3 = field.call; // ok
    var v4 = field.call(); // ok
    var v5 = field.call(0); // ok
  }
}

class Class2<T extends String Function(int)> {
  T field;

  Class2(this.field);

  method() {
    var v1 = field(); // error
    var v2 = field(0); // ok
    var v3 = field.call; // ok
    var v4 = field.call(); // error
    var v5 = field.call(0); // ok
  }
}

main() {}
