// 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(/*Function(method1)*/ function0);
  // TODO(paulberry): analyzer should record instantiation information.  See
  // dartbug.com/37608.
  print(
      /*cfe|dart2js.Instantiation(method1<int>)*/
      /*analyzer.Function(method1)*/
      instantiation0);
  print(
      /*cfe|dart2js.Instantiation(method2<String,int>)*/
      /*analyzer.Function(method2)*/
      instantiation1);
}
