|  | // 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; | 
|  |  | 
|  | bool f() => null; | 
|  |  | 
|  | // Even though x, y, and z form a strongly connected component (each depends on | 
|  | // all the others), the circularity is calculated based on the first problematic | 
|  | // dependency of each field.  So x's first problematic dependency is y, and y's | 
|  | // first problematic dependency is x; therefore x and y are considered to have a | 
|  | // circularity, and for error recovery their type is set to `dynamic`. | 
|  | // Thereafter, z infers without problems. | 
|  |  | 
|  | var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z; | 
|  | var y = /*@ returnType=invalid-type */ () => x; | 
|  | var z = /*@ returnType=invalid-type */ () => x; | 
|  |  | 
|  | main() {} |