Skip to content

Migration: Expressions in annotations don't get control flow instance, cause NPE #42295

@MichaelRFairhurst

Description

@MichaelRFairhurst
class Foo {                                                                      
  const Foo(bool x);                                                             
}                                                                                
                                                                                 
@Foo(true)                                                                       
int x;

Boolean literals can affect control flow, so EdgeBuilder tries to inform control flow about this true literal, but we have not created an instance of control flow, so it crashes.

The solution is to create control flow for annotation expressions.

NoSuchMethodError: The method 'booleanLiteral' was called on null.
Receiver: null
Tried calling: booleanLiteral(Instance of 'BooleanLiteralImpl', true)

#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      EdgeBuilder.visitBooleanLiteral (package:nnbd_migration/src/edge_builder.dart:474:19)
#2      BooleanLiteralImpl.accept (package:analyzer/src/dart/ast/ast.dart:1116:49)
#3      EdgeBuilder._dispatch (package:nnbd_migration/src/edge_builder.dart:2038:22)
#4      EdgeBuilder.visitNode (package:nnbd_migration/src/edge_builder.dart:1198:9)
#5      GeneralizingAstVisitor.visitArgumentList (package:analyzer/dart/ast/visitor.dart:140:45)
#6      ArgumentListImpl.accept (package:analyzer/src/dart/ast/ast.dart:359:49)
#7      EdgeBuilder._dispatch (package:nnbd_migration/src/edge_builder.dart:2038:22)
#8      EdgeBuilder.visitNode (package:nnbd_migration/src/edge_builder.dart:1198:9)
#9      GeneralizingAstVisitor.visitAnnotation (package:analyzer/dart/ast/visitor.dart:137:41)
#10     CompletenessTracker.visitAnnotation (package:nnbd_migration/src/utilities/completeness_tracker.dart:26:18)
#11     AnnotationImpl.accept (package:analyzer/src/dart/ast/ast.dart:284:49)
#12     EdgeBuilder._dispatch (package:nnbd_migration/src/edge_builder.dart:2038:22)
#13     EdgeBuilder.visitNode (package:nnbd_migration/src/edge_builder.dart:1198:9)
#14     GeneralizingAstVisitor.visitAnnotatedNode (package:analyzer/dart/ast/visitor.dart:134:47)
#15     GeneralizingAstVisitor.visitDeclaration (package:analyzer/dart/ast/visitor.dart:227:43)
#16     GeneralizingAstVisitor.visitCompilationUnitMember (package:analyzer/dart/ast/visitor.dart:202:7)
#17     GeneralizingAstVisitor.visitTopLevelVariableDeclaration (package:analyzer/dart/ast/visitor.dart:551:7)
#18     TopLevelVariableDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:9866:15)
#19     EdgeBuilder._dispatch (package:nnbd_migration/src/edge_builder.dart:2038:22)
#20     EdgeBuilder.visitNode (package:nnbd_migration/src/edge_builder.dart:1198:9)
#21     GeneralizingAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:199:51)
#22     CompletenessTracker.visitCompilationUnit.<anonymous closure> (package:nnbd_migration/src/utilities/completeness_tracker.dart:48:24)
#23     PermissiveModeVisitor.reportExceptionsIfPermissive (package:nnbd_migration/src/utilities/permissive_mode.dart:26:24)
#24     CompletenessTracker.visitCompilationUnit (package:nnbd_migration/src/utilities/completeness_tracker.dart:39:5)
#25     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2125:49)
#26     NullabilityMigrationImpl.processInput (package:nnbd_migration/src/nullability_migration_impl.dart:191:12)
#27     NonNullableFix.processUnit (package:nnbd_migration/src/front_end/non_nullable_fix.dart:150:19)
#28     _FixCodeProcessor.runLaterPhases.<anonymous closure> (package:nnbd_migration/migration_cli.dart:923:21)
#29     _FixCodeProcessor.processResources (package:nnbd_migration/migration_cli.dart:869:30)
<asynchronous suspension>
#30     _FixCodeProcessor.runLaterPhases (package:nnbd_migration/migration_cli.dart:921:13)
#31     MigrationCli.run.<anonymous closure> (package:nnbd_migration/migration_cli.dart:445:45)
<asynchronous suspension>
#32     MigrationCli.run.<anonymous closure> (package:nnbd_migration/migration_cli.dart)
#33     MigrationCli._withProgress (package:nnbd_migration/migration_cli.dart:709:21)
#34     MigrationCli.run (package:nnbd_migration/migration_cli.dart:420:11)
#35     main (file:///home/mfairhurst/projects/dart/sdk/pkg/nnbd_migration/bin/migrate.dart:18:39)
#36     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299:32)
#37     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

Metadata

Metadata

Assignees

Labels

P1A high priority bug; for example, a single project is unusable or has many test failuresarea-migration (deprecated)Deprecated: this label is no longer actively used (was: issues with the `dart migrate` tool).type-bugIncorrect behavior (everything from a crash to more subtle misbehavior)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions