From 5efe30d4582b25f99fa0aee52abe11bc9b3660ff Mon Sep 17 00:00:00 2001 From: Brian Wilkerson Date: Tue, 8 Sep 2015 13:14:36 -0700 Subject: [PATCH] Stop propagating return types for top-level function declarations R=paulberry@google.com, scheglov@google.com Review URL: https://codereview.chromium.org//1309243007 . --- .../src/generated/static_type_analyzer.dart | 4 +- .../generated/incremental_resolver_test.dart | 35 ++++++++++ .../test/generated/resolver_test.dart | 66 ------------------- 3 files changed, 38 insertions(+), 67 deletions(-) diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart index bffeaadc6ec..3da6e37dde3 100644 --- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart +++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart @@ -328,7 +328,9 @@ class StaticTypeAnalyzer extends SimpleAstVisitor { node.element as ExecutableElementImpl; functionElement.returnType = _computeStaticReturnTypeOfFunctionDeclaration(node); - _recordPropagatedTypeOfFunction(functionElement, function.body); + if (node.parent is FunctionDeclarationStatement) { + _recordPropagatedTypeOfFunction(functionElement, function.body); + } _recordStaticType(function, functionElement.type); return null; } diff --git a/pkg/analyzer/test/generated/incremental_resolver_test.dart b/pkg/analyzer/test/generated/incremental_resolver_test.dart index a08ede73fdf..ccb5af4ce0e 100644 --- a/pkg/analyzer/test/generated/incremental_resolver_test.dart +++ b/pkg/analyzer/test/generated/incremental_resolver_test.dart @@ -2346,6 +2346,41 @@ class A { '''); } + void test_true_functionExpression() { + _assertMatches(r''' +import 'dart:async'; + +class A { + Future mmm() async { + return 42; + } + + a() { + mmm().then((p1) { + return p1.toString(); + }).then((p2) { + print(p2); + }); + } +} +''', r'''import 'dart:async'; + +class A { + Future mmm() async { + return 42; + } + + a() { + mmm().then((int p1) { + return p1.toString(); + }).then((String p2) { + print(p2); + }); + } +} +'''); + } + void test_true_functionTypeAlias_list_reorder() { _assertMatches( r''' diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart index 6463a7bd24a..fd2b0166466 100644 --- a/pkg/analyzer/test/generated/resolver_test.dart +++ b/pkg/analyzer/test/generated/resolver_test.dart @@ -13443,72 +13443,6 @@ f1(x) { typeProvider.stringType); } - void test_propagatedReturnType_function_hasReturnType_returnsNull() { - String code = r''' -String f() => null; -main() { - var v = f(); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.stringType); - } - - void test_propagatedReturnType_function_lessSpecificStaticReturnType() { - String code = r''' -Object f() => 42; -main() { - var v = f(); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.intType); - } - - void test_propagatedReturnType_function_moreSpecificStaticReturnType() { - String code = r''' -int f(v) => (v as num); -main() { - var v = f(3); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.intType); - } - - void test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns() { - String code = r''' -f() { - if (true) return 0; - return 1.0; -} -main() { - var v = f(); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.numType); - } - - void test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn() { - String code = r''' -f() { - var z = 42; - return z; -} -main() { - var v = f(); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.intType); - } - - void test_propagatedReturnType_function_noReturnTypeName_expressionBody() { - String code = r''' -f() => 42; -main() { - var v = f(); -}'''; - _assertPropagatedAssignedType( - code, typeProvider.dynamicType, typeProvider.intType); - } - void test_propagatedReturnType_localFunction() { String code = r''' main() {