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

class Class<T> {
  T get direct => null;
  void Function(T) get functionArgument => null;
  T Function() get functionReturn => null;
  T Function(T) get functionArgumentReturn => null;

  void method(Class<T> other) {
    direct;
    this.direct;
    other.direct;

    functionArgument;
    this.functionArgument;
    other. /*as: void Function(T)*/ functionArgument;

    functionArgument(null);
    this.functionArgument(null);
    other. /*as: void Function(T)*/ functionArgument(null);

    functionReturn;
    this.functionReturn;
    other.functionReturn;

    functionReturn();
    this.functionReturn();
    other.functionReturn();

    functionArgumentReturn;
    this.functionArgumentReturn;
    other. /*as: T Function(T)*/ functionArgumentReturn;

    functionArgumentReturn(null);
    this.functionArgumentReturn(null);
    other. /*as: T Function(T)*/ functionArgumentReturn(null);
  }
}
