Fix for crash in _DartNavigationComputerVisitor._addUriDirectiveRegion when part has invalid URI.

R=brianwilkerson@google.com

Change-Id: Ia6c62c344cd195449168e5971165a3d37ffc7f67
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97280
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
index d8fbb56..a04b33f 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
@@ -356,8 +356,8 @@
    * then add the navigation region from the [node] to the [element].
    */
   void _addUriDirectiveRegion(UriBasedDirective node, Element element) {
-    if (element != null) {
-      Source source = element.source;
+    Source source = element?.source;
+    if (source != null) {
       if (resourceProvider.getResource(source.fullName).exists) {
         computer._addRegionForNode(node.uri, element);
       }
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 7a7aa0f..4f34392 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -855,6 +855,14 @@
     assertHasFileTarget(unitFile, 0, 0);
   }
 
+  test_string_part_invalidUri() async {
+    addTestFile('''
+part ":[invalid]";
+''');
+    await prepareNavigation();
+    assertNoRegionString('":[invalid]"');
+  }
+
   Future<void> test_string_part_unresolvedUri() async {
     addTestFile('''
 library lib;