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 |