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

dynamic dyn = null;

class Unbounded<T> {
  Unbounded();
}

class UnboundedArg<T> {
  UnboundedArg(T t);
}

class ExtendsNum<T extends num> {
  ExtendsNum();
}

class ExtendsNumArg<T extends num> {
  ExtendsNumArg(T t);
}

class MultipleArgs<T, U, S> {
  MultipleArgs(T t, S s, U u);
}

staticInvocations() {
  Unbounded/*<dynamic>*/();
  Unbounded<int>();
  var unboundedReturn1 = Unbounded/*<dynamic>*/();
  Unbounded<int> unboundedReturn2 = Unbounded/*<int>*/();
  Unbounded<num> unboundedReturn3 = Unbounded<int>();
  Unbounded unboundedReturn4 = Unbounded/*<dynamic>*/();

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

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

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

  MultipleArgs/*<dynamic,dynamic,dynamic>*/(dyn, dyn, dyn);
  MultipleArgs/*<int,String,bool>*/(0, true, "");
  MultipleArgs<int, bool, String>(0, true, "");
  var multipleArgs1 = MultipleArgs /*analyzer.<dynamic,dynamic,dynamic>*/ ();
  var multipleArgs2 = MultipleArgs/*<int,String,bool>*/(0, true, "");
  MultipleArgs multipleArgs3 =
      MultipleArgs/*<dynamic,dynamic,dynamic>*/(0, true, "");
  MultipleArgs<int, String, bool> multipleArgs4 =
      MultipleArgs/*<int,String,bool>*/(dyn, dyn, dyn);
}
