CQ. Fix NPE in DartUnitOccurrencesComputerVisitor when unresolved import prefix.
Saw a crash in logs:
Null check operator used on a null value
package:analysis_server/src/domains/analysis/occurrences_dart.dart 253:32 DartUnitOccurrencesComputerVisitor.visitImportPrefixReference
package:analyzer/src/dart/ast/ast.dart 13353:15 ImportPrefixReferenceImpl.accept
package:analyzer/src/dart/ast/ast.dart 16897:19 NamedTypeImpl.visitChildren
package:analyzer/dart/ast/visitor.g.dart 474:10 GeneralizingAstVisitor.visitNode
package:analyzer/dart/ast/visitor.g.dart 687:50 GeneralizingAstVisitor.visitTypeAnnotation
package:analyzer/dart/ast/visitor.g.dart 456:40 GeneralizingAstVisitor.visitNamedType
package:analysis_server/src/domains/analysis/occurrences_dart.dart 282:11 DartUnitOccurrencesComputerVisitor.visitNamedType
Change-Id: I2b06026dad093187c74b4e1b6c7371aaf648a480
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/456121
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
index 99d83c7..0e47149 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
@@ -250,7 +250,9 @@
@override
void visitImportPrefixReference(ImportPrefixReference node) {
- _addOccurrence(node.element!, node.name);
+ if (node.element case var element?) {
+ _addOccurrence(element, node.name);
+ }
super.visitImportPrefixReference(node);
}
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index 43d8347..4652d6b 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -646,6 +646,15 @@
''');
}
+ Future<void> test_prefix_null() async {
+ // Note, we use `core` just to have some prefix.
+ // The actual check is no crash on unresolved `prefix`.
+ await assertOccurrences(kind: ElementKind.PREFIX, '''
+import 'dart:core' as /*[0*/core/*0]*/;
+void f(prefix.A? _, /*[1*/core.int/*1]*/ _) {}
+''');
+ }
+
Future<void> test_prefix_wildcard() async {
// Ensure no crash.
await assertOccurrences(kind: ElementKind.PREFIX, '''