// 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;

import 'dart:math' as math;

class Trace {
  List<Frame> frames = /*@ typeArgs=Frame* */ [];
}

class Frame {
  String location = '';
}

main() {
  List<Trace> traces = /*@ typeArgs=Trace* */ [];
  var /*@ type=int* */ longest =
      traces. /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
          /*@ returnType=int* */ (/*@ type=Trace* */ trace) {
    return trace. /*@target=Trace.frames*/ frames
        . /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
            /*@ returnType=int* */ (/*@ type=Frame* */ frame) => frame
                . /*@target=Frame.location*/ location
                . /*@target=String.length*/ length)
        . /*@ typeArgs=int* */ /*@target=Iterable.fold*/ fold(0, math.max);
  }). /*@ typeArgs=int* */ /*@target=Iterable.fold*/ fold(0, math.max);
}
