From 57fa20a8a591d943ec8c2440910b72870eedfa59 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 14 Dec 2020 05:58:23 +0000 Subject: [PATCH] Fix crash for no flow in annotation. FAILURE: class=class<@((){x: [NoSuchMethodError: The method 'labeledStatement_begin' was called on null. Receiver: null Tried calling: labeledStatement_begin(Instance of 'LabeledStatementImpl'), #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) #1 FlowAnalysisHelper.labeledStatement_enter (package:analyzer/src/dart/resolver/flow_analysis_visitor.dart:196:10) #2 ResolverVisitor.visitLabeledStatement (package:analyzer/src/generated/resolver.dart:1636:20) #3 LabeledStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:6520:49) #4 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7611:20) #5 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1087:17) #6 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1749:10) #7 UnifyingAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3143:31) #8 ScopedVisitor.visitBlock. (package:analyzer/src/generated/resolver.dart:2473:13) #9 ScopedVisitor._withDeclaredLocals (package:analyzer/src/generated/resolver.dart:3067:8) #10 ScopedVisitor.visitBlock (package:analyzer/src/generated/resolver.dart:2472:5) #11 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1083:49) #12 BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1042:13) #13 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1749:10) #14 UnifyingAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:3146:55) #15 ScopedVisitor.visitBlockFunctionBody (package:analyzer/src/generated/resolver.dart:2482:13) #16 ResolverVisitor.visitBlockFunctionBody (package:analyzer/src/generated/resolver.dart:957:13) #17 BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1038:49) #18 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:5010:12) #19 FunctionExpressionResolver.resolve (package:analyzer/src/dart/resolver/function_expression_resolver.dart:65:10) #20 ResolverVisitor.visitFunctionExpression (package:analyzer/src/generated/resolver.dart:1460:37) #21 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:5004:49) #22 ResolverVisitor.visitArgumentList (package:analyzer/src/generated/resolver.dart:887:20) #23 ArgumentListImpl.accept (package:analyzer/src/dart/ast/ast.dart:355:49) #24 AnnotationResolver.resolve (package:analyzer/src/dart/resolver/annotation_resolver.dart:35:21) #25 ResolverVisitor.visitAnnotation (package:analyzer/src/generated/resolver.dart:823:30) #26 AnnotationImpl.accept (package:analyzer/src/dart/ast/ast.dart:280:49) #27 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7611:20) #28 AnnotatedNodeImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:148:17) #29 TypeParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:10298:11) #30 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1749:10) #31 UnifyingAstVisitor.visitTypeParameter (package:analyzer/dart/ast/visitor.dart:3475:47) #32 TypeParameterImpl.accept (package:analyzer/src/dart/ast/ast.dart:10294:49) #33 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7611:20) #34 TypeParameterListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:10346:21) #35 ResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:1749:10) #36 UnifyingAstVisitor.visitTypeParameterList (package:analyzer/dart/ast/visitor.dart:3478:55) #37 TypeParameterListImpl.accept (package:analyzer/src/dart/ast/ast.dart:10342:49) #38 ScopedVisitor.visitClassDeclarationInScope (package:analyzer/src/generated/resolver.dart:2533:26) #39 ScopedVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:2521:7) #40 ResolverVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:1015:13) #41 ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1536:49) #42 ResolverVisitor.visitCompilationUnit (package:analyzer/src/generated/resolver.dart:1091:23) #43 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2134:49) #44 LibraryAnalyzer._resolveFile (package:analyzer/src/dart/analysis/library_analyzer.dart:706:10) #45 LibraryAnalyzer.analyzeSync. (package:analyzer/src/dart/analysis/library_analyzer.dart:139:7) Change-Id: I13a10d2c127528aa9166e82a5ae535ddbbb8a022 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175943 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../lib/src/dart/resolver/flow_analysis_visitor.dart | 4 ++++ pkg/analyzer/test/generated/invalid_code_test.dart | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart index 0fab9d39837b7..6f59dedea07ef 100644 --- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart +++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart @@ -193,10 +193,14 @@ class FlowAnalysisHelper { } void labeledStatement_enter(LabeledStatement node) { + if (flow == null) return; + flow.labeledStatement_begin(node); } void labeledStatement_exit(LabeledStatement node) { + if (flow == null) return; + flow.labeledStatement_end(); } diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart index 21c3cc9f5c32f..1ba274c5482fa 100644 --- a/pkg/analyzer/test/generated/invalid_code_test.dart +++ b/pkg/analyzer/test/generated/invalid_code_test.dart @@ -395,6 +395,13 @@ var v = (); '''); } + test_inAnnotation_noFlow_labeledStatement() async { + await _assertCanBeAnalyzed(''' +@A(() { label: }) +typedef F = void Function(); +'''); + } + test_inDefaultValue_noFlow_ifExpression() async { await _assertCanBeAnalyzed(''' typedef void F({a = [if (true) 0]});