| OLD | NEW | 
|---|
| 1 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 /*@testedFeatures=inference*/ | 5 /*@testedFeatures=inference*/ | 
| 6 library test; | 6 library test; | 
| 7 | 7 | 
| 8 import 'dart:async'; | 8 import 'dart:async'; | 
| 9 | 9 | 
| 10 class MyFuture<T> implements Future<T> { | 10 class MyFuture<T> implements Future<T> { | 
| 11   MyFuture() {} | 11   MyFuture() {} | 
| 12   MyFuture.value(T x) {} | 12   MyFuture.value(T x) {} | 
| 13   dynamic noSuchMethod(invocation); | 13   dynamic noSuchMethod(invocation); | 
| 14   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null; | 14   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null; | 
| 15 } | 15 } | 
| 16 | 16 | 
| 17 void main() { | 17 void main() { | 
| 18   MyFuture f; | 18   MyFuture f; | 
| 19   Future<int> t1 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 19   Future<int> t1 = /*@promotedType=none*/ f | 
| 20       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => | 20       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
| 21           await new Future<int>.value(3)); | 21           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => | 
| 22   Future<int> t2 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 22               await new Future<int>.value(3)); | 
| 23       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 23   Future<int> t2 = /*@promotedType=none*/ f | 
|  | 24       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
|  | 25           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 
| 24     return await new Future<int>.value(3); | 26     return await new Future<int>.value(3); | 
| 25   }); | 27   }); | 
| 26   Future<int> t3 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 28   Future<int> t3 = /*@promotedType=none*/ f | 
| 27       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => 3); | 29       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
| 28   Future<int> t4 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 30           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => 3); | 
| 29       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 31   Future<int> t4 = /*@promotedType=none*/ f | 
|  | 32       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
|  | 33           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 
| 30     return 3; | 34     return 3; | 
| 31   }); | 35   }); | 
| 32   Future<int> t5 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 36   Future<int> t5 = /*@promotedType=none*/ f | 
| 33       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) => | 37       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
| 34           new Future<int>.value(3)); | 38           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) => | 
| 35   Future<int> t6 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 39               new Future<int>.value(3)); | 
| 36       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) { | 40   Future<int> t6 = /*@promotedType=none*/ f | 
|  | 41       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
|  | 42           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) { | 
| 37     return new Future<int>.value(3); | 43     return new Future<int>.value(3); | 
| 38   }); | 44   }); | 
| 39   Future<int> t7 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 45   Future<int> t7 = /*@promotedType=none*/ f | 
| 40       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => | 46       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
| 41           new Future<int>.value(3)); | 47           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async => | 
| 42   Future<int> t8 = /*@promotedType=none*/ f. /*@typeArgs=int*/ then( | 48               new Future<int>.value(3)); | 
| 43       /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 49   Future<int> t8 = /*@promotedType=none*/ f | 
|  | 50       . /*@typeArgs=int*/ /*@target=MyFuture::then*/ then( | 
|  | 51           /*@returnType=Future<int>*/ (/*@type=dynamic*/ _) async { | 
| 44     return new Future<int>.value(3); | 52     return new Future<int>.value(3); | 
| 45   }); | 53   }); | 
| 46 } | 54 } | 
| OLD | NEW | 
|---|