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