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

class Class {
  void unboundedUnused<T>() {}

  void unboundedArg<T>(T t) {}

  T unboundedReturn<T>() => throw '';

  T unboundedReturnArg<T>(T t) => t;

  void extendsNumUnused<T extends num>() {}

  void extendsNumArg<T extends num>(T t) {}

  T extendsNumReturn<T extends num>() => throw '';

  T extendsNumReturnArg<T extends num>(T t) => t;

  void multipleArgs<T, U, S>(T t, S s, U u) {}

  instanceInvocations() {
    unboundedUnused /*<dynamic>*/ ();
    unboundedUnused<int>();

    unboundedArg /*<Null>*/ (null);
    unboundedArg /*<int>*/ (0);
    unboundedArg /*<String>*/ ("");
    unboundedArg<num>(0);

    unboundedReturn /*<dynamic>*/ ();
    unboundedReturn<int>();
    var unboundedReturn1 = unboundedReturn /*<dynamic>*/ ();
    int unboundedReturn2 = unboundedReturn /*<int>*/ ();
    num unboundedReturn3 = unboundedReturn<int>();

    unboundedReturnArg /*<Null>*/ (null);
    unboundedReturnArg /*<int>*/ (0);
    unboundedReturnArg /*<String>*/ ("");
    unboundedReturnArg<num>(0);
    var unboundedReturnArg1 = unboundedReturnArg /*<int>*/ (0);
    var unboundedReturnArg2 = unboundedReturnArg /*<String>*/ ("");
    num unboundedReturnArg3 = unboundedReturnArg /*<num>*/ (0);
    int unboundedReturnArg4 = unboundedReturnArg /*<int>*/ (0);
    int unboundedReturnArg5 = unboundedReturnArg /*<int>*/ (0.5);
    int unboundedReturnArg6 = unboundedReturnArg /*<int>*/ ("");
    int unboundedReturnArg7 = unboundedReturnArg<num>(0);

    extendsNumUnused /*<num>*/ ();
    extendsNumUnused<int>();

    extendsNumArg /*<num>*/ (null);
    extendsNumArg /*<int>*/ (0);
    extendsNumArg /*<num>*/ ("");
    extendsNumArg<num>(0);

    extendsNumReturn /*<num>*/ ();
    extendsNumReturn<int>();
    var extendsNumReturn1 = extendsNumReturn /*<num>*/ ();
    int extendsNumReturn2 = extendsNumReturn /*<int>*/ ();
    num extendsNumReturn3 = extendsNumReturn<int>();

    extendsNumReturnArg /*<num>*/ (null);
    extendsNumReturnArg /*<int>*/ (0);
    extendsNumReturnArg /*<num>*/ ("");
    extendsNumReturnArg<num>(0);
    var extendsNumReturnArg1 = extendsNumReturnArg /*<int>*/ (0);
    var extendsNumReturnArg2 = extendsNumReturnArg /*<num>*/ ("");
    num extendsNumReturnArg3 = extendsNumReturnArg /*<num>*/ (0);
    int extendsNumReturnArg4 = extendsNumReturnArg /*<int>*/ (0);
    int extendsNumReturnArg5 = extendsNumReturnArg /*<int>*/ (0.5);
    int extendsNumReturnArg6 = extendsNumReturnArg /*<int>*/ ("");
    int extendsNumReturnArg7 = extendsNumReturnArg<num>(0);

    multipleArgs /*<dynamic,dynamic,dynamic>*/ ();
    multipleArgs /*<int,String,bool>*/ (0, true, "");
    multipleArgs<int, bool, String>(0, true, "");
  }
}
