// Copyright (c) 2019, 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.

T method1<T>(T t) => t;
Map<T, S> method2<T, S>(T t, S s) => {t: s};

const function0 = /*cfe.Function(method1)*/ method1;

const int Function(int) instantiation0 =
    /*cfe.Instantiation(method1<int!>)*/ method1;

const Map<String, int> Function(String, int) instantiation1 =
    /*cfe.Instantiation(method2<String!,int!>)*/ method2;

main() {
  print(
      /*cfe|dart2js.Function(method1)*/
      /*analyzer.Function(method1,type=T Function<T>(T))*/
      function0);
  print(
      /*cfe.Instantiation(method1<int!>)*/
      /*dart2js.Instantiation(method1<int>)*/
      /*analyzer.Function(method1,type=int Function(int))*/
      instantiation0);
  print(
      /*cfe.Instantiation(method2<String!,int!>)*/
      /*dart2js.Instantiation(method2<String,int>)*/
      /*analyzer.Function(method2,type=Map<String, int> Function(String, int))*/
      instantiation1);
}
