// 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.
// @dart=2.9
/*@testedFeatures=inference*/
library test;

class Resource {}

class Folder extends Resource {}

Resource getResource(String str) => null;

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

main() {
  // List inside map
  var /*@ type=Map<String*, List<Folder*>*>* */ map = <String, List<Folder>>{
    'pkgA': /*@ typeArgs=Folder* */ [
      /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgA/lib/')
    ],
    'pkgB': /*@ typeArgs=Folder* */ [
      /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgB/lib/')
    ]
  };
  // Also try map inside list
  var /*@ type=List<Map<String*, Folder*>*>* */ list = <Map<String, Folder>>[
    /*@ typeArgs=String*, Folder* */ {
      'pkgA': /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgA/lib/')
    },
    /*@ typeArgs=String*, Folder* */ {
      'pkgB': /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgB/lib/')
    },
  ];
  // Instance creation too
  var /*@ type=Foo<List<Folder*>*>* */ foo = new Foo<List<Folder>>(
      /*@ typeArgs=Folder* */ [
        /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgA/lib/')
      ]);
}
