Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Unified Diff: pkg/analyzer/test/src/task/strong/inferred_type_test.dart

Issue 1513603002: fix #25182, downwards inference for calls to fields/getters/vars/params/locals (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/resolver.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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', () {
« no previous file with comments | « pkg/analyzer/lib/src/generated/resolver.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698