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

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

Issue 2176693003: Issue a strong mode warning for type inference that is unsafe with AST-based summaries. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months 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
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 9738a9b2cb6d2a622bae5cb22a3dc490db08e303..076c4a298fb3c07605918648abeeedb3bfff49f0 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -62,7 +62,7 @@ main() {
var mainUnit = checkFile(r'''
import 'dart:async';
import 'dart:math' show Random;
-var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async {
if (new Random().nextBool()) {
return new Future<int>.value(1);
} else {
@@ -101,7 +101,7 @@ main() {
var mainUnit = checkFile(r'''
import 'dart:async';
import 'dart:math' show Random;
-var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async {
if (new Random().nextBool()) {
return 1;
} else {
@@ -140,7 +140,7 @@ main() {
var mainUnit = checkFile(r'''
import 'dart:async';
import 'dart:math' show Random;
-var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async {
if (new Random().nextBool()) {
return new Future<int>.value(1);
} else {
@@ -175,7 +175,7 @@ main() {
void test_blockBodiedLambdas_asyncStar_topLevel() {
var mainUnit = checkFile(r'''
import 'dart:async';
-var f = /*info:INFERRED_TYPE_CLOSURE*/() async* {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async* {
yield 1;
Stream<double> s;
yield* s;
@@ -198,7 +198,7 @@ test1() {
void test_blockBodiedLambdas_basic_topLevel() {
checkFile(r'''
List<int> o;
-var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) { return x + 1; });
+var y = o.map(/*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/(x) { return x + 1; });
Iterable<int> z = y;
''');
}
@@ -223,7 +223,7 @@ main() async {
void test_blockBodiedLambdas_doesNotInferBottom_async_topLevel() {
var mainUnit = checkFile(r'''
import 'dart:async';
-var f = () async { return null; };
+var f = /*warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async { return null; };
''');
var f = mainUnit.topLevelVariables[0];
expect(f.type.toString(), '() → Future<dynamic>');
@@ -249,7 +249,7 @@ main() async {
void test_blockBodiedLambdas_doesNotInferBottom_asyncStar_topLevel() {
var mainUnit = checkFile(r'''
import 'dart:async';
-var f = () async* { yield null; };
+var f = /*warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() async* { yield null; };
''');
var f = mainUnit.topLevelVariables[0];
expect(f.type.toString(), '() → Stream<dynamic>');
@@ -304,7 +304,7 @@ main() {
void test_blockBodiedLambdas_doesNotInferBottom_syncStar_topLevel() {
var mainUnit = checkFile(r'''
-var f = () sync* { yield null; };
+var f = /*warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() sync* { yield null; };
''');
var f = mainUnit.topLevelVariables[0];
expect(f.type.toString(), '() → Iterable<dynamic>');
@@ -357,7 +357,7 @@ test2() {
checkFile(r'''
import 'dart:math' show Random;
List<num> o;
-var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) {
+var y = o.map(/*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/(x) {
if (new Random().nextBool()) {
return x.toInt() + 1;
} else {
@@ -388,7 +388,7 @@ main() {
void test_blockBodiedLambdas_nestedLambdas_topLevel() {
// Original feature request: https://github.com/dart-lang/sdk/issues/25487
var mainUnit = checkFile(r'''
-var f = /*info:INFERRED_TYPE_CLOSURE*/() {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() {
return /*info:INFERRED_TYPE_CLOSURE*/(int x) { return 2.0 * x; };
};
''');
@@ -440,7 +440,7 @@ main() {
void test_blockBodiedLambdas_syncStar_topLevel() {
var mainUnit = checkFile(r'''
-var f = /*info:INFERRED_TYPE_CLOSURE*/() sync* {
+var f = /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() sync* {
yield 1;
yield* /*info:INFERRED_TYPE_LITERAL*/[3, 4.0];
};
@@ -3857,6 +3857,57 @@ class C {
// No type should be inferred for a because there is a circular reference
// between a and c.
}
+
+ void test_unsafeBlockClosureInference_constructorCall_explicitDynamicParam() {
+ var mainUnit = checkFile('''
+class C<T> {
+ C(T x());
+}
+var v = new C<dynamic>(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
+''');
+ var v = mainUnit.topLevelVariables[0];
+ expect(v.name, 'v');
+ expect(v.type.toString(), 'C<dynamic>');
+ }
+
+ void test_unsafeBlockClosureInference_constructorCall_explicitTypeParam() {
+ var mainUnit = checkFile('''
+class C<T> {
+ C(T x());
+}
+var v = new C<int>(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
+''');
+ var v = mainUnit.topLevelVariables[0];
+ expect(v.name, 'v');
+ expect(v.type.toString(), 'C<int>');
+ }
+
+ void test_unsafeBlockClosureInference_constructorCall_implicitTypeParam() {
+ var mainUnit = checkFile('''
+class C<T> {
+ C(T x());
+}
+var v = /*info:INFERRED_TYPE_ALLOCATION*/new C(
+ /*info:INFERRED_TYPE_CLOSURE,warning:UNSAFE_BLOCK_CLOSURE_INFERENCE*/() {
+ return 1;
+ });
+''');
+ var v = mainUnit.topLevelVariables[0];
+ expect(v.name, 'v');
+ expect(v.type.toString(), 'C<int>');
+ }
+
+ void test_unsafeBlockClosureInference_constructorCall_noTypeParam() {
+ var mainUnit = checkFile('''
+class C {
+ C(x());
+}
+var v = new C(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
+''');
+ var v = mainUnit.topLevelVariables[0];
+ expect(v.name, 'v');
+ expect(v.type.toString(), 'C');
+ }
}
@reflectiveTest

Powered by Google App Engine
This is Rietveld 408576698