| Index: pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| index 9e11a6200dccf143b3b04276fea6f17753d23d25..72c7384e2b477be38b091f3b401d7983f2ceedc2 100644
|
| --- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| @@ -1150,6 +1150,63 @@ main() {
|
| }
|
| ''';
|
| testChecker('infer downwards', {'/main.dart': code});
|
| +
|
| + testChecker('infer if value types match context', {'/main.dart': r'''
|
| +class DartType {}
|
| +typedef void Asserter<T>(T type);
|
| +typedef Asserter<T> AsserterBuilder<S, T>(S arg);
|
| +
|
| +Asserter<DartType> _isInt;
|
| +Asserter<DartType> _isString;
|
| +
|
| +abstract class C {
|
| + static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
|
| + static AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf;
|
| +
|
| + AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
|
| + AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
|
| +
|
| + method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {
|
| + assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertBOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertCOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertEOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + }
|
| +}
|
| +
|
| +abstract class G<T> {
|
| + AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
|
| + AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
|
| +
|
| + method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {
|
| + assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + this.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + this.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertEOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + }
|
| +}
|
| +
|
| +AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
|
| +AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf;
|
| +
|
| +main() {
|
| + AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
|
| + assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertBOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + assertCOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + C.assertBOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + C.assertCOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| +
|
| + C c;
|
| + c.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + c.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| +
|
| + G<int> g;
|
| + g.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| + g.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
|
| +}
|
| + '''});
|
| });
|
|
|
| group('downwards inference on function arguments', () {
|
|
|