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

/*@testedFeatures=inference*/
library test;

typedef V F<U, V>(U u);

class Foo<T> {
  Bar<T> get v1 => const /*@ typeArgs=Null* */ Bar();
  Bar<List<T>> get v2 => const /*@ typeArgs=List<Null*>* */ Bar();
  Bar<F<T, T>> get v3 => const /*@ typeArgs=(Object*) ->* Null* */ Bar();
  Bar<F<F<T, T>, T>> get v4 =>
      const /*@ typeArgs=((Null*) ->* Object*) ->* Null* */ Bar();
  List<T> get v5 => /*@ typeArgs=Null* */ const [];
  List<F<T, T>> get v6 => /*@ typeArgs=(Object*) ->* Null* */ const [];
  Map<T, T> get v7 => /*@ typeArgs=Null*, Null* */ const {};
  Map<F<T, T>, T> get v8 => /*@ typeArgs=(Object*) ->* Null*, Null* */ const {};
  Map<T, F<T, T>> get v9 => /*@ typeArgs=Null*, (Object*) ->* Null* */ const {};
}

class Bar<T> {
  const Bar();
}

main() {}
