// Copyright (c) 2018, 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*/

void test() {
  List<dynamic> l = /*@ typeArgs=dynamic */ [1, "hello"];
  List<String> l2 = l
      . /*@target=Iterable::map*/ /*@ typeArgs=String* */ map(
          /*@ returnType=String* */ (dynamic element) =>
              element. /*@target=Object::toString*/ toString())
      . /*@target=Iterable::toList*/ toList();
}

void main() {}
