Skip to content

Commit 3c2e851

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Fix for crash when function expression has empty body.
FAILURE: _(:<>(o;?(a(@([ [NoSuchMethodError: The getter 'contextType' was called on null. Receiver: null Tried calling: contextType, #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) flutter#1 FunctionExpressionResolver.resolve (package:analyzer/src/dart/resolver/function_expression_resolver.dart:72:35) flutter#2 ResolverVisitor.visitFunctionExpression (package:analyzer/src/generated/resolver.dart:1424:37) flutter#3 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:5004:49) flutter#4 ResolverVisitor.visitConditionalExpression (package:analyzer/src/generated/resolver.dart:1068:16) #5 ConditionalExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:2265:15) flutter#6 DefaultFormalParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:3008:20) flutter#7 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1710:10) flutter#8 UnifyingAstVisitor.visitDefaultFormalParameter (package:analyzer/dart/ast/visitor.dart:3198:65) flutter#9 ResolverVisitor.visitDefaultFormalParameter (package:analyzer/src/generated/resolver.dart:1206:11) flutter#10 DefaultFormalParameterImpl.accept (package:analyzer/src/dart/ast/ast.dart:3003:15) flutter#11 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7611:20) flutter#12 FormalParameterListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4493:17) flutter#13 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1710:10) flutter#14 UnifyingAstVisitor.visitFormalParameterList (package:analyzer/dart/ast/visitor.dart:3258:59) flutter#15 ScopedVisitor.visitFormalParameterList (package:analyzer/src/generated/resolver.dart:2684:11) flutter#16 FormalParameterListImpl.accept (package:analyzer/src/dart/ast/ast.dart:4489:49) flutter#17 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:5009:18) flutter#18 FunctionExpressionResolver.resolve (package:analyzer/src/dart/resolver/function_expression_resolver.dart:65:10) flutter#19 ResolverVisitor.visitFunctionExpression (package:analyzer/src/generated/resolver.dart:1415:35) flutter#20 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:5004:49) #21 FunctionDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4873:26) #22 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1710:10) #23 UnifyingAstVisitor.visitFunctionDeclaration (package:analyzer/dart/ast/visitor.dart:3271:59) #24 ScopedVisitor.visitFunctionDeclarationInScope (package:analyzer/src/generated/resolver.dart:2749:11) #25 ResolverVisitor.visitFunctionDeclarationInScope (package:analyzer/src/generated/resolver.dart:1405:11) #26 ScopedVisitor.visitFunctionDeclaration (package:analyzer/src/generated/resolver.dart:2742:7) #27 ResolverVisitor.visitFunctionDeclaration (package:analyzer/src/generated/resolver.dart:1374:11) #28 FunctionDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:4866:49) #29 ResolverVisitor.visitCompilationUnit (package:analyzer/src/generated/resolver.dart:1055:23) #30 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2134:49) #31 LibraryAnalyzer._resolveFile (package:analyzer/src/dart/analysis/library_analyzer.dart:706:10) Change-Id: I62cde978d075bbafacb1b429e87049ca5d54d268 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175907 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent bb5b37e commit 3c2e851

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class FunctionExpressionResolver {
6969
if (_flowAnalysis.flow != null && !isFunctionDeclaration) {
7070
var bodyContext = BodyInferenceContext.of(node.body);
7171
_resolver.checkForBodyMayCompleteNormally(
72-
returnType: bodyContext.contextType,
72+
returnType: bodyContext?.contextType,
7373
body: body,
7474
errorNode: body,
7575
);

pkg/analyzer/lib/src/generated/resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1166,8 +1166,8 @@ class ResolverVisitor extends ScopedVisitor {
11661166
super.visitConstructorDeclaration(node);
11671167

11681168
if (_flowAnalysis != null) {
1169-
var bodyContext = BodyInferenceContext.of(node.body);
11701169
if (node.factoryKeyword != null) {
1170+
var bodyContext = BodyInferenceContext.of(node.body);
11711171
checkForBodyMayCompleteNormally(
11721172
returnType: bodyContext?.contextType,
11731173
body: node.body,

pkg/analyzer/test/generated/invalid_code_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,12 @@ class B {
389389
@reflectiveTest
390390
class InvalidCodeWithNullSafetyTest extends PubPackageResolutionTest
391391
with WithNullSafetyMixin {
392+
test_functionExpression_emptyBody() async {
393+
await _assertCanBeAnalyzed(r'''
394+
var v = <T>();
395+
''');
396+
}
397+
392398
test_issue_40837() async {
393399
await _assertCanBeAnalyzed('''
394400
class A {

0 commit comments

Comments
 (0)