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

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) {}

staticInvocations() {
  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 /*analyzer.<dynamic,dynamic,dynamic>*/ ();
  multipleArgs/*<int,String,bool>*/(0, true, "");
  multipleArgs<int, bool, String>(0, true, "");
}
