Version 2.14.0-315.0.dev

Merge commit '460e00a6a6c2574ff222a6e772f7ab43a012936d' into 'dev'
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 94a7e01..e6b028b 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -736,74 +736,69 @@
     analysisServer.getExtensionCacheFor(result)?.cacheFromResult(result);
 
     var unit = result.unit;
-    if (unit != null) {
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.HIGHLIGHTS, path)) {
-        _runDelayed(() {
-          _notificationManager.recordHighlightRegions(
-              NotificationManager.serverId,
-              path,
-              _computeHighlightRegions(unit));
-        });
-      }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.NAVIGATION, path)) {
-        _runDelayed(() {
-          _notificationManager.recordNavigationParams(
-              NotificationManager.serverId,
-              path,
-              _computeNavigationParams(path, unit));
-        });
-      }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.OCCURRENCES, path)) {
-        _runDelayed(() {
-          _notificationManager.recordOccurrences(
-              NotificationManager.serverId, path, _computeOccurrences(unit));
-        });
-      }
-      // if (analysisServer._hasAnalysisServiceSubscription(
-      //     AnalysisService.OUTLINE, path)) {
-      //   _runDelayed(() {
-      //     // TODO(brianwilkerson) Change NotificationManager to store params
-      //     // so that fileKind and libraryName can be recorded / passed along.
-      //     notificationManager.recordOutlines(NotificationManager.serverId, path,
-      //         _computeOutlineParams(path, unit, result.lineInfo));
-      //   });
-      // }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.CLOSING_LABELS, path)) {
-        _runDelayed(() {
-          sendAnalysisNotificationClosingLabels(
-              analysisServer, path, result.lineInfo, unit);
-        });
-      }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.FOLDING, path)) {
-        _runDelayed(() {
-          sendAnalysisNotificationFolding(
-              analysisServer, path, result.lineInfo, unit);
-        });
-      }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.OUTLINE, path)) {
-        _runDelayed(() {
-          sendAnalysisNotificationOutline(analysisServer, result);
-        });
-      }
-      if (analysisServer._hasAnalysisServiceSubscription(
-          AnalysisService.OVERRIDES, path)) {
-        _runDelayed(() {
-          sendAnalysisNotificationOverrides(analysisServer, path, unit);
-        });
-      }
-      if (analysisServer._hasFlutterServiceSubscription(
-          FlutterService.OUTLINE, path)) {
-        _runDelayed(() {
-          sendFlutterNotificationOutline(analysisServer, result);
-        });
-      }
-      // TODO(scheglov) Implement notifications for AnalysisService.IMPLEMENTED.
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.HIGHLIGHTS, path)) {
+      _runDelayed(() {
+        _notificationManager.recordHighlightRegions(
+            NotificationManager.serverId, path, _computeHighlightRegions(unit));
+      });
+    }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.NAVIGATION, path)) {
+      _runDelayed(() {
+        _notificationManager.recordNavigationParams(
+            NotificationManager.serverId,
+            path,
+            _computeNavigationParams(path, unit));
+      });
+    }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.OCCURRENCES, path)) {
+      _runDelayed(() {
+        _notificationManager.recordOccurrences(
+            NotificationManager.serverId, path, _computeOccurrences(unit));
+      });
+    }
+    // if (analysisServer._hasAnalysisServiceSubscription(
+    //     AnalysisService.OUTLINE, path)) {
+    //   _runDelayed(() {
+    //     // TODO(brianwilkerson) Change NotificationManager to store params
+    //     // so that fileKind and libraryName can be recorded / passed along.
+    //     notificationManager.recordOutlines(NotificationManager.serverId, path,
+    //         _computeOutlineParams(path, unit, result.lineInfo));
+    //   });
+    // }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.CLOSING_LABELS, path)) {
+      _runDelayed(() {
+        sendAnalysisNotificationClosingLabels(
+            analysisServer, path, result.lineInfo, unit);
+      });
+    }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.FOLDING, path)) {
+      _runDelayed(() {
+        sendAnalysisNotificationFolding(
+            analysisServer, path, result.lineInfo, unit);
+      });
+    }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.OUTLINE, path)) {
+      _runDelayed(() {
+        sendAnalysisNotificationOutline(analysisServer, result);
+      });
+    }
+    if (analysisServer._hasAnalysisServiceSubscription(
+        AnalysisService.OVERRIDES, path)) {
+      _runDelayed(() {
+        sendAnalysisNotificationOverrides(analysisServer, path, unit);
+      });
+    }
+    if (analysisServer._hasFlutterServiceSubscription(
+        FlutterService.OUTLINE, path)) {
+      _runDelayed(() {
+        sendFlutterNotificationOutline(analysisServer, result);
+      });
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index deca868..46408c8 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -17,17 +17,9 @@
 
   DartUnitOutlineComputer(this.resolvedUnit, {this.withBasicFlutter = false});
 
-  CompilationUnit get _unit {
-    var unit = resolvedUnit.unit;
-    if (unit == null) {
-      throw StateError('DartUnitOutlineComputer created with invalid result');
-    }
-    return unit;
-  }
-
   /// Returns the computed outline, not `null`.
   Outline compute() {
-    var unit = _unit;
+    var unit = resolvedUnit.unit;
     var unitContents = <Outline>[];
     for (var unitMember in unit.declarations) {
       if (unitMember is ClassDeclaration) {
@@ -325,7 +317,7 @@
   }
 
   Outline _newUnitOutline(List<Outline> unitContents) {
-    var unit = _unit;
+    var unit = resolvedUnit.unit;
     var element = Element(
         ElementKind.COMPILATION_UNIT, '<unit>', Element.makeFlags(),
         location: _getLocationNode(unit));
diff --git a/pkg/analysis_server/lib/src/computer/import_elements_computer.dart b/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
index d6c013d..a29230f 100644
--- a/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
+++ b/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
@@ -32,11 +32,6 @@
   Future<SourceChange> createEdits(
       List<ImportedElements> importedElementsList) async {
     var unit = libraryResult.unit;
-    if (unit == null) {
-      // We should never reach this point because the libraryResult should be
-      // valid.
-      return SourceChange('');
-    }
     var filteredImportedElements =
         _filterImportedElements(importedElementsList);
     var libraryElement = libraryResult.libraryElement;
@@ -279,11 +274,6 @@
   /// Partially copied from DartFileEditBuilderImpl.
   _InsertionDescription _getInsertionDescription(String importUri) {
     var unit = libraryResult.unit;
-    if (unit == null) {
-      // We should never reach this point because the libraryResult should be
-      // valid.
-      return _InsertionDescription(0, after: 2);
-    }
     LibraryDirective? libraryDirective;
     var importDirectives = <ImportDirective>[];
     var otherDirectives = <Directive>[];
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 2e2bc5d..df5d9f6 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -63,7 +63,7 @@
       server.sendResponse(Response.fileNotAnalyzed(request, file));
       return;
     }
-    var unit = result.unit!;
+    var unit = result.unit;
 
     // Prepare the hovers.
     var hovers = <HoverInformation>[];
@@ -105,7 +105,7 @@
       elements = <ImportedElements>[];
     } else {
       elements =
-          ImportedElementsComputer(result.unit!, params.offset, params.length)
+          ImportedElementsComputer(result.unit, params.offset, params.length)
               .compute();
     }
 
@@ -166,7 +166,7 @@
       var allResults = <AnalysisNavigationParams>[];
       var result = await server.getResolvedUnit(file);
       if (result != null && result.state == ResultState.VALID) {
-        var unit = result.unit!;
+        var unit = result.unit;
         var collector = NavigationCollectorImpl();
         computeDartNavigation(
             server.resourceProvider, collector, unit, offset, length);
@@ -237,7 +237,7 @@
     }
 
     // Ensure the offset provided is a valid location in the file.
-    final unit = result.unit!;
+    final unit = result.unit;
     final computer = DartUnitSignatureComputer(
         server.getDartdocDirectiveInfoFor(result), unit, params.offset);
     if (!computer.offsetIsValid) {
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 78db63a..9a10237 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -330,7 +330,7 @@
       }
       server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
       if (resolvedUnit.state == ResultState.VALID) {
-        if (offset < 0 || offset > resolvedUnit.content!.length) {
+        if (offset < 0 || offset > resolvedUnit.content.length) {
           server.sendResponse(Response.invalidParameter(
               request,
               'params.offset',
@@ -339,7 +339,7 @@
           return;
         }
 
-        recordRequest(performance, file, resolvedUnit.content!, offset);
+        recordRequest(performance, file, resolvedUnit.content, offset);
       }
       var declarationsTracker = server.declarationsTracker;
       if (declarationsTracker == null) {
diff --git a/pkg/analysis_server/lib/src/domain_kythe.dart b/pkg/analysis_server/lib/src/domain_kythe.dart
index b03acbb..990588e 100644
--- a/pkg/analysis_server/lib/src/domain_kythe.dart
+++ b/pkg/analysis_server/lib/src/domain_kythe.dart
@@ -47,8 +47,8 @@
         var entries = <KytheEntry>[];
         // TODO(brianwilkerson) Figure out how to get the list of files.
         var files = <String>[];
-        result.unit!.accept(KytheDartVisitor(server.resourceProvider, entries,
-            file, InheritanceManager3(), result.content!));
+        result.unit.accept(KytheDartVisitor(server.resourceProvider, entries,
+            file, InheritanceManager3(), result.content));
         allResults.add(KytheGetKytheEntriesResult(entries, files));
       }
       //
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index 97ab5bf..7162de9 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -53,7 +53,7 @@
 
     // Compute the patched context file content.
     var targetCode = SourceEdit.applySequence(
-      contextResult.content!,
+      contextResult.content,
       changeBuilder.sourceChange.edits[0].edits,
     );
 
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 5513519..b73448c 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -401,7 +401,7 @@
       return;
     }
     var libraryUnit = result.libraryElement.definingCompilationUnit;
-    if (libraryUnit != result.unit!.declaredElement) {
+    if (libraryUnit != result.unit.declaredElement) {
       // The file in the request is a part of a library. We need to pass the
       // defining compilation unit to the computer, not the part.
       result = await server.getResolvedUnit(libraryUnit.source.fullName);
@@ -483,8 +483,8 @@
       return;
     }
     var fileStamp = -1;
-    var code = result.content!;
-    var unit = result.unit!;
+    var code = result.content;
+    var unit = result.unit;
     var errors = result.errors;
     // check if there are scan/parse errors in the file
     var numScanParseErrors = _getNumberOfScanParseErrors(errors);
@@ -627,7 +627,7 @@
 error.errorCode: ${error.errorCode}
 ''';
             throw CaughtExceptionWithFiles(exception, stackTrace, {
-              file: result.content!,
+              file: result.content,
               'parameters': parametersFile,
             });
           }
@@ -766,7 +766,7 @@
 length: $length
       ''';
         throw CaughtExceptionWithFiles(exception, stackTrace, {
-          file: result.content!,
+          file: result.content,
           'parameters': parametersFile,
         });
       }
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
index d216445..8c3dd26 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -31,7 +31,7 @@
 
     // Create outlines for widgets.
     var visitor = _FlutterOutlineBuilder(this);
-    resolvedUnit.unit!.accept(visitor);
+    resolvedUnit.unit.accept(visitor);
 
     // Associate Flutter outlines with Dart outlines.
     for (var outline in visitor.outlines) {
@@ -66,7 +66,7 @@
 
     var name = parameter.displayName;
 
-    var label = resolvedUnit.content!.substring(argument.offset, argument.end);
+    var label = resolvedUnit.content.substring(argument.offset, argument.end);
     if (label.contains('\n')) {
       label = '…';
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/organize_imports.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/organize_imports.dart
index 6b3ac68..2a81ac0 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/organize_imports.dart
@@ -41,8 +41,8 @@
     }
 
     return result.mapResult((result) {
-      final code = result.content!;
-      final unit = result.unit!;
+      final code = result.content;
+      final unit = result.unit;
 
       if (hasScanParseErrors(result.errors)) {
         // It's not uncommon for editors to run this command automatically on-save
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index 8dc8323..a1c9fab 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -205,7 +205,7 @@
   ) async {
     final performance = CompletionPerformance();
     performance.path = unit.path;
-    performance.setContentsAndOffset(unit.content!, offset);
+    performance.setContentsAndOffset(unit.content, offset);
     server.performanceStats.completion.add(performance);
 
     return await performance.runRequestOperation((perf) async {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_highlights.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_highlights.dart
index ff213a4..ae96228 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_highlights.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_highlights.dart
@@ -34,7 +34,7 @@
 
     return offset.mapResult((requestedOffset) {
       final collector = OccurrencesCollectorImpl();
-      addDartOccurrences(collector, unit.result.unit!);
+      addDartOccurrences(collector, unit.result.unit);
 
       // Find an occurrence that has an instance that spans the position.
       for (final occurrence in collector.allOccurrences) {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
index c533db2..1195c9b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
@@ -83,10 +83,6 @@
 
   ErrorOr<Hover?> _getHover(ResolvedUnitResult unit, int offset) {
     final compilationUnit = unit.unit;
-    if (compilationUnit == null) {
-      return success(null);
-    }
-
     final computer = DartUnitHoverComputer(
         server.getDartdocDirectiveInfoFor(unit), compilationUnit, offset);
     final hover = computer.compute();
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
index b302227..93c78da 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
@@ -83,7 +83,7 @@
         convert(results, toLocation).whereNotNull().toList();
 
     final compilationUnit = unit.unit;
-    if (compilationUnit != null && params.context.includeDeclaration == true) {
+    if (params.context.includeDeclaration == true) {
       // Also include the definition for the symbol at this location.
       referenceResults.addAll(_getDeclarations(compilationUnit, offset));
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
index 34f4193..25a78ca 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
@@ -62,7 +62,7 @@
       // signature help for that.
       final typeArgsSignature = _tryGetTypeArgsSignatureHelp(
         dartDocInfo,
-        unit.result.unit!,
+        unit.result.unit,
         offset,
         autoTriggered,
         formats,
@@ -72,7 +72,7 @@
       }
 
       final computer =
-          DartUnitSignatureComputer(dartDocInfo, unit.result.unit!, offset);
+          DartUnitSignatureComputer(dartDocInfo, unit.result.unit, offset);
       if (!computer.offsetIsValid) {
         return success(null); // No error, just no valid hover.
       }
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index a09919e..7f381dd 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -864,28 +864,26 @@
     analysisServer.getExtensionCacheFor(result)?.cacheFromResult(result);
 
     final unit = result.unit;
-    if (unit != null) {
-      if (analysisServer.shouldSendClosingLabelsFor(path)) {
-        final labels = DartUnitClosingLabelsComputer(result.lineInfo, unit)
-            .compute()
-            .map((l) => toClosingLabel(result.lineInfo, l))
-            .toList();
+    if (analysisServer.shouldSendClosingLabelsFor(path)) {
+      final labels = DartUnitClosingLabelsComputer(result.lineInfo, unit)
+          .compute()
+          .map((l) => toClosingLabel(result.lineInfo, l))
+          .toList();
 
-        analysisServer.publishClosingLabels(path, labels);
-      }
-      if (analysisServer.shouldSendOutlineFor(path)) {
-        final outline = DartUnitOutlineComputer(
-          result,
-          withBasicFlutter: true,
-        ).compute();
-        final lspOutline = toOutline(result.lineInfo, outline);
-        analysisServer.publishOutline(path, lspOutline);
-      }
-      if (analysisServer.shouldSendFlutterOutlineFor(path)) {
-        final outline = FlutterOutlineComputer(result).compute();
-        final lspOutline = toFlutterOutline(result.lineInfo, outline);
-        analysisServer.publishFlutterOutline(path, lspOutline);
-      }
+      analysisServer.publishClosingLabels(path, labels);
+    }
+    if (analysisServer.shouldSendOutlineFor(path)) {
+      final outline = DartUnitOutlineComputer(
+        result,
+        withBasicFlutter: true,
+      ).compute();
+      final lspOutline = toOutline(result.lineInfo, outline);
+      analysisServer.publishOutline(path, lspOutline);
+    }
+    if (analysisServer.shouldSendFlutterOutlineFor(path)) {
+      final outline = FlutterOutlineComputer(result).compute();
+      final lspOutline = toFlutterOutline(result.lineInfo, outline);
+      analysisServer.publishFlutterOutline(path, lspOutline);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index cb7e0ed..94f0005 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -94,7 +94,7 @@
     AnalysisServer server, ResolvedUnitResult resolvedUnit) {
   _sendNotification(server, () {
     protocol.FileKind fileKind;
-    var unit = resolvedUnit.unit!;
+    var unit = resolvedUnit.unit;
     if (unit.directives.any((d) => d is PartOfDirective)) {
       fileKind = protocol.FileKind.PART;
     } else {
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_core.dart b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
index 2c71a1e..d6fe971 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_core.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
@@ -44,7 +44,7 @@
   ResourceProvider get resourceProvider => result.session.resourceProvider;
 
   @override
-  Source get source => result.unit!.declaredElement!.source;
+  Source get source => result.unit.declaredElement!.source;
 
   @override
   String? get sourceContents => result.content;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index f6dc69a..b71fa3e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -458,7 +458,7 @@
     return performance.run(
       'build DartCompletionRequest',
       (_) {
-        var unit = request.result.unit!;
+        var unit = request.result.unit;
         var libSource = unit.declaredElement!.library.source;
         var objectType = request.result.typeProvider.objectType;
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart b/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
index 4457f2e..0ca62d6 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
@@ -29,7 +29,7 @@
 
   /// Fill the cache with data from the [result].
   void cacheFromResult(ResolvedUnitResult result) {
-    var compilationUnit = result.unit?.declaredElement;
+    var compilationUnit = result.unit.declaredElement;
     if (compilationUnit != null) {
       documentationCache.remove(_keyForUnit(compilationUnit));
       _cacheFromElement(compilationUnit);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/extension_cache.dart b/pkg/analysis_server/lib/src/services/completion/dart/extension_cache.dart
index 96decc0..38481dc 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/extension_cache.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/extension_cache.dart
@@ -21,7 +21,7 @@
 
   /// Fill the cache with data from the [result].
   void cacheFromResult(ResolvedUnitResult result) {
-    var element = result.unit?.declaredElement;
+    var element = result.unit.declaredElement;
     if (element != null) {
       _cacheFromElement(element);
       for (var library in result.libraryElement.importedLibraries) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index c767698..f14d554 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -158,7 +158,7 @@
       return;
     }
 
-    var libraryUnits = request.result.unit?.declaredElement?.library.units;
+    var libraryUnits = request.result.unit.declaredElement?.library.units;
     if (libraryUnits == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index d045443..8812c24 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -194,7 +194,7 @@
 }
 
 String getRequestLineIndent(DartCompletionRequest request) {
-  var content = request.result.content!;
+  var content = request.result.content;
   var lineStartOffset = request.offset;
   var notWhitespaceOffset = request.offset;
   for (; lineStartOffset > 0; lineStartOffset--) {
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index e71629b..e337213 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -128,7 +128,7 @@
 
   Source get source => unitElement.source;
 
-  CompilationUnit get unit => statementContext.resolveResult.unit!;
+  CompilationUnit get unit => statementContext.resolveResult.unit;
 
   CompilationUnitElement get unitElement => unit.declaredElement!;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index 83b0402..14485d2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -254,7 +254,7 @@
         sessionHelper = AnalysisSessionHelper(resolvedResult.session),
         typeProvider = resolvedResult.typeProvider,
         selectionEnd = selectionOffset + selectionLength,
-        unit = resolvedResult.unit!,
+        unit = resolvedResult.unit,
         utils = CorrectionUtils(resolvedResult);
 
   /// Return `true` if the lint with the given [name] is enabled.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
index 1b02c88..318a934 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
@@ -39,7 +39,7 @@
   Iterable<CorrectionProducer> _wrapMultipleWidgets() sync* {
     var selectionRange = SourceRange(selectionOffset, selectionLength);
     var analyzer = SelectionAnalyzer(selectionRange);
-    resolvedResult.unit!.accept(analyzer);
+    resolvedResult.unit.accept(analyzer);
 
     var widgetExpressions = <Expression>[];
     if (analyzer.hasSelectedNodes) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/organize_imports.dart b/pkg/analysis_server/lib/src/services/correction/dart/organize_imports.dart
index caca5ec..d5cf7c0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/organize_imports.dart
@@ -25,7 +25,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     var organizer =
-        ImportOrganizer(resolvedResult.content!, unit, resolvedResult.errors);
+        ImportOrganizer(resolvedResult.content, unit, resolvedResult.errors);
     // todo (pq): consider restructuring organizer to allow a passed-in change
     //  builder
     for (var edit in organizer.organize()) {
diff --git a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
index 9f1c68a..9a156c4 100644
--- a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
@@ -52,7 +52,7 @@
 
   /// Analyze the selection, compute [status] and nodes.
   void analyze() {
-    resolveResult.unit!.accept(this);
+    resolveResult.unit.accept(this);
   }
 
   /// Records fatal error with given message and [Location].
@@ -73,7 +73,7 @@
     {
       var selectionStart = selection.offset;
       var selectionEnd = selection.end;
-      var commentRanges = getCommentRanges(resolveResult.unit!);
+      var commentRanges = getCommentRanges(resolveResult.unit);
       for (var commentRange in commentRanges) {
         if (commentRange.contains(selectionStart)) {
           invalidSelection('Selection begins inside a comment.');
@@ -208,9 +208,9 @@
 
   /// Returns `true` if there are [Token]s in the given [SourceRange].
   bool _hasTokens(SourceRange range) {
-    var fullText = resolveResult.content!;
+    var fullText = resolveResult.content;
     var rangeText = fullText.substring(range.offset, range.end);
-    return _getTokens(rangeText, resolveResult.unit!.featureSet).isNotEmpty;
+    return _getTokens(rangeText, resolveResult.unit.featureSet).isNotEmpty;
   }
 
   /// Returns `true` if [nodes] contains [node].
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 57ffe36..ae54a38 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -537,9 +537,9 @@
   String? _endOfLine;
 
   CorrectionUtils(ResolvedUnitResult result)
-      : unit = result.unit!,
+      : unit = result.unit,
         _library = result.libraryElement,
-        _buffer = result.content!;
+        _buffer = result.content;
 
   /// Returns the EOL to use for this [CompilationUnit].
   String get endOfLine {
diff --git a/pkg/analysis_server/lib/src/services/flutter/property.dart b/pkg/analysis_server/lib/src/services/flutter/property.dart
index 0d4f3e3..2a6586d 100644
--- a/pkg/analysis_server/lib/src/services/flutter/property.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/property.dart
@@ -659,7 +659,7 @@
 
   String? _expressionCode(Expression? expression) {
     if (expression != null) {
-      var content = property.resolvedUnit.content!;
+      var content = property.resolvedUnit.content;
       return content.substring(expression.offset, expression.end);
     }
     return null;
diff --git a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
index f38a7cc..77da5dda 100644
--- a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
@@ -336,7 +336,7 @@
 
     String? valueExpressionCode;
     if (valueExpression != null) {
-      valueExpressionCode = resolvedUnit.content!.substring(
+      valueExpressionCode = resolvedUnit.content.substring(
         valueExpression.offset,
         valueExpression.end,
       );
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 0fc97d8..7d361dc 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -66,7 +66,7 @@
   @override
   String get refactoringName => 'Extract Local Variable';
 
-  CompilationUnit get unit => resolveResult.unit!;
+  CompilationUnit get unit => resolveResult.unit;
 
   CompilationUnitElement get unitElement => unit.declaredElement!;
 
@@ -231,7 +231,7 @@
       return RefactoringStatus.fatal(
           'The selection offset must be greater than zero.');
     }
-    if (selectionOffset + selectionLength >= resolveResult.content!.length) {
+    if (selectionOffset + selectionLength >= resolveResult.content.length) {
       return RefactoringStatus.fatal(
           'The selection end offset must be less then the length of the file.');
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index a2c9a19..ebb50c0 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -297,7 +297,7 @@
       // add replace edit
       var edit = newSourceEdit_range(range, invocationSource);
       doSourceChange_addElementEdit(
-          change, resolveResult.unit!.declaredElement!, edit);
+          change, resolveResult.unit.declaredElement!, edit);
     }
     // add method declaration
     {
@@ -378,7 +378,7 @@
         var offset = _parentMember!.end;
         var edit = SourceEdit(offset, 0, '$eol$eol$prefix$declarationSource');
         doSourceChange_addElementEdit(
-            change, resolveResult.unit!.declaredElement!, edit);
+            change, resolveResult.unit.declaredElement!, edit);
       }
     }
     // done
@@ -450,7 +450,7 @@
       return RefactoringStatus.fatal(
           'The selection offset must be greater than zero.');
     }
-    if (selectionOffset + selectionLength >= resolveResult.content!.length) {
+    if (selectionOffset + selectionLength >= resolveResult.content.length) {
       return RefactoringStatus.fatal(
           'The selection end offset must be less then the length of the file.');
     }
@@ -658,12 +658,11 @@
     var originalSource = utils.getText(range.offset, range.length);
     var pattern = _SourcePattern();
     var replaceEdits = <SourceEdit>[];
-    resolveResult.unit!
-        .accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
+    resolveResult.unit.accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
     replaceEdits = replaceEdits.reversed.toList();
     var source = SourceEdit.applySequence(originalSource, replaceEdits);
     pattern.normalizedSource =
-        _getNormalizedSource(source, resolveResult.unit!.featureSet);
+        _getNormalizedSource(source, resolveResult.unit.featureSet);
     return pattern;
   }
 
@@ -706,7 +705,7 @@
     var result = RefactoringStatus();
     var assignedUsedVariables = <VariableElement>[];
 
-    var unit = resolveResult.unit!;
+    var unit = resolveResult.unit;
     _visibleRangeMap = VisibleRangesComputer.forNode(unit);
     unit.accept(
       _InitializeParametersVisitor(this, assignedUsedVariables),
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
index 1137c45..6fe4778 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
@@ -85,7 +85,7 @@
   }
 
   FeatureSet get _featureSet {
-    return resolveResult.unit!.featureSet;
+    return resolveResult.unit.featureSet;
   }
 
   Flutter get _flutter => Flutter.instance;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
index c7577b6..e0f3df71 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
@@ -114,7 +114,7 @@
   @override
   Future<SourceChange> createChange() {
     var change = SourceChange(refactoringName);
-    var unitElement = resolveResult.unit!.declaredElement!;
+    var unitElement = resolveResult.unit.declaredElement!;
     var state = _initialState!;
     // remove declaration
     {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 1cff243..f3e4b67 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -363,7 +363,7 @@
     _methodNode = methodNode;
 
     var resolvedUnit = declaration.resolvedUnit!;
-    _methodUnit = resolvedUnit.unit!;
+    _methodUnit = resolvedUnit.unit;
     _methodUtils = CorrectionUtils(resolvedUnit);
 
     if (methodNode is MethodDeclaration) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
index 1c259a4..f768861 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
@@ -71,7 +71,7 @@
   @override
   Future<SourceChange> createChange() async {
     var changeBuilder = ChangeBuilder(session: resolvedUnit.session);
-    var element = resolvedUnit.unit!.declaredElement;
+    var element = resolvedUnit.unit.declaredElement;
     if (element == null) {
       return changeBuilder.sourceChange;
     }
@@ -92,14 +92,14 @@
       var definingUnitResult = libraryResult.units.first;
       for (var result in libraryResult.units) {
         if (result.isPart) {
-          var partOfs = result.unit!.directives
+          var partOfs = result.unit.directives
               .whereType<PartOfDirective>()
               .map((e) => e.uri)
               .whereNotNull()
               .where((uri) => _isRelativeUri(uri.stringValue));
           if (partOfs.isNotEmpty) {
             await changeBuilder.addDartFileEdit(
-                result.unit!.declaredElement!.source.fullName, (builder) {
+                result.unit.declaredElement!.source.fullName, (builder) {
               partOfs.forEach((uri) {
                 var newLocation =
                     pathContext.join(newDir, pathos.basename(newFile));
@@ -114,7 +114,7 @@
 
       if (newDir != oldDir) {
         await changeBuilder.addDartFileEdit(definingUnitResult.path, (builder) {
-          for (var directive in definingUnitResult.unit!.directives) {
+          for (var directive in definingUnitResult.unit.directives) {
             if (directive is UriBasedDirective) {
               _updateUriReference(builder, directive, oldDir, newDir);
             }
@@ -123,7 +123,7 @@
       }
     } else if (newDir != oldDir) {
       // Otherwise, we need to update any relative part-of references.
-      var partOfs = resolvedUnit.unit!.directives
+      var partOfs = resolvedUnit.unit.directives
           .whereType<PartOfDirective>()
           .map((e) => e.uri)
           .whereNotNull()
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 422d944..91654f8 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -334,9 +334,6 @@
         }
 
         var unit = result.unit;
-        if (unit == null) {
-          return const [];
-        }
 
         var collector = _LocalElementsCollector(name);
         unit.accept(collector);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
index 5367235..f0b65ab 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
@@ -165,9 +165,6 @@
         }
 
         var unit = result.unit;
-        if (unit == null) {
-          return const [];
-        }
 
         var collector = _LocalElementsCollector(name);
         unit.accept(collector);
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 610be65..999bc4d 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -246,7 +246,7 @@
     var result = await driver.getResult2(filePath);
     if (result is ResolvedUnitResult) {
       var writer = AstWriter(buf);
-      result.unit!.accept(writer);
+      result.unit.accept(writer);
     } else {
       p(
           'An AST could not be produced for the file '
@@ -836,7 +836,7 @@
     var result = await driver.getResult2(filePath);
     CompilationUnitElement? compilationUnitElement;
     if (result is ResolvedUnitResult) {
-      compilationUnitElement = result.unit?.declaredElement;
+      compilationUnitElement = result.unit.declaredElement;
     }
     if (compilationUnitElement != null) {
       var writer = ElementWriter(buf);
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 5323a57..b18416c 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -72,8 +72,8 @@
   Future<void> resolveTestFile() async {
     var result = await session.getResolvedUnit(testFile) as ResolvedUnitResult;
     testAnalysisResult = result;
-    testCode = result.content!;
-    testUnit = result.unit!;
+    testCode = result.content;
+    testUnit = result.unit;
     if (verifyNoTestUnitErrors) {
       expect(result.errors.where((AnalysisError error) {
         return error.errorCode != HintCode.DEAD_CODE &&
diff --git a/pkg/analysis_server/test/services/correction/organize_directives_test.dart b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
index 8681ccb..7696ad5 100644
--- a/pkg/analysis_server/test/services/correction/organize_directives_test.dart
+++ b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
@@ -583,7 +583,7 @@
   Future<void> _computeUnitAndErrors(String code) async {
     addTestSource(code);
     var result = await session.getResolvedUnit(testFile) as ResolvedUnitResult;
-    testUnit = result.unit!;
+    testUnit = result.unit;
     testErrors = result.errors;
   }
 }
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 99aa552..512db98 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -41,8 +41,8 @@
     result = await resolveFile(path);
     expect(result.state, ResultState.VALID);
 
-    findNode = FindNode(result.content!, result.unit!);
-    findElement = FindElement(result.unit!);
+    findNode = FindNode(result.content, result.unit);
+    findElement = FindElement(result.unit);
   }
 
   /// Put the [code] into the test file, and resolve it.
diff --git a/pkg/analysis_server/test/src/cider/completion_test.dart b/pkg/analysis_server/test/src/cider/completion_test.dart
index b83e4ef..7a50af7 100644
--- a/pkg/analysis_server/test/src/cider/completion_test.dart
+++ b/pkg/analysis_server/test/src/cider/completion_test.dart
@@ -806,7 +806,7 @@
   /// for completion we don't resolve unnecessary node.
   void _configureToCheckNotResolved({required Set<String> identifiers}) {
     _testResolvedUnit = (resolvedUnitResult) {
-      var unit = resolvedUnitResult.unit!;
+      var unit = resolvedUnitResult.unit;
       unit.accept(
         FunctionAstVisitor(
           simpleIdentifier: (node) {
diff --git a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
index 5e39f9a..83a9954 100644
--- a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
@@ -399,7 +399,7 @@
     newFile(sourcePath, content: sourceContent);
     var result =
         await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
-    var computer = DartUnitClosingLabelsComputer(result.lineInfo, result.unit!);
+    var computer = DartUnitClosingLabelsComputer(result.lineInfo, result.unit);
     return computer.compute();
   }
 }
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index e6084a0..f63607d 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -583,7 +583,7 @@
     newFile(sourcePath, content: sourceContent);
     var result =
         await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
-    var computer = DartUnitFoldingComputer(result.lineInfo, result.unit!);
+    var computer = DartUnitFoldingComputer(result.lineInfo, result.unit);
     return computer.compute();
   }
 }
diff --git a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
index 145950d..46a6c44 100644
--- a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
@@ -122,7 +122,7 @@
       expect(result.errors, isEmpty);
     }
 
-    var computer = DartUnitHighlightsComputer(result.unit!);
+    var computer = DartUnitHighlightsComputer(result.unit);
     highlights = computer.compute();
   }
 }
diff --git a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
index 3448803..a63d9bc 100644
--- a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
@@ -473,7 +473,7 @@
     var result =
         await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
     var computer = ImportedElementsComputer(
-        result.unit!, content.indexOf(selection), selection.length);
+        result.unit, content.indexOf(selection), selection.length);
     importedElements = computer.compute();
   }
 }
diff --git a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
index 603b7b6..27e9e7f 100644
--- a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
@@ -195,7 +195,7 @@
     newFile(sourcePath, content: sourceContent);
     var result =
         await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
-    var computer = DartSelectionRangeComputer(result.unit!, offset);
+    var computer = DartSelectionRangeComputer(result.unit, offset);
     return computer.compute();
   }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
index 5103661..f6ccc74 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
@@ -72,7 +72,7 @@
 }
 void g(int x, int y) {}
 ''');
-    var unit = testAnalysisResult.unit!;
+    var unit = testAnalysisResult.unit;
     var function = unit.declarations[0] as FunctionDeclaration;
     var body = function.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
diff --git a/pkg/analysis_server/test/src/services/flutter/widget_description.dart b/pkg/analysis_server/test/src/services/flutter/widget_description.dart
index 8cdbfff..33f47ad 100644
--- a/pkg/analysis_server/test/src/services/flutter/widget_description.dart
+++ b/pkg/analysis_server/test/src/services/flutter/widget_description.dart
@@ -24,7 +24,7 @@
     expect(fileEdit.file, testAnalysisResult.path);
 
     var actual = SourceEdit.applySequence(
-      testAnalysisResult.content!,
+      testAnalysisResult.content,
       fileEdit.edits,
     );
     expect(actual, expected);
@@ -50,7 +50,7 @@
 
   Future<protocol.FlutterGetWidgetDescriptionResult?> getDescription(
       String search) async {
-    var content = testAnalysisResult.content!;
+    var content = testAnalysisResult.content;
 
     var offset = content.indexOf(search);
     if (offset == -1) {
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 8d16f86..16d1e81 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -82,9 +82,9 @@
         output.write('.');
         var result = await context.currentSession.getResolvedUnit(path)
             as ResolvedUnitResult;
-        var content = result.content!;
+        var content = result.content;
         var lineInfo = result.lineInfo;
-        var identifiers = _identifiersIn(result.unit!);
+        var identifiers = _identifiersIn(result.unit);
 
         for (var identifier in identifiers) {
           identifierCount++;
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 898b393..565a9fd 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -1411,7 +1411,7 @@
             continue;
           }
 
-          resolvedUnitResult.unit!.accept(collector);
+          resolvedUnitResult.unit.accept(collector);
         } catch (exception) {
           print('Exception caught analyzing: "$filePath"');
           print(exception.toString());
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 3527d19..46638b1 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -1319,7 +1319,7 @@
       // Use the ExpectedCompletionsVisitor to compute the set of expected
       // completions for this CompilationUnit.
       final visitor = ExpectedCompletionsVisitor(filePath);
-      _resolvedUnitResult.unit!.accept(visitor);
+      _resolvedUnitResult.unit.accept(visitor);
 
       for (var expectedCompletion in visitor.expectedCompletions) {
         var resolvedUnitResult = _resolvedUnitResult;
@@ -1328,7 +1328,7 @@
         // have the context reanalyze the file
         if (options.overlay != CompletionMetricsOptions.OVERLAY_NONE) {
           var overlayContents = _getOverlayContents(
-              _resolvedUnitResult.content!, expectedCompletion);
+              _resolvedUnitResult.content, expectedCompletion);
 
           _provider.setOverlay(filePath,
               content: overlayContents,
diff --git a/pkg/analysis_server/tool/code_completion/flutter_metrics.dart b/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
index 886c484..edab701 100644
--- a/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
@@ -224,7 +224,7 @@
             continue;
           }
 
-          resolvedUnitResult.unit!.accept(collector);
+          resolvedUnitResult.unit.accept(collector);
         } catch (exception, stackTrace) {
           print('');
           print('Exception caught analyzing: "$filePath"');
diff --git a/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart b/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
index c2f21c9..8494fb4 100644
--- a/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
+++ b/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
@@ -208,7 +208,7 @@
             continue;
           }
 
-          resolvedUnitResult.unit!.accept(collector);
+          resolvedUnitResult.unit.accept(collector);
         } catch (exception, stacktrace) {
           print('Exception caught analyzing: "$filePath"');
           print(exception);
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index e80ba2a3..8a24e94 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -1964,7 +1964,7 @@
             continue;
           }
 
-          resolvedUnitResult.unit!.accept(collector);
+          resolvedUnitResult.unit.accept(collector);
         } catch (exception, stacktrace) {
           print('Exception caught analyzing: "$filePath"');
           print(exception);
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index 77359a0..3e2af94 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -317,7 +317,7 @@
 
   /// Initialize this collector prior to visiting the unit in the [result].
   void initializeFrom(ResolvedUnitResult result) {
-    unit = result.unit!;
+    unit = result.unit;
   }
 
   @override
@@ -1484,7 +1484,7 @@
           }
 
           collector.initializeFrom(resolvedUnitResult);
-          resolvedUnitResult.unit!.accept(collector);
+          resolvedUnitResult.unit.accept(collector);
         } catch (exception, stacktrace) {
           print('Exception caught analyzing: "$filePath"');
           print(exception);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index e8557d9..73619d3 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -3,6 +3,8 @@
 * Changed `ParsedLibraryResult.units` to be non-nullable.
 * Changed `ResolvedLibraryResult.element` to be non-nullable.
 * Changed `ResolvedLibraryResult.units` to be non-nullable.
+* Changed `ResolvedUnitResult.content` to be non-nullable.
+* Changed `ResolvedUnitResult.unit` to be non-nullable.
 * Deprecated and renamed `AnalysisSession.getXyz2()` into `getXyz()`.
 * Changed `AnalysisDriver.results` to `Stream<Object>`.
   It used to always produce `ResolvedUnitResult`s, but sometimes its
diff --git a/pkg/analyzer/lib/dart/analysis/results.dart b/pkg/analyzer/lib/dart/analysis/results.dart
index 550303b..13500ba 100644
--- a/pkg/analyzer/lib/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/dart/analysis/results.dart
@@ -231,7 +231,7 @@
 abstract class ResolvedUnitResult
     implements SomeResolvedUnitResult, AnalysisResultWithErrors {
   /// The content of the file that was scanned, parsed and resolved.
-  String? get content;
+  String get content;
 
   /// Return `true` if the file exists.
   bool get exists;
@@ -246,7 +246,7 @@
   TypeSystem get typeSystem;
 
   /// The fully resolved compilation unit for the [content].
-  CompilationUnit? get unit;
+  CompilationUnit get unit;
 }
 
 /// An indication of whether an analysis result is valid, and if not why.
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index df488a6..c7726fb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -1672,7 +1672,7 @@
     List<AnalysisError> errors = _getErrorsFromSerialized(file, unit.errors);
     _updateHasErrorOrWarningFlag(file, errors);
     var index = unit.index!;
-    if (resolvedUnit != null) {
+    if (content != null && resolvedUnit != null) {
       var resolvedUnitResult = ResolvedUnitResultImpl(
         currentSession,
         file.path,
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index d13482f..9db2ec6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -204,13 +204,8 @@
       },
     );
 
-    var unit = unitResult.unit;
-    if (unit == null) {
-      throw StateError('The result has no unit');
-    }
-
     var locator = _DeclarationByElementLocator(element);
-    unit.accept(locator);
+    unitResult.unit.accept(locator);
     var declaration = locator.result;
 
     if (declaration == null) {
@@ -227,10 +222,10 @@
   final bool exists;
 
   @override
-  final String? content;
+  final String content;
 
   @override
-  final CompilationUnit? unit;
+  final CompilationUnit unit;
 
   @override
   final List<AnalysisError> errors;
@@ -249,10 +244,6 @@
 
   @override
   LibraryElement get libraryElement {
-    final unit = this.unit;
-    if (unit == null) {
-      throw StateError('The result has no unit');
-    }
     return unit.declaredElement!.library;
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 20df7ad..8d7a200 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -381,7 +381,7 @@
       var unitResult = await _driver.getResult2(unitPath);
       if (unitResult is ResolvedUnitResult) {
         var visitor = _ImportElementReferencesVisitor(element, unitElement);
-        unitResult.unit!.accept(visitor);
+        unitResult.unit.accept(visitor);
         results.addAll(visitor.results);
       }
     }
@@ -400,7 +400,7 @@
       String unitPath = unitElement.source.fullName;
       var unitResult = await _driver.getResult2(unitPath);
       if (unitResult is ResolvedUnitResult) {
-        CompilationUnit unit = unitResult.unit!;
+        CompilationUnit unit = unitResult.unit;
         for (Directive directive in unit.directives) {
           if (directive is PartOfDirective && directive.element == element) {
             results.add(
@@ -433,9 +433,6 @@
       return const <SearchResult>[];
     }
     var unit = unitResult.unit;
-    if (unit == null) {
-      return const <SearchResult>[];
-    }
 
     // Prepare the node.
     var node = NodeLocator(element.nameOffset).searchWithin(unit);
@@ -487,7 +484,7 @@
       var unitResult = await _driver.getResult2(unitPath);
       if (unitResult is ResolvedUnitResult) {
         var visitor = _LocalReferencesVisitor(element, unitElement);
-        unitResult.unit!.accept(visitor);
+        unitResult.unit.accept(visitor);
         results.addAll(visitor.results);
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index aa64210..e11ec7f 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -208,7 +208,7 @@
       result.forEach((filePath) {
         var resolved = resolve(path: filePath);
         var collector = ReferencesCollector(element);
-        resolved.unit?.accept(collector);
+        resolved.unit.accept(collector);
         var offsets = collector.offsets;
         if (offsets.isNotEmpty) {
           references.add(CiderSearchMatch(filePath, offsets));
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index dba624a..7b32e98 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -166,7 +166,7 @@
     var fa = findNode.topLevelVariableDeclaration('fa');
     var fb = findNode.topLevelVariableDeclaration('fb');
 
-    var source = result.unit!.declaredElement!.source;
+    var source = result.unit.declaredElement!.source;
     var reporter = ErrorReporter(
       listener,
       source,
@@ -201,7 +201,7 @@
     var ba = findNode.topLevelVariableDeclaration('ba');
     var bb = findNode.topLevelVariableDeclaration('bb');
 
-    var source = result.unit!.declaredElement!.source;
+    var source = result.unit.declaredElement!.source;
     var reporter = ErrorReporter(
       listener,
       source,
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 33fc9a1..91e4e01 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -761,7 +761,7 @@
 class D {}
 class E {}
 ''');
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     ClassElement classC = unit.declaredElement!.getType('C')!;
     expect(classC.documentationComment, isNotNull);
   }
@@ -1610,7 +1610,7 @@
 
 class C extends A<B> with M {}
 ''');
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     ClassElement classC = unit.declaredElement!.getType('C')!;
     expect(classC.mixins, hasLength(1));
     assertType(classC.mixins[0], 'M<B>');
@@ -1632,7 +1632,7 @@
         1,
       ),
     ]);
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     ClassElement classC = unit.declaredElement!.getType('C')!;
     expect(classC.mixins, hasLength(1));
     assertType(classC.mixins[0], 'M<int, String>');
@@ -1648,7 +1648,7 @@
 
 class C extends A<List<B>> with M {}
 ''');
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     ClassElement classC = unit.declaredElement!.getType('C')!;
     expect(classC.mixins, hasLength(1));
     assertType(classC.mixins[0], 'M<B>');
@@ -2095,7 +2095,7 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 93, 1),
       error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 97, 1),
     ]);
-    var z = result.unit!.declaredElement!.topLevelVariables
+    var z = result.unit.declaredElement!.topLevelVariables
         .where((e) => e.name == 'z')
         .single;
     assertType(z.type, 'List<String>');
@@ -2275,7 +2275,7 @@
 class B<T> = Object with A<T>;
 class C = Object with B;
 ''');
-    var bReference = result.unit!.declaredElement!.getType('C')!.mixins[0];
+    var bReference = result.unit.declaredElement!.getType('C')!.mixins[0];
     assertTypeDynamic(bReference.typeArguments[0]);
   }
 
@@ -2294,7 +2294,7 @@
 ''', [
       error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 122, 1),
     ]);
-    var bReference = result.unit!.declaredElement!.getType('C')!.mixins[0];
+    var bReference = result.unit.declaredElement!.getType('C')!.mixins[0];
     assertType(bReference.typeArguments[0], 'int');
   }
 
@@ -2333,7 +2333,7 @@
   x;
 }
 ''');
-    var main = result.unit!.declarations.last as FunctionDeclaration;
+    var main = result.unit.declarations.last as FunctionDeclaration;
     var mainBody = main.functionExpression.body as BlockFunctionBody;
     var xDecl = mainBody.block.statements[0] as VariableDeclarationStatement;
     var xElem = xDecl.variables.variables[0].declaredElement!;
@@ -2804,8 +2804,8 @@
 @B.named8()
 main() {}
 ''');
-    expect(result.unit!.declarations, hasLength(1));
-    final mainDecl = result.unit!.declarations[0];
+    expect(result.unit.declarations, hasLength(1));
+    final mainDecl = result.unit.declarations[0];
     expect(mainDecl.metadata, hasLength(8));
     mainDecl.metadata.forEach((metadata) {
       final value = metadata.elementAnnotation!.computeConstantValue()!;
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index b0a30a2..254dea0 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -1264,7 +1264,7 @@
   /// Verify that all of the identifiers in the [result] have been resolved.
   void verifyTestResolved() {
     var verifier = ResolutionVerifier();
-    result.unit!.accept(verifier);
+    result.unit.accept(verifier);
     verifier.assertResolved();
   }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index aa67fe2..e724509 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -59,7 +59,7 @@
 
   late final AsserterBuilder<Element, DartType> _hasElement;
 
-  CompilationUnit get unit => result.unit!;
+  CompilationUnit get unit => result.unit;
 
   @override
   Future<void> resolveTestFile() async {
@@ -2404,7 +2404,7 @@
 }
 ''');
 
-    var b = result.unit!.declarations[1] as ClassDeclaration;
+    var b = result.unit.declarations[1] as ClassDeclaration;
     var bConstructor = b.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
index 08f50c5..0c2aefa 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
@@ -140,7 +140,7 @@
     var session = contextFor(libraryPath).currentSession;
     var resolvedLibrary = await session.getResolvedLibrary(libraryPath);
     resolvedLibrary as ResolvedLibraryResult;
-    return resolvedLibrary.units.map((ru) => ru.unit!).toList();
+    return resolvedLibrary.units.map((ru) => ru.unit).toList();
   }
 }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 5853f91..9fe7223 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -143,7 +143,7 @@
     await resolveTestFile();
 
     var myDeclaration =
-        result.unit!.declarations[0] as TopLevelVariableDeclaration;
+        result.unit.declarations[0] as TopLevelVariableDeclaration;
     var myVariable = myDeclaration.variables.variables[0];
     var myElement = myVariable.declaredElement as TopLevelVariableElement;
 
@@ -157,7 +157,7 @@
     }
 
     {
-      var classNode = result.unit!.declarations[1] as ClassDeclaration;
+      var classNode = result.unit.declarations[1] as ClassDeclaration;
       assertMyAnnotation(classNode);
 
       {
@@ -177,12 +177,12 @@
     }
 
     {
-      var node = result.unit!.declarations[2] as TopLevelVariableDeclaration;
+      var node = result.unit.declarations[2] as TopLevelVariableDeclaration;
       assertMyAnnotation(node);
     }
 
     {
-      var node = result.unit!.declarations[3] as FunctionDeclaration;
+      var node = result.unit.declarations[3] as FunctionDeclaration;
       assertMyAnnotation(node);
     }
   }
@@ -346,11 +346,11 @@
 
     await resolveTestFile();
 
-    var c = result.unit!.declarations[0] as ClassDeclaration;
+    var c = result.unit.declarations[0] as ClassDeclaration;
     var constructor = c.members[1] as ConstructorDeclaration;
     ConstructorElement element = constructor.declaredElement!;
 
-    var main = result.unit!.declarations[1] as FunctionDeclaration;
+    var main = result.unit.declarations[1] as FunctionDeclaration;
     var statement = (main.functionExpression.body as BlockFunctionBody)
         .block
         .statements[0] as VariableDeclarationStatement;
@@ -377,11 +377,11 @@
     await resolveTestFile();
 
     var myDeclaration =
-        result.unit!.declarations[0] as TopLevelVariableDeclaration;
+        result.unit.declarations[0] as TopLevelVariableDeclaration;
     VariableDeclaration myVariable = myDeclaration.variables.variables[0];
     var myElement = myVariable.declaredElement as TopLevelVariableElement;
 
-    var classNode = result.unit!.declarations[1] as ClassDeclaration;
+    var classNode = result.unit.declarations[1] as ClassDeclaration;
     var node = classNode.members[0] as MethodDeclaration;
     var statement = (node.body as BlockFunctionBody).block.statements[0]
         as VariableDeclarationStatement;
@@ -406,7 +406,7 @@
 main() {}
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement aImport = unit.declaredElement!.library.imports[0];
     PrefixElement aPrefix = aImport.prefix!;
@@ -445,7 +445,7 @@
 main() {}
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement aImport = unit.declaredElement!.library.imports[0];
     PrefixElement aPrefix = aImport.prefix!;
@@ -486,7 +486,7 @@
 main() {}
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement aImport = unit.declaredElement!.library.imports[0];
     PrefixElement aPrefix = aImport.prefix!;
@@ -527,7 +527,7 @@
 main() {}
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement aImport = unit.declaredElement!.library.imports[0];
     PrefixElement aPrefix = aImport.prefix!;
@@ -560,7 +560,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     ClassElement aClass = unitElement.getType('A')!;
@@ -590,7 +590,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     ClassElement aClass = unitElement.getType('A')!;
@@ -620,7 +620,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     ClassElement aClass = unitElement.getType('A')!;
@@ -657,11 +657,11 @@
 f() {}
 ''');
     await resolveTestFile();
-    var elementC = AstFinder.getClass(result.unit!, 'C').declaredElement!;
+    var elementC = AstFinder.getClass(result.unit, 'C').declaredElement!;
     var constructorC = elementC.constructors[0];
-    var elementD = AstFinder.getClass(result.unit!, 'D').declaredElement!;
+    var elementD = AstFinder.getClass(result.unit, 'D').declaredElement!;
     var constructorD = elementD.constructors[0];
-    var atD = AstFinder.getTopLevelFunction(result.unit!, 'f').metadata[0];
+    var atD = AstFinder.getTopLevelFunction(result.unit, 'f').metadata[0];
     var constC = atD.arguments!.arguments[0] as InstanceCreationExpression;
 
     expect(atD.name.staticElement, elementD);
@@ -689,16 +689,16 @@
     await resolveTestFile();
 
     var declaration_1 =
-        result.unit!.declarations[0] as TopLevelVariableDeclaration;
+        result.unit.declarations[0] as TopLevelVariableDeclaration;
     VariableDeclaration variable_1 = declaration_1.variables.variables[0];
     var element_1 = variable_1.declaredElement as TopLevelVariableElement;
 
     var declaration_2 =
-        result.unit!.declarations[1] as TopLevelVariableDeclaration;
+        result.unit.declarations[1] as TopLevelVariableDeclaration;
     VariableDeclaration variable_2 = declaration_2.variables.variables[0];
     var element_2 = variable_2.declaredElement as TopLevelVariableElement;
 
-    var main = result.unit!.declarations[2] as FunctionDeclaration;
+    var main = result.unit.declarations[2] as FunctionDeclaration;
 
     Annotation annotation_1 = main.metadata[0];
     expect(annotation_1.element, same(element_1.getter));
@@ -959,7 +959,7 @@
 ''');
     await resolveTestFile();
 
-    var mainDeclaration = result.unit!.declarations[0] as FunctionDeclaration;
+    var mainDeclaration = result.unit.declarations[0] as FunctionDeclaration;
     var mainElement = mainDeclaration.declaredElement as FunctionElement;
     var mainBody = mainDeclaration.functionExpression.body as BlockFunctionBody;
     List<Statement> mainStatements = mainBody.block.statements;
@@ -1090,7 +1090,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var c = unit.declarations[0] as ClassDeclaration;
     var declaration = c.members[0] as FieldDeclaration;
@@ -1107,7 +1107,7 @@
 var v = (() => 42)();
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     VariableDeclaration variable = declaration.variables.variables[0];
@@ -1164,7 +1164,7 @@
 ''');
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
 
     var constructorNode = cNode.members[0] as ConstructorDeclaration;
     ParameterElement pElement = constructorNode.declaredElement!.parameters[0];
@@ -1188,7 +1188,7 @@
 ''');
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
     FieldElement fElement = cElement.getField('f')!;
 
@@ -1219,10 +1219,10 @@
 ''');
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement aElement = aNode.declaredElement!;
 
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
 
     {
       var constructor = bNode.members[0] as ConstructorDeclaration;
@@ -1261,7 +1261,7 @@
 ''');
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
 
     {
@@ -1312,10 +1312,10 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement aElement = aNode.declaredElement!;
 
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
 
     {
       ConstructorElement aUnnamed = aElement.constructors[0];
@@ -1373,10 +1373,10 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement aElement = aNode.declaredElement!;
 
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
     TypeParameterType uType =
         typeParameterTypeNone(bNode.declaredElement!.typeParameters[0]);
     InterfaceType auType = aElement.instantiate(
@@ -1714,7 +1714,7 @@
 ''');
     await resolveTestFile();
 
-    var enumNode = result.unit!.declarations[0] as EnumDeclaration;
+    var enumNode = result.unit.declarations[0] as EnumDeclaration;
     ClassElement enumElement = enumNode.declaredElement!;
 
     List<Statement> mainStatements = _getMainStatements(result);
@@ -1758,7 +1758,7 @@
 ''');
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     var tElement = cNode.declaredElement!.typeParameters[0];
 
     var fDeclaration = cNode.members[0] as FieldDeclaration;
@@ -1806,7 +1806,7 @@
 ''');
     await resolveTestFile();
 
-    var clazz = result.unit!.declarations[0] as ClassDeclaration;
+    var clazz = result.unit.declarations[0] as ClassDeclaration;
     var constructor = clazz.members[0] as ConstructorDeclaration;
     List<FormalParameter> parameters = constructor.parameters.parameters;
 
@@ -1841,7 +1841,7 @@
 ''');
     await resolveTestFile();
 
-    var clazz = result.unit!.declarations[0] as ClassDeclaration;
+    var clazz = result.unit.declarations[0] as ClassDeclaration;
 
     var fDeclaration = clazz.members[0] as FieldDeclaration;
     VariableDeclaration fNode = fDeclaration.fields.variables[0];
@@ -1886,7 +1886,7 @@
 ''');
     await resolveTestFile();
 
-    var clazz = result.unit!.declarations[0] as ClassDeclaration;
+    var clazz = result.unit.declarations[0] as ClassDeclaration;
 
     var fDeclaration = clazz.members[0] as FieldDeclaration;
     VariableDeclaration fNode = fDeclaration.fields.variables[0];
@@ -1916,7 +1916,7 @@
 ''');
     await resolveTestFile();
 
-    var clazz = result.unit!.declarations[0] as ClassDeclaration;
+    var clazz = result.unit.declarations[0] as ClassDeclaration;
 
     var fDeclaration = clazz.members[0] as FieldDeclaration;
     VariableDeclaration fNode = fDeclaration.fields.variables[0];
@@ -2078,7 +2078,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cNode = unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
@@ -2131,7 +2131,7 @@
 ''');
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var xNode = unit.declarations[0] as ClassDeclaration;
     ClassElement xElement = xNode.declaredElement!;
@@ -2172,7 +2172,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cNode = unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
@@ -2239,7 +2239,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement aImport = unit.declaredElement!.library.imports[0];
     LibraryElement aLibrary = aImport.importedLibrary!;
@@ -2356,7 +2356,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     ClassElement cElement = unitElement.getType('C')!;
@@ -4342,7 +4342,7 @@
 }
 ''');
 
-    var main = result.unit!.declarations[0] as FunctionDeclaration;
+    var main = result.unit.declarations[0] as FunctionDeclaration;
     List<Statement> statements = _getMainStatements(result);
 
     // (int p)
@@ -4735,7 +4735,7 @@
 
     InterfaceType intType = typeProvider.intType;
 
-    var main = result.unit!.declarations[0] as FunctionDeclaration;
+    var main = result.unit.declarations[0] as FunctionDeclaration;
     expect(main.declaredElement, isNotNull);
     expect(main.name.staticElement, isNotNull);
     expect(main.name.staticType, isNull);
@@ -4778,7 +4778,7 @@
 }
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cDeclaration = unit.declarations[0] as ClassDeclaration;
 
@@ -4849,7 +4849,7 @@
 num v;
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     List<Statement> statements = _getMainStatements(result);
 
@@ -5089,7 +5089,7 @@
     String fTypeString = 'double Function(int, {String b, bool c})';
 
     await resolveTestFile();
-    var classDeclaration = result.unit!.declarations[0] as ClassDeclaration;
+    var classDeclaration = result.unit.declarations[0] as ClassDeclaration;
     var methodDeclaration = classDeclaration.members[0] as MethodDeclaration;
     var methodElement = methodDeclaration.declaredElement as MethodElement;
 
@@ -5134,7 +5134,7 @@
     // Validate the arguments at the call site.
     //
     var functionDeclaration =
-        result.unit!.declarations[1] as FunctionDeclaration;
+        result.unit.declarations[1] as FunctionDeclaration;
     var body = functionDeclaration.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
@@ -5157,7 +5157,7 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
     MethodElement callElement = cElement.methods[0];
 
@@ -5183,7 +5183,7 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var main = result.unit!.declarations[0] as FunctionDeclaration;
+    var main = result.unit.declarations[0] as FunctionDeclaration;
     var mainElement = main.declaredElement as FunctionElement;
     ParameterElement parameter = mainElement.parameters[0];
 
@@ -5220,7 +5220,7 @@
 ''');
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     var fooNode = aNode.members[0] as MethodDeclaration;
     var fooElement = fooNode.declaredElement as MethodElement;
 
@@ -5305,7 +5305,7 @@
     await resolveTestFile();
     List<Statement> mainStatements = _getMainStatements(result);
 
-    var foo = result.unit!.declarations[1] as FunctionDeclaration;
+    var foo = result.unit.declarations[1] as FunctionDeclaration;
     ExecutableElement fooElement = foo.declaredElement!;
 
     var statement = mainStatements[0] as ExpressionStatement;
@@ -5452,7 +5452,7 @@
     await resolveTestFile();
     List<Statement> mainStatements = _getMainStatements(result);
 
-    var cNode = result.unit!.declarations[1] as ClassDeclaration;
+    var cNode = result.unit.declarations[1] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
     var mNode = cNode.members[0] as MethodDeclaration;
     var mElement = mNode.declaredElement as MethodElement;
@@ -5509,7 +5509,7 @@
 ''');
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     TypeParameterElement tElement = cNode.declaredElement!.typeParameters[0];
 
     var barNode = cNode.members[1] as MethodDeclaration;
@@ -5535,7 +5535,7 @@
 
     InterfaceType doubleType = typeProvider.doubleType;
 
-    var fNode = result.unit!.declarations[1] as FunctionDeclaration;
+    var fNode = result.unit.declarations[1] as FunctionDeclaration;
     var fElement = fNode.declaredElement as FunctionElement;
 
     var statement = mainStatements[0] as ExpressionStatement;
@@ -5564,7 +5564,7 @@
 
     List<Statement> mainStatements = _getMainStatements(result);
 
-    var fNode = result.unit!.declarations[1] as FunctionDeclaration;
+    var fNode = result.unit.declarations[1] as FunctionDeclaration;
     var fElement = fNode.declaredElement as FunctionElement;
 
     // f<bool, String>(true, 'str');
@@ -6030,7 +6030,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
     ClassElement cClassElement = cClassDeclaration.declaredElement!;
@@ -6129,7 +6129,7 @@
 
     List<Statement> statements = _getMainStatements(result);
 
-    var cDeclaration = result.unit!.declarations[1] as ClassDeclaration;
+    var cDeclaration = result.unit.declarations[1] as ClassDeclaration;
     ClassElement cElement = cDeclaration.declaredElement!;
     FieldElement fElement = cElement.fields[0];
 
@@ -6164,7 +6164,7 @@
 
     List<Statement> statements = _getMainStatements(result);
 
-    var cDeclaration = result.unit!.declarations[1] as ClassDeclaration;
+    var cDeclaration = result.unit.declarations[1] as ClassDeclaration;
     ClassElement cElement = cDeclaration.declaredElement!;
     FieldElement fElement = cElement.fields[0];
 
@@ -6189,7 +6189,7 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var main = result.unit!.declarations[0] as FunctionDeclaration;
+    var main = result.unit.declarations[0] as FunctionDeclaration;
     var mainElement = main.declaredElement as FunctionElement;
     ParameterElement parameter = mainElement.parameters[0];
 
@@ -6232,7 +6232,7 @@
     // TODO(scheglov) Uncomment and fix "unused imports" hint.
 //    expect(result.errors, isEmpty);
 
-    var unitElement = result.unit!.declaredElement!;
+    var unitElement = result.unit.declaredElement!;
     ImportElement myImport = unitElement.library.imports[0];
     PrefixElement myPrefix = myImport.prefix!;
 
@@ -6405,7 +6405,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
     ClassElement cClassElement = cClassDeclaration.declaredElement!;
@@ -6467,7 +6467,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
     ClassElement cClassElement = cClassDeclaration.declaredElement!;
@@ -6504,7 +6504,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
     ClassElement cClassElement = cClassDeclaration.declaredElement!;
@@ -6571,7 +6571,7 @@
 }
 ''');
 
-    var main = result.unit!.declarations[0] as FunctionDeclaration;
+    var main = result.unit.declarations[0] as FunctionDeclaration;
     expect(main.declaredElement, isNotNull);
     expect(main.name.staticElement, isNotNull);
     expect(main.name.staticType, isNull);
@@ -6655,8 +6655,8 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
 
     var methodElement = aNode.members[0].declaredElement as MethodElement;
     var getterElement =
@@ -6784,7 +6784,7 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
 
     var methodElement = aNode.members[0].declaredElement as MethodElement;
     var getterElement =
@@ -6900,7 +6900,7 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
 
     var constructorNode = cNode.members[1] as ConstructorDeclaration;
@@ -6945,16 +6945,16 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement aElement = aNode.declaredElement!;
 
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
     ClassElement bElement = bNode.declaredElement!;
 
-    var cNode = result.unit!.declarations[2] as ClassDeclaration;
+    var cNode = result.unit.declarations[2] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
 
-    var dNode = result.unit!.declarations[3] as ClassDeclaration;
+    var dNode = result.unit.declarations[3] as ClassDeclaration;
     Element dElement = dNode.declaredElement!;
 
     SimpleIdentifier dName = dNode.name;
@@ -7014,16 +7014,16 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var aNode = result.unit!.declarations[0] as ClassDeclaration;
+    var aNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement aElement = aNode.declaredElement!;
 
-    var bNode = result.unit!.declarations[1] as ClassDeclaration;
+    var bNode = result.unit.declarations[1] as ClassDeclaration;
     ClassElement bElement = bNode.declaredElement!;
 
-    var cNode = result.unit!.declarations[2] as ClassDeclaration;
+    var cNode = result.unit.declarations[2] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
 
-    var dNode = result.unit!.declarations[3] as ClassTypeAlias;
+    var dNode = result.unit.declarations[3] as ClassTypeAlias;
     Element dElement = dNode.declaredElement!;
 
     SimpleIdentifier dName = dNode.name;
@@ -7082,7 +7082,7 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var enumNode = result.unit!.declarations[0] as EnumDeclaration;
+    var enumNode = result.unit.declarations[0] as EnumDeclaration;
     ClassElement enumElement = enumNode.declaredElement!;
 
     SimpleIdentifier dName = enumNode.name;
@@ -7123,7 +7123,7 @@
     ClassElement doubleElement = doubleType.element;
     ClassElement intElement = intType.element;
 
-    var cNode = result.unit!.declarations[0] as ClassDeclaration;
+    var cNode = result.unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
 
     // The class name identifier.
@@ -7248,7 +7248,7 @@
 
     // topFunction()
     {
-      var node = result.unit!.declarations[0] as FunctionDeclaration;
+      var node = result.unit.declarations[0] as FunctionDeclaration;
       expect(node.declaredElement, isNotNull);
       assertType(node.declaredElement!.type, 'int Function(double)');
 
@@ -7281,7 +7281,7 @@
 
     // topGetter()
     {
-      var node = result.unit!.declarations[1] as FunctionDeclaration;
+      var node = result.unit.declarations[1] as FunctionDeclaration;
       expect(node.declaredElement, isNotNull);
       assertType(node.declaredElement!.type, 'int Function()');
 
@@ -7299,7 +7299,7 @@
 
     // topSetter()
     {
-      var node = result.unit!.declarations[2] as FunctionDeclaration;
+      var node = result.unit.declarations[2] as FunctionDeclaration;
       expect(node.declaredElement, isNotNull);
       assertType(node.declaredElement!.type, 'void Function(double)');
 
@@ -7341,7 +7341,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     var cNode = unit.declarations[0] as ClassDeclaration;
@@ -7388,7 +7388,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var cNode = unit.declarations[0] as ClassDeclaration;
     ClassElement cElement = cNode.declaredElement!;
@@ -7432,7 +7432,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     {
@@ -7474,7 +7474,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     var variableDeclaration =
@@ -7518,7 +7518,7 @@
     String fTypeString = 'double Function(int, {String b, bool c})';
 
     await resolveTestFile();
-    var fDeclaration = result.unit!.declarations[0] as FunctionDeclaration;
+    var fDeclaration = result.unit.declarations[0] as FunctionDeclaration;
     var fElement = fDeclaration.declaredElement as FunctionElement;
 
     InterfaceType doubleType = typeProvider.doubleType;
@@ -7571,7 +7571,7 @@
     //
     // Validate the arguments at the call site.
     //
-    var mainDeclaration = result.unit!.declarations[1] as FunctionDeclaration;
+    var mainDeclaration = result.unit.declarations[1] as FunctionDeclaration;
     var body = mainDeclaration.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
@@ -7589,7 +7589,7 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var alias = unit.declarations[0] as FunctionTypeAlias;
     TypeAliasElement aliasElement = alias.declaredElement!;
@@ -7623,7 +7623,7 @@
 ''';
     addTestFile(content);
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
     var aNode = unit.declarations[0] as ClassDeclaration;
@@ -7870,7 +7870,7 @@
 c.A a2;
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     ImportElement bImport = unit.declaredElement!.library.imports[0];
     ImportElement cImport = unit.declaredElement!.library.imports[1];
@@ -7915,7 +7915,7 @@
 typedef void F(int p);
 ''');
     await resolveTestFile();
-    CompilationUnit unit = result.unit!;
+    CompilationUnit unit = result.unit;
 
     var fNode = unit.declarations[1] as FunctionTypeAlias;
     TypeAliasElement fElement = fNode.declaredElement!;
@@ -8033,7 +8033,7 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var unitElement = result.unit!.declaredElement!;
+    var unitElement = result.unit.declaredElement!;
     var foo = unitElement.library.imports[0].prefix;
 
     List<Statement> statements = _getMainStatements(result);
@@ -8117,7 +8117,7 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var unitElement = result.unit!.declaredElement!;
+    var unitElement = result.unit.declaredElement!;
     var mathImport = unitElement.library.imports[0];
     var foo = mathImport.prefix;
 
@@ -8163,7 +8163,7 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var unitElement = result.unit!.declaredElement!;
+    var unitElement = result.unit.declaredElement!;
     var mathImport = unitElement.library.imports[0];
     var foo = mathImport.prefix;
     var randomElement = mathImport.importedLibrary!.getType('Random')!;
@@ -8716,7 +8716,7 @@
   }
 
   List<Statement> _getMainStatements(ResolvedUnitResult result) {
-    for (var declaration in result.unit!.declarations) {
+    for (var declaration in result.unit.declarations) {
       if (declaration is FunctionDeclaration &&
           declaration.name.name == 'main') {
         var body = declaration.functionExpression.body as BlockFunctionBody;
@@ -8728,7 +8728,7 @@
 
   TopLevelVariableElement _getTopLevelVariable(
       ResolvedUnitResult result, String name) {
-    for (var variable in result.unit!.declaredElement!.topLevelVariables) {
+    for (var variable in result.unit.declaredElement!.topLevelVariables) {
       if (variable.name == name) {
         return variable;
       }
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 0ee0dc7..29a974a 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -448,9 +448,9 @@
     ResolvedUnitResult partResult1 = await driver.getResultValid(part1);
     ResolvedUnitResult partResult2 = await driver.getResultValid(part2);
 
-    CompilationUnit libUnit = libResult.unit!;
-    CompilationUnit partUnit1 = partResult1.unit!;
-    CompilationUnit partUnit2 = partResult2.unit!;
+    CompilationUnit libUnit = libResult.unit;
+    CompilationUnit partUnit1 = partResult1.unit;
+    CompilationUnit partUnit2 = partResult2.unit;
 
     CompilationUnitElement unitElement = libUnit.declaredElement!;
     CompilationUnitElement partElement1 = partUnit1.declaredElement!;
@@ -676,7 +676,7 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A', 'int');
+      _assertTopLevelVarType(ar.unit, 'A', 'int');
     }
     allResults.clear();
 
@@ -695,7 +695,7 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A', 'double');
+      _assertTopLevelVarType(ar.unit, 'A', 'double');
     }
   }
 
@@ -751,14 +751,14 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A1', 'int');
-      _assertTopLevelVarType(ar.unit!, 'A2', 'int');
+      _assertTopLevelVarType(ar.unit, 'A1', 'int');
+      _assertTopLevelVarType(ar.unit, 'A2', 'int');
     }
     {
       ResolvedUnitResult br = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == b);
-      _assertTopLevelVarType(br.unit!, 'B1', 'int');
+      _assertTopLevelVarType(br.unit, 'B1', 'int');
     }
 
     // Clear the results and update "a".
@@ -778,14 +778,14 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A1', 'double');
-      _assertTopLevelVarType(ar.unit!, 'A2', 'double');
+      _assertTopLevelVarType(ar.unit, 'A1', 'double');
+      _assertTopLevelVarType(ar.unit, 'A2', 'double');
     }
     {
       ResolvedUnitResult br = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == b);
-      _assertTopLevelVarType(br.unit!, 'B1', 'double');
+      _assertTopLevelVarType(br.unit, 'B1', 'double');
     }
   }
 
@@ -798,7 +798,7 @@
       expect(allResults, hasLength(1));
       var result = allResults[0] as ResolvedUnitResult;
       expect(result.path, testFile);
-      _assertTopLevelVarType(result.unit!, 'V', 'int');
+      _assertTopLevelVarType(result.unit, 'V', 'int');
     }
 
     // Update the file, but don't notify the driver.
@@ -821,7 +821,7 @@
       expect(allResults, hasLength(1));
       var result = allResults[0] as ResolvedUnitResult;
       expect(result.path, testFile);
-      _assertTopLevelVarType(result.unit!, 'V', 'double');
+      _assertTopLevelVarType(result.unit, 'V', 'double');
     }
   }
 
@@ -836,7 +836,7 @@
 class C {}
 ''');
     var result = await driver.getResultValid(testFile);
-    var atD = AstFinder.getClass(result.unit!, 'C').metadata[0];
+    var atD = AstFinder.getClass(result.unit, 'C').metadata[0];
     var atDI = atD.elementAnnotation as ElementAnnotationImpl;
     var value = atDI.evaluationResult!.value;
     // That is illegal.
@@ -853,7 +853,7 @@
 }
 ''');
     var result = await driver.getResultValid(testFile);
-    var atD = AstFinder.getClass(result.unit!, 'C').metadata[0];
+    var atD = AstFinder.getClass(result.unit, 'C').metadata[0];
     var atDI = atD.elementAnnotation as ElementAnnotationImpl;
     var value = atDI.evaluationResult!.value!;
     expect(value.type, isNotNull);
@@ -869,7 +869,7 @@
 @x class C {}
 ''');
     var result = await driver.getResultValid(testFile);
-    Annotation at_x = AstFinder.getClass(result.unit!, 'C').metadata[0];
+    Annotation at_x = AstFinder.getClass(result.unit, 'C').metadata[0];
     expect(at_x.elementAnnotation!.computeConstantValue()!.toIntValue(), 1);
   }
 
@@ -879,7 +879,7 @@
 const y = x + 1;
 ''');
     var result = await driver.getResultValid(testFile);
-    var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x')
+    var x = AstFinder.getTopLevelVariableElement(result.unit, 'x')
         as TopLevelVariableElementImpl;
     _expectCircularityError(x.evaluationResult!);
   }
@@ -890,8 +890,8 @@
 const y = 1;
 ''');
     var result = await driver.getResultValid(testFile);
-    var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
-    var y = AstFinder.getTopLevelVariableElement(result.unit!, 'y');
+    var x = AstFinder.getTopLevelVariableElement(result.unit, 'x');
+    var y = AstFinder.getTopLevelVariableElement(result.unit, 'y');
     expect(x.computeConstantValue()!.toIntValue(), 2);
     expect(y.computeConstantValue()!.toIntValue(), 1);
   }
@@ -907,7 +907,7 @@
 class B {}
 ''');
     var result = await driver.getResultValid(testFile);
-    var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
+    var x = AstFinder.getTopLevelVariableElement(result.unit, 'x');
     expect(x.computeConstantValue(), isNotNull);
   }
 
@@ -973,7 +973,7 @@
 const x = const Derived();
 ''');
     var result = await driver.getResultValid(testFile);
-    var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
+    var x = AstFinder.getTopLevelVariableElement(result.unit, 'x');
     expect(x.computeConstantValue(), isNotNull);
   }
 
@@ -982,7 +982,7 @@
 const x = 1;
 ''');
     var result = await driver.getResultValid(testFile);
-    var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
+    var x = AstFinder.getTopLevelVariableElement(result.unit, 'x');
     expect(x.computeConstantValue()!.toIntValue(), 1);
   }
 
@@ -1528,7 +1528,7 @@
     expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
 
-    var f = result.unit!.declarations[0] as FunctionDeclaration;
+    var f = result.unit.declarations[0] as FunctionDeclaration;
     assertType(f.declaredElement!.type, 'int Function()');
     assertType(f.returnType!.typeOrThrow, 'int');
 
@@ -1673,7 +1673,7 @@
     await waitForIdleWithoutExceptions();
 
     ResolvedUnitResult result = await driver.getResultValid(testFile);
-    _assertClassFieldType(result.unit!, 'C', 'f', 'int');
+    _assertClassFieldType(result.unit, 'C', 'f', 'int');
   }
 
   test_getResult_inferTypes_instanceMethod() async {
@@ -1688,8 +1688,8 @@
     await waitForIdleWithoutExceptions();
 
     ResolvedUnitResult result = await driver.getResultValid(testFile);
-    _assertClassMethodReturnType(result.unit!, 'A', 'm', 'int');
-    _assertClassMethodReturnType(result.unit!, 'B', 'm', 'int');
+    _assertClassMethodReturnType(result.unit, 'A', 'm', 'int');
+    _assertClassMethodReturnType(result.unit, 'B', 'm', 'int');
   }
 
   test_getResult_invalid_annotation_functionAsConstructor() async {
@@ -1701,7 +1701,7 @@
 ''', priority: true);
 
     ResolvedUnitResult result = await driver.getResultValid(testFile);
-    ClassDeclaration c = result.unit!.declarations[1] as ClassDeclaration;
+    ClassDeclaration c = result.unit.declarations[1] as ClassDeclaration;
     Annotation a = c.metadata[0];
     expect(a.name.name, 'fff');
     expect(a.name.staticElement, isFunctionElement);
@@ -1788,7 +1788,7 @@
 ''');
 
     var result = await driver.getResultValid(path);
-    var languageVersion = result.unit!.languageVersionToken!;
+    var languageVersion = result.unit.languageVersionToken!;
     expect(languageVersion.major, 2);
     expect(languageVersion.minor, 7);
   }
@@ -1871,7 +1871,7 @@
 
     ResolvedUnitResult result = await driver.getResultValid(path);
     expect(result, isNotNull);
-    expect(result.unit!.declaredElement!.classes.map((e) => e.name), ['A']);
+    expect(result.unit.declaredElement!.classes.map((e) => e.name), ['A']);
   }
 
   test_getResult_recursiveFlatten() async {
@@ -1904,18 +1904,18 @@
 
     {
       ResolvedUnitResult result = await driver.getResultValid(b);
-      expect(_getImportSource(result.unit!, 0).uri.toString(),
+      expect(_getImportSource(result.unit, 0).uri.toString(),
           'package:test/a.dart');
-      _assertTopLevelVarType(result.unit!, 'VB', 'A<int>');
+      _assertTopLevelVarType(result.unit, 'VB', 'A<int>');
     }
 
     {
       ResolvedUnitResult result = await driver.getResultValid(c);
       expect(
-        _getImportSource(result.unit!, 0).uri,
+        _getImportSource(result.unit, 0).uri,
         toUri('/test/lib/a.dart'),
       );
-      _assertTopLevelVarType(result.unit!, 'VC', 'A<double>');
+      _assertTopLevelVarType(result.unit, 'VC', 'A<double>');
     }
   }
 
@@ -1938,8 +1938,8 @@
 
     {
       ResolvedUnitResult result = await driver.getResultValid(a);
-      _assertTopLevelVarType(result.unit!, 'A1', 'int');
-      _assertTopLevelVarType(result.unit!, 'A2', 'int');
+      _assertTopLevelVarType(result.unit, 'A1', 'int');
+      _assertTopLevelVarType(result.unit, 'A2', 'int');
     }
 
     // Update "a" so that "A1" is now "double".
@@ -1958,8 +1958,8 @@
 
     {
       ResolvedUnitResult result = await driver.getResultValid(a);
-      _assertTopLevelVarType(result.unit!, 'A1', 'double');
-      _assertTopLevelVarType(result.unit!, 'A2', 'double');
+      _assertTopLevelVarType(result.unit, 'A1', 'double');
+      _assertTopLevelVarType(result.unit, 'A2', 'double');
     }
   }
 
@@ -2094,7 +2094,7 @@
 ''');
 
     var result = await driver.getResultValid(b);
-    var c = _getTopLevelVar(result.unit!, 'c');
+    var c = _getTopLevelVar(result.unit, 'c');
     var typeC = c.declaredElement!.type as InterfaceType;
     // The class C has an old field 'foo', not the new 'bar'.
     expect(typeC.element.getField('foo'), isNotNull);
@@ -2533,15 +2533,15 @@
     {
       ResolvedUnitResult result = await driver.getResultValid(a);
       expect(result.errors, isEmpty);
-      _assertTopLevelVarType(result.unit!, 'c', 'C');
+      _assertTopLevelVarType(result.unit, 'c', 'C');
     }
 
     // Now c.dart can be resolved without errors in the context of a.dart
     {
       ResolvedUnitResult result = await driver.getResultValid(c);
       expect(result.errors, isEmpty);
-      _assertTopLevelVarType(result.unit!, 'a', 'A');
-      _assertTopLevelVarType(result.unit!, 'b', 'B');
+      _assertTopLevelVarType(result.unit, 'a', 'A');
+      _assertTopLevelVarType(result.unit, 'b', 'B');
     }
   }
 
@@ -2572,8 +2572,8 @@
     // So, A and B references are resolved.
     ResolvedUnitResult result = await driver.getResultValid(c);
     expect(result.errors, isEmpty);
-    _assertTopLevelVarType(result.unit!, 'a', 'A');
-    _assertTopLevelVarType(result.unit!, 'b', 'B');
+    _assertTopLevelVarType(result.unit, 'a', 'A');
+    _assertTopLevelVarType(result.unit, 'b', 'B');
   }
 
   test_part_getResult_changePart_invalidatesLibraryCycle() async {
@@ -2883,13 +2883,13 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A', 'int');
+      _assertTopLevelVarType(ar.unit, 'A', 'int');
     }
     {
       ResolvedUnitResult br = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == b);
-      _assertTopLevelVarType(br.unit!, 'B', 'int');
+      _assertTopLevelVarType(br.unit, 'B', 'int');
     }
     allResults.clear();
 
@@ -2907,7 +2907,7 @@
       ResolvedUnitResult ar = allResults
           .whereType<ResolvedUnitResult>()
           .firstWhere((r) => r.path == a);
-      _assertTopLevelVarType(ar.unit!, 'A', 'double');
+      _assertTopLevelVarType(ar.unit, 'A', 'double');
     }
   }
 
@@ -3119,7 +3119,7 @@
     expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
 
-    var f = result.unit!.declarations[0] as FunctionDeclaration;
+    var f = result.unit.declarations[0] as FunctionDeclaration;
     assertType(f.declaredElement!.type, 'int Function()');
     assertType(f.returnType!.typeOrThrow, 'int');
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 63c5831..c61fa44 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -1734,7 +1734,7 @@
   Future<void> _indexTestUnit(String code) async {
     await resolveTestCode(code);
 
-    var indexBuilder = indexUnit(result.unit!);
+    var indexBuilder = indexUnit(result.unit);
     var indexBytes = indexBuilder.toBuffer();
     index = AnalysisDriverUnitIndex.fromBuffer(indexBytes);
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index a36d472..983d7bb 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -42,7 +42,7 @@
       expect(node.name.name, 'A');
       expect(
         node.name.offset,
-        this.result.content!.indexOf('A {} // 1'),
+        this.result.content.indexOf('A {} // 1'),
       );
     }
 
@@ -53,7 +53,7 @@
       expect(node.name.name, 'A');
       expect(
         node.name.offset,
-        this.result.content!.indexOf('A {} // 2'),
+        this.result.content.indexOf('A {} // 2'),
       );
     }
   }
@@ -66,7 +66,7 @@
     await resolveTestCode(r'''
 part 'a.dart';
 ''');
-    var library = this.result.unit!.declaredElement!.library;
+    var library = this.result.unit.declaredElement!.library;
     var element = library.getType('A')!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassDeclaration;
@@ -139,7 +139,7 @@
       expect(node.name!.name, 'named');
       expect(
         node.name!.offset,
-        this.result.content!.indexOf('named(); // 1'),
+        this.result.content.indexOf('named(); // 1'),
       );
     }
 
@@ -150,7 +150,7 @@
       expect(node.name!.name, 'named');
       expect(
         node.name!.offset,
-        this.result.content!.indexOf('named(); // 2'),
+        this.result.content.indexOf('named(); // 2'),
       );
     }
   }
@@ -169,7 +169,7 @@
       expect(node.name, isNull);
       expect(
         node.returnType.offset,
-        this.result.content!.indexOf('A(); // 1'),
+        this.result.content.indexOf('A(); // 1'),
       );
     }
 
@@ -180,7 +180,7 @@
       expect(node.name, isNull);
       expect(
         node.returnType.offset,
-        this.result.content!.indexOf('A(); // 2'),
+        this.result.content.indexOf('A(); // 2'),
       );
     }
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 5b33cdf..dab758b 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -64,7 +64,7 @@
 class SearchTest extends PubPackageResolutionTest {
   AnalysisDriver get driver => driverFor(testFilePath);
 
-  CompilationUnitElement get resultUnitElement => result.unit!.declaredElement!;
+  CompilationUnitElement get resultUnitElement => result.unit.declaredElement!;
 
   String get testUriStr => 'package:test/test.dart';
 
@@ -378,7 +378,7 @@
     var element = findElement.unnamedConstructor('A');
 
     var otherUnitResult = await driver.getResult2(other) as ResolvedUnitResult;
-    CompilationUnit otherUnit = otherUnitResult.unit!;
+    CompilationUnit otherUnit = otherUnitResult.unit;
     Element main = otherUnit.declaredElement!.functions[0];
     var expected = [
       ExpectedResult(main, SearchResultKind.REFERENCE,
diff --git a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
index 6e96379..6beca53 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
@@ -91,7 +91,7 @@
 ''');
     var element = findNode.classDeclaration('A').declaredElement!;
     var resolvedUnit = (await helper.getResolvedUnitByElement(element))!;
-    expect(resolvedUnit.unit!.declarations, hasLength(2));
+    expect(resolvedUnit.unit.declarations, hasLength(2));
   }
 
   test_getTopLevelPropertyAccessor_defined_getter() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 5d863b5..6a9d493 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -476,8 +476,8 @@
     expect(aUnitResult.uri, Uri.parse('package:test/a.dart'));
     expect(aUnitResult.content, aContent);
     expect(aUnitResult.unit, isNotNull);
-    expect(aUnitResult.unit!.directives, hasLength(1));
-    expect(aUnitResult.unit!.declarations, hasLength(1));
+    expect(aUnitResult.unit.directives, hasLength(1));
+    expect(aUnitResult.unit.declarations, hasLength(1));
     expect(aUnitResult.errors, isEmpty);
 
     var bUnitResult = resolvedLibrary.units[1];
@@ -485,8 +485,8 @@
     expect(bUnitResult.uri, Uri.parse('package:test/b.dart'));
     expect(bUnitResult.content, bContent);
     expect(bUnitResult.unit, isNotNull);
-    expect(bUnitResult.unit!.directives, hasLength(1));
-    expect(bUnitResult.unit!.declarations, hasLength(2));
+    expect(bUnitResult.unit.directives, hasLength(1));
+    expect(bUnitResult.unit.declarations, hasLength(2));
     expect(bUnitResult.errors, isNotEmpty);
 
     var aDeclaration = resolvedLibrary.getElementDeclaration(aClass)!;
@@ -588,7 +588,7 @@
     expect(result.path, testPath);
     expect(result.uri, Uri.parse('package:test/test.dart'));
     expect(result.units, hasLength(1));
-    expect(result.units[0].unit!.declaredElement, isNotNull);
+    expect(result.units[0].unit.declaredElement, isNotNull);
   }
 
   test_getResolvedLibraryByElement2_differentSession() async {
@@ -617,7 +617,7 @@
     expect(unitResult.session, session);
     expect(unitResult.path, testPath);
     expect(unitResult.uri, Uri.parse('package:test/test.dart'));
-    expect(unitResult.unit!.declarations, hasLength(2));
+    expect(unitResult.unit.declarations, hasLength(2));
     expect(unitResult.typeProvider, isNotNull);
     expect(unitResult.libraryElement, isNotNull);
   }
diff --git a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
index b6f51e2..c594940 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -46,7 +46,7 @@
   test_locate_CompilationUnit() async {
     await resolveTestCode('// only comment');
 
-    var unitElement = result.unit!.declaredElement!;
+    var unitElement = result.unit.declaredElement!;
 
     var element = ElementLocator.locate(result.unit);
     expect(element, same(unitElement));
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index 40ba0f8..1db519f 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -1218,9 +1218,6 @@
     var expression = findNode.topVariableDeclarationByName(name).initializer!;
 
     var unit = this.result.unit;
-    if (unit == null) {
-      throw StateError('analysis result unit is null');
-    }
     var source = unit.declaredElement!.source;
     var errorListener = GatheringErrorListener();
     var errorReporter = ErrorReporter(
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index ca6326b..3c85527 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -74,8 +74,8 @@
   Future<void> resolveTestFile() async {
     var path = convertPath(_testFile);
     result = await resolveFile(path);
-    findNode = FindNode(result.content!, result.unit!);
-    findElement = FindElement(result.unit!);
+    findNode = FindNode(result.content, result.unit);
+    findElement = FindElement(result.unit);
   }
 
   void setUp() {
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index 2fb3462..b2bceea 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -351,7 +351,7 @@
     List<String> expectedArguments,
   ) {
     var argumentStrings = argumentList.arguments
-        .map((e) => result.content!.substring(e.offset, e.end))
+        .map((e) => result.content.substring(e.offset, e.end))
         .toList();
     expect(argumentStrings, expectedArguments);
   }
@@ -383,7 +383,7 @@
     }
 
     var argumentStrings = argumentList.arguments
-        .map((e) => result.content!.substring(e.offset, e.end))
+        .map((e) => result.content.substring(e.offset, e.end))
         .toList();
     expect(argumentStrings, expectedArguments);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 7d71d57..2e49834 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -214,7 +214,7 @@
     result = await resolveFile(convertPath('$testPackageLibPath/a.dart'));
     assertErrorsInResolvedUnit(result, []);
 
-    var bElement = FindElement(result.unit!).field('b') as ConstVariableElement;
+    var bElement = FindElement(result.unit).field('b') as ConstVariableElement;
     var bValue = bElement.evaluationResult!.value!;
     var superFields = bValue.getField(GenericState.SUPERCLASS_FIELD);
     expect(superFields!.getField('f1')!.toBoolValue(), false);
diff --git a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
index e32e7e8..daa949c 100644
--- a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
@@ -152,7 +152,7 @@
   }
 
   void _fillLibraries([LibraryElement? library]) {
-    library ??= result.unit!.declaredElement!.library;
+    library ??= result.unit.declaredElement!.library;
     var uriStr = library.source.uri.toString();
     if (!libraries.containsKey(uriStr)) {
       libraries[uriStr] = library;
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 2080ec9..3b2f5a4 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -924,8 +924,8 @@
     result = await resolveFile(path);
     expect(result.state, ResultState.VALID);
 
-    findNode = FindNode(result.content!, result.unit!);
-    findElement = FindElement(result.unit!);
+    findNode = FindNode(result.content, result.unit);
+    findElement = FindElement(result.unit);
   }
 
   /// Create a new file with the [path] and [content], resolve it into [result].
diff --git a/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart b/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
index a24235f..690050e 100644
--- a/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
+++ b/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
@@ -1102,7 +1102,7 @@
   Future<void> _assertHasReturn(String code, int n, bool expected) async {
     await resolveTestCode(code);
 
-    var function = result.unit!.declarations.last as FunctionDeclaration;
+    var function = result.unit.declarations.last as FunctionDeclaration;
     var body = function.functionExpression.body as BlockFunctionBody;
     Statement statement = body.block.statements[n];
     expect(ExitDetector.exits(statement), expected);
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
index 31546d9..0266782 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
@@ -111,7 +111,7 @@
       error(HintCode.UNUSED_ELEMENT, 96, 15),
     ]);
     var mixins =
-        result.unit!.declaredElement!.getType('_LocalDirectory')!.mixins;
+        result.unit.declaredElement!.getType('_LocalDirectory')!.mixins;
     assertType(mixins[0], 'ForwardingDirectory<_LocalDirectory>');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index 72f8042..1f43b21 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -300,7 +300,7 @@
       error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 65, 3),
     ]);
     // Instantiate-to-bounds should have instantiated "Bar" to "Bar<Foo>".
-    assertType(result.unit!.declaredElement!.getType('Baz')!.supertype,
+    assertType(result.unit.declaredElement!.getType('Baz')!.supertype,
         'Bar<Foo<dynamic>>');
   }
 
diff --git a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
index 399d2e4..4212464 100644
--- a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
@@ -28,7 +28,7 @@
 
   Future<void> resolve(String content) async {
     await resolveTestCode(content);
-    var contextUnit = LinterContextUnit(result.content!, result.unit!);
+    var contextUnit = LinterContextUnit(result.content, result.unit);
 
     final libraryElement = result.libraryElement;
     final analysisContext = libraryElement.session.analysisContext;
diff --git a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
index e7b1ac5..87a1477 100644
--- a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
+++ b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
@@ -347,8 +347,8 @@
   }
 
   void _assertTypeAnnotations() {
-    var code = result.content!;
-    var unit = result.unit!;
+    var code = result.content;
+    var unit = result.unit;
 
     var types = <int, String>{};
     {
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index 21fa9c9..4840db6 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -22,7 +22,7 @@
   // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
   //  test cases.
   CompilationUnitElement get _resultUnitElement {
-    return result.unit!.declaredElement!;
+    return result.unit.declaredElement!;
   }
 
   test_asyncClosureReturnType_flatten() async {
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index 6d75b6f..f192694 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -196,7 +196,7 @@
         });
       } else {
         String _formatError(AnalysisError e) {
-          var locationInfo = result.unit!.lineInfo!.getLocation(e.offset);
+          var locationInfo = result.unit.lineInfo!.getLocation(e.offset);
           return '$locationInfo: ${e.errorCode}: ${e.message}';
         }
 
@@ -209,7 +209,7 @@
 
   results.forEach((testUri, result) {
     dataComputer.computeUnitData(
-        driver.testingData!, result.unit!, actualMapFor(testUri));
+        driver.testingData!, result.unit, actualMapFor(testUri));
   });
   var compiledData = AnalyzerCompiledData<T>(
       testData.code, testData.entryPoint, actualMaps, globalData);
diff --git a/pkg/analyzer_plugin/lib/plugin/navigation_mixin.dart b/pkg/analyzer_plugin/lib/plugin/navigation_mixin.dart
index de11deb..07dbddb 100644
--- a/pkg/analyzer_plugin/lib/plugin/navigation_mixin.dart
+++ b/pkg/analyzer_plugin/lib/plugin/navigation_mixin.dart
@@ -27,7 +27,7 @@
     var length = parameters.length;
     if (offset < 0 && length < 0) {
       offset = 0;
-      length = result.content?.length ?? 0;
+      length = result.content.length;
     }
     return DartNavigationRequestImpl(resourceProvider, offset, length, result);
   }
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 4755515..0e6ea1a 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -252,7 +252,7 @@
     }
     var timeStamp = result.exists ? 0 : -1;
 
-    var declaredUnit = result.unit?.declaredElement;
+    var declaredUnit = result.unit.declaredElement;
     var libraryUnit = declaredUnit?.library.definingCompilationUnit;
 
     DartFileEditBuilderImpl? libraryEditBuilder;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 6de2511..f6b890f 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1353,7 +1353,7 @@
 
   @override
   void format(SourceRange range) {
-    var newContent = resolvedUnit.content!;
+    var newContent = resolvedUnit.content;
     var newRangeOffset = range.offset;
     var newRangeLength = range.length;
     for (var edit in fileEdit.edits) {
@@ -1437,7 +1437,7 @@
     LibraryDirective? libraryDirective;
     var importDirectives = <ImportDirective>[];
     PartDirective? partDirective;
-    var unit = resolvedUnit.unit!;
+    var unit = resolvedUnit.unit;
     for (var directive in unit.directives) {
       if (directive is LibraryDirective) {
         libraryDirective = directive;
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/inherited_reference_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/inherited_reference_contributor.dart
index a605f4e..cf0a57b 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/inherited_reference_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/inherited_reference_contributor.dart
@@ -35,7 +35,7 @@
   Future<void> computeSuggestions(
       DartCompletionRequest request, CompletionCollector collector) async {
     var target =
-        CompletionTarget.forOffset(request.result.unit!, request.offset);
+        CompletionTarget.forOffset(request.result.unit, request.offset);
     var optype = OpType.forCompletion(target, request.offset);
     if (!optype.includeIdentifiers) {
       return;
@@ -59,7 +59,7 @@
     CompletionTarget? target,
     OpType? optype,
   }) async {
-    target ??= CompletionTarget.forOffset(request.result.unit!, request.offset,
+    target ??= CompletionTarget.forOffset(request.result.unit, request.offset,
         entryPoint: entryPoint);
     optype ??= OpType.forCompletion(target, request.offset);
     if (!optype.includeIdentifiers) {
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index 1009c12..d190e3d 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -53,7 +53,7 @@
   Expression? _computeDotTarget(
       DartCompletionRequest request, AstNode? entryPoint) {
     var target = CompletionTarget.forOffset(
-        request.result.unit!, request.offset,
+        request.result.unit, request.offset,
         entryPoint: entryPoint);
     var node = target.containingNode;
     if (node is MethodInvocation) {
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 7d3e886..fd398ed 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -790,7 +790,7 @@
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
 
-    var A = unit?.declarations[1] as ClassDeclaration;
+    var A = unit.declarations[1] as ClassDeclaration;
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -821,7 +821,7 @@
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
 
-    var A = unit?.declarations[1] as ClassDeclaration;
+    var A = unit.declarations[1] as ClassDeclaration;
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -857,7 +857,7 @@
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
 
-    var A = unit?.declarations[1] as ClassDeclaration;
+    var A = unit.declarations[1] as ClassDeclaration;
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -1026,7 +1026,7 @@
 ''';
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
-    var g = unit?.declarations[1] as FunctionDeclaration;
+    var g = unit.declarations[1] as FunctionDeclaration;
     var body = g.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
@@ -1048,7 +1048,7 @@
     addSource(path, content);
 
     var unit = (await resolveFile(path)).unit;
-    var f = unit?.declarations[0] as FunctionDeclaration;
+    var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
@@ -1068,7 +1068,7 @@
     var content = 'f(int a, [bool b = false, String c]) {}';
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
-    var f = unit?.declarations[0] as FunctionDeclaration;
+    var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
@@ -1088,7 +1088,7 @@
     var content = 'f(int i, String s) {}';
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
-    var f = unit?.declarations[0] as FunctionDeclaration;
+    var f = unit.declarations[0] as FunctionDeclaration;
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
@@ -1110,7 +1110,7 @@
 }''';
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
-    var f = unit?.declarations[0] as FunctionDeclaration;
+    var f = unit.declarations[0] as FunctionDeclaration;
     var body = f.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
@@ -1133,7 +1133,7 @@
 }''';
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
-    var f = unit?.declarations[0] as FunctionDeclaration;
+    var f = unit.declarations[0] as FunctionDeclaration;
     var body = f.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
@@ -1330,7 +1330,7 @@
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
-        var typeProvider = unit!.declaredElement!.library.typeProvider;
+        var typeProvider = unit.declaredElement!.library.typeProvider;
         builder.writeType(typeProvider.dynamicType);
       });
     });
@@ -1543,7 +1543,7 @@
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
-        var typeProvider = unit!.declaredElement!.library.typeProvider;
+        var typeProvider = unit.declaredElement!.library.typeProvider;
         builder.writeType(typeProvider.dynamicType, required: true);
       });
     });
@@ -1690,13 +1690,13 @@
 
   Future<ClassElement> _getClassElement(String path, String name) async {
     var result = (await resolveFile(path)).unit;
-    return result!.declaredElement!.getType(name)!;
+    return result.declaredElement!.getType(name)!;
   }
 
   Future<PropertyAccessorElement> _getTopLevelAccessorElement(
       String path, String name) async {
     var result = (await resolveFile(path)).unit;
-    return result!.declaredElement!.accessors.firstWhere((v) => v.name == name);
+    return result.declaredElement!.accessors.firstWhere((v) => v.name == name);
   }
 
   Future<InterfaceType> _getType(
@@ -1720,7 +1720,7 @@
     addSource(path, '''var f = () {}''');
 
     var resolvedUnit = await resolveFile(path);
-    var findNode = FindNode(resolvedUnit.content!, resolvedUnit.unit!);
+    var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
     var builder = newBuilder();
@@ -1737,7 +1737,7 @@
     addSource(path, 'String f() {}');
 
     var resolvedUnit = await resolveFile(path);
-    var findNode = FindNode(resolvedUnit.content!, resolvedUnit.unit!);
+    var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
     var builder = newBuilder();
@@ -1850,7 +1850,7 @@
     addSource(path, 'String f() {}');
 
     var resolvedUnit = await resolveFile(path);
-    var findNode = FindNode(resolvedUnit.content!, resolvedUnit.unit!);
+    var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var type = findNode.typeAnnotation('String');
 
     var builder = newBuilder();
@@ -1873,7 +1873,7 @@
 class C extends B {}
 ''');
     var unit = (await resolveFile(path)).unit;
-    var classC = unit?.declarations[2] as ClassDeclaration;
+    var classC = unit.declarations[2] as ClassDeclaration;
     var builder = DartLinkedEditBuilderImpl(MockEditBuilderImpl());
     builder.addSuperTypesAsSuggestions(
       classC.declaredElement?.instantiate(
@@ -2895,10 +2895,10 @@
     {
       var unitResult = (await resolveFile(path)).unit;
       if (targetMixinName != null) {
-        targetElement = unitResult!.declaredElement!.mixins
+        targetElement = unitResult.declaredElement!.mixins
             .firstWhere((e) => e.name == targetMixinName);
       } else {
-        targetElement = unitResult!.declaredElement!.classes
+        targetElement = unitResult.declaredElement!.classes
             .firstWhere((e) => e.name == targetClassName);
       }
     }
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 71b649d..742f070 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -954,9 +954,9 @@
     newFile(path, content: content);
 
     var result = await resolveFile(path);
-    findElement = FindElement(result.unit!);
+    findElement = FindElement(result.unit);
 
-    target = CompletionTarget.forOffset(result.unit!, offset!);
+    target = CompletionTarget.forOffset(result.unit, offset!);
   }
 
   static String _executableNameStr(ExecutableElement executable) {
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
index 3c8fe89..79c9e0c 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
@@ -50,7 +50,7 @@
     //
     var resolvedUnit = await resolveFile(testPath);
     var completionTarget =
-        CompletionTarget.forOffset(resolvedUnit.unit!, completionOffset);
+        CompletionTarget.forOffset(resolvedUnit.unit, completionOffset);
     var opType = OpType.forCompletion(completionTarget, completionOffset);
     //
     // Validate the OpType.
diff --git a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
index afa5699..bdd1c69 100644
--- a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
@@ -95,8 +95,8 @@
 
   Future<void> resolveTestFile() async {
     var result = await resolveFile(testFile);
-    testCode = result.content!;
-    testUnit = result.unit!;
+    testCode = result.content;
+    testUnit = result.unit;
     if (verifyNoTestUnitErrors) {
       expect(result.errors.where((AnalysisError error) {
         return error.errorCode != HintCode.DEAD_CODE &&
diff --git a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
index d7cba95..a98ac39 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
@@ -418,7 +418,7 @@
         DartCompletionRequestImpl(resourceProvider, completionOffset!, result);
 
     var target =
-        CompletionTarget.forOffset(request!.result.unit!, request!.offset);
+        CompletionTarget.forOffset(request!.result.unit, request!.offset);
     var range = target.computeReplacementRange(request!.offset);
     replacementOffset = range.offset;
     replacementLength = range.length;
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index bcd7f99..9a0a6ec 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -1049,7 +1049,7 @@
     // Process each source file.
     bool allSourcesAlreadyMigrated = true;
     await processResources((ResolvedUnitResult result) async {
-      if (!result.unit!.featureSet.isEnabled(Feature.non_nullable)) {
+      if (!result.unit.featureSet.isEnabled(Feature.non_nullable)) {
         allSourcesAlreadyMigrated = false;
       }
       _progressBar.tick();
diff --git a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
index ecc8a99..b471651 100644
--- a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
@@ -100,7 +100,7 @@
       if (result is ResolvedLibraryResult) {
         for (var unitResult in result.units) {
           var sourceInfo =
-              sourceInfoMap[unitResult.unit!.declaredElement!.source];
+              sourceInfoMap[unitResult.unit.declaredElement!.source];
           // Note: there might have been no information for this unit in
           // sourceInfoMap.  That can happen if there's an already-migrated
           // library being referenced by the code being migrated, but not all
@@ -185,7 +185,7 @@
         break;
       case NullabilityFixKind.addRequired:
         var metaImport =
-            _findImportDirective(result.unit!, 'package:meta/meta.dart');
+            _findImportDirective(result.unit, 'package:meta/meta.dart');
         if (metaImport == null) {
           edits.add(
               EditDetail('Add /*required*/ hint', offset, 0, '/*required*/ '));
@@ -273,7 +273,7 @@
   List<NavigationSource> _computeNavigationSources(ResolvedUnitResult result) {
     var collector = NavigationCollectorImpl();
     computeDartNavigation(
-        result.session.resourceProvider, collector, result.unit!, null, null);
+        result.session.resourceProvider, collector, result.unit, null, null);
     collector.createRegions();
     var files = collector.files;
     var regions = collector.regions;
@@ -377,8 +377,8 @@
     var content = result.content;
     unitInfo.diskContent = content;
     var alreadyMigrated =
-        result.unit!.featureSet.isEnabled(Feature.non_nullable);
-    unitInfo.wasExplicitlyOptedOut = result.unit!.languageVersionToken != null;
+        result.unit.featureSet.isEnabled(Feature.non_nullable);
+    unitInfo.wasExplicitlyOptedOut = result.unit.languageVersionToken != null;
     if (alreadyMigrated) {
       unitInfo.migrationStatus = UnitMigrationStatus.alreadyMigrated;
       unitInfo.migrationStatusCanBeChanged = false;
@@ -401,7 +401,7 @@
     // before we re-populate the region list.
     regions.clear();
 
-    var lineInfo = result.unit!.lineInfo;
+    var lineInfo = result.unit.lineInfo;
     var insertions = <int?, List<AtomicEdit>>{};
     var infosSeen = Set<AtomicEditInfo>.identity();
 
@@ -422,7 +422,7 @@
         var end = offset + length;
         // Insert the replacement text without deleting the replaced text.
         if (replacement.isNotEmpty) {
-          content = content!.replaceRange(end, end, replacement);
+          content = content.replaceRange(end, end, replacement);
           (insertions[sourceOffset] ??= []).add(AtomicEdit.insert(replacement));
         }
         var info = edit.info;
diff --git a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
index 07c652a..be547dc 100644
--- a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
@@ -123,7 +123,7 @@
 
   @override
   void finalizeInput(ResolvedUnitResult result) {
-    if (result.unit!.featureSet.isEnabled(Feature.non_nullable)) {
+    if (result.unit.featureSet.isEnabled(Feature.non_nullable)) {
       // This library has already been migrated; nothing more to do.
       return;
     }
@@ -132,7 +132,7 @@
       _propagated = true;
       _graph.propagate();
     }
-    var unit = result.unit!;
+    var unit = result.unit;
     var compilationUnit = unit.declaredElement!;
     var library = compilationUnit.library;
     var source = compilationUnit.source;
@@ -188,7 +188,7 @@
         !_queriedUnmigratedDependencies,
         'Should only query unmigratedDependencies after all calls to '
         'prepareInput');
-    if (result.unit!.featureSet.isEnabled(Feature.non_nullable)) {
+    if (result.unit.featureSet.isEnabled(Feature.non_nullable)) {
       // This library has already been migrated; nothing more to do.
       return;
     }
@@ -202,7 +202,7 @@
           instrumentation: _instrumentation);
       _decoratedClassHierarchy = DecoratedClassHierarchy(_variables, _graph);
     }
-    var unit = result.unit!;
+    var unit = result.unit;
     try {
       DecoratedTypeParameterBounds.current = _decoratedTypeParameterBounds;
       unit.accept(NodeBuilder(
@@ -219,12 +219,12 @@
   }
 
   void processInput(ResolvedUnitResult result) {
-    if (result.unit!.featureSet.isEnabled(Feature.non_nullable)) {
+    if (result.unit.featureSet.isEnabled(Feature.non_nullable)) {
       // This library has already been migrated; nothing more to do.
       return;
     }
     ExperimentStatusException.sanityCheck(result);
-    var unit = result.unit!;
+    var unit = result.unit;
     try {
       DecoratedTypeParameterBounds.current = _decoratedTypeParameterBounds;
       unit.accept(EdgeBuilder(
diff --git a/pkg/nnbd_migration/test/front_end/info_builder_test.dart b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
index d1c96e4..23a7900 100644
--- a/pkg/nnbd_migration/test/front_end/info_builder_test.dart
+++ b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
@@ -35,7 +35,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var constructor = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(constructor),
         equals("the constructor 'C.aaa'"));
@@ -49,7 +49,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var constructor = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(constructor),
         equals("the default constructor of 'C'"));
@@ -63,7 +63,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     FieldDeclaration fieldDeclaration =
         class_.members.single as FieldDeclaration;
     var field = fieldDeclaration.fields.variables[0];
@@ -79,7 +79,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     FieldDeclaration fieldDeclaration =
         class_.members.single as FieldDeclaration;
     var type = fieldDeclaration.fields.type;
@@ -95,7 +95,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var getter = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(getter),
         equals("the getter 'C.aaa'"));
@@ -109,7 +109,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var method = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(method),
         equals("the method 'C.aaa'"));
@@ -123,7 +123,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var operator = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(operator),
         equals("the operator 'C.=='"));
@@ -137,7 +137,7 @@
 ''');
     var result = await resolveTestFile();
     ClassDeclaration class_ =
-        result.unit!.declarations.single as ClassDeclaration;
+        result.unit.declarations.single as ClassDeclaration;
     var setter = class_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(setter),
         equals("the setter 'C.aaa='"));
@@ -151,7 +151,7 @@
 ''');
     var result = await resolveTestFile();
     ExtensionDeclaration extension_ =
-        result.unit!.declarations.single as ExtensionDeclaration;
+        result.unit.declarations.single as ExtensionDeclaration;
     var method = extension_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(method),
         equals("the method 'E.aaa'"));
@@ -165,7 +165,7 @@
 ''');
     var result = await resolveTestFile();
     ExtensionDeclaration extension_ =
-        result.unit!.declarations.single as ExtensionDeclaration;
+        result.unit.declarations.single as ExtensionDeclaration;
     var method = extension_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(method),
         equals("the method 'aaa' in unnamed extension on List<dynamic>"));
@@ -179,7 +179,7 @@
 ''');
     var result = await resolveTestFile();
     MixinDeclaration mixin_ =
-        result.unit!.declarations.single as MixinDeclaration;
+        result.unit.declarations.single as MixinDeclaration;
     var method = mixin_.members.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(method),
         equals("the method 'C.aaa'"));
@@ -190,7 +190,7 @@
 void aaa(value) {}
 ''');
     var result = await resolveTestFile();
-    var function = result.unit!.declarations.single;
+    var function = result.unit.declarations.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(function),
         equals("the function 'aaa'"));
   }
@@ -200,7 +200,7 @@
 int get aaa => 7;
 ''');
     var result = await resolveTestFile();
-    var getter = result.unit!.declarations.single;
+    var getter = result.unit.declarations.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(getter),
         equals("the getter 'aaa'"));
   }
@@ -210,7 +210,7 @@
 void set aaa(value) {}
 ''');
     var result = await resolveTestFile();
-    var setter = result.unit!.declarations.single;
+    var setter = result.unit.declarations.single;
     expect(InfoBuilder.buildEnclosingMemberDescription(setter),
         equals("the setter 'aaa='"));
   }
@@ -221,7 +221,7 @@
 ''');
     var result = await resolveTestFile();
     TopLevelVariableDeclaration topLevelVariableDeclaration =
-        result.unit!.declarations.single as TopLevelVariableDeclaration;
+        result.unit.declarations.single as TopLevelVariableDeclaration;
     var variable = topLevelVariableDeclaration.variables.variables[0];
     expect(InfoBuilder.buildEnclosingMemberDescription(variable),
         equals("the variable 'i'"));
@@ -233,7 +233,7 @@
 ''');
     var result = await resolveTestFile();
     TopLevelVariableDeclaration topLevelVariableDeclaration =
-        result.unit!.declarations.single as TopLevelVariableDeclaration;
+        result.unit.declarations.single as TopLevelVariableDeclaration;
     var type = topLevelVariableDeclaration.variables.type;
     expect(InfoBuilder.buildEnclosingMemberDescription(type),
         equals("the variable 'i'"));
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index f2df090..821b21c 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -150,8 +150,8 @@
         warnOnWeakCode: warnOnWeakCode);
     var result =
         await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
-    source = result.unit!.declaredElement!.source;
-    findNode = FindNode(content, result.unit!);
+    source = result.unit.declaredElement!.source;
+    findNode = FindNode(content, result.unit);
     migration.prepareInput(result);
     expect(migration.unmigratedDependencies, isEmpty);
     migration.processInput(result);
diff --git a/pkg/vm/lib/transformations/ffi_native.dart b/pkg/vm/lib/transformations/ffi_native.dart
index 4c71d56..ec120ac 100644
--- a/pkg/vm/lib/transformations/ffi_native.dart
+++ b/pkg/vm/lib/transformations/ffi_native.dart
@@ -30,6 +30,7 @@
   final Class ffiNativeClass;
   final Class nativeFunctionClass;
   final Field ffiNativeNameField;
+  final Field ffiNativeIsLeafField;
   final Field resolverField;
   final Procedure asFunctionProcedure;
   final Procedure fromAddressInternal;
@@ -39,6 +40,8 @@
         nativeFunctionClass = index.getClass('dart:ffi', 'NativeFunction'),
         ffiNativeNameField =
             index.getField('dart:ffi', 'FfiNative', 'nativeName'),
+        ffiNativeIsLeafField =
+            index.getField('dart:ffi', 'FfiNative', 'isLeaf'),
         resolverField = index.getTopLevelField('dart:ffi', '_ffi_resolver'),
         asFunctionProcedure = index.getProcedure(
             'dart:ffi', 'NativeFunctionPointer', 'asFunction'),
@@ -71,14 +74,14 @@
   }
 
   // Transform:
-  //   @FfiNative<Double Function(Double)>('Math_sqrt')
+  //   @FfiNative<Double Function(Double)>('Math_sqrt', isLeaf:true)
   //   external double _square_root(double x);
   //
   // Into:
   //   final _@FfiNative__square_root =
   //       Pointer<NativeFunction<Double Function(Double)>>
   //           .fromAddress(_ffi_resolver('dart:math', 'Math_sqrt'))
-  //           .asFunction<double Function(double)>();
+  //           .asFunction<double Function(double)>(isLeaf:true);
   //   double _square_root(double x) => _@FfiNative__square_root(x);
   Statement transformFfiNative(
       Procedure node, InstanceConstant annotationConst) {
@@ -86,6 +89,8 @@
     final params = node.function.positionalParameters;
     final functionName = annotationConst
         .fieldValues[ffiNativeNameField.getterReference] as StringConstant;
+    final isLeaf = annotationConst
+        .fieldValues[ffiNativeIsLeafField.getterReference] as BoolConstant;
 
     // double Function(double)
     final DartType dartType =
@@ -115,9 +120,12 @@
         Arguments([resolverInvocation], types: [nativeInterfaceType]));
 
     // NativeFunctionPointer.asFunction
-    //     <Double Function(Double), double Function(double)>(...)
-    final asFunctionInvocation = StaticInvocation(asFunctionProcedure,
-        Arguments([fromAddressInvocation], types: [nativeType, dartType]));
+    //     <Double Function(Double), double Function(double)>(..., isLeaf:true)
+    final asFunctionInvocation = StaticInvocation(
+        asFunctionProcedure,
+        Arguments([fromAddressInvocation],
+            types: [nativeType, dartType],
+            named: [NamedExpression("isLeaf", BoolLiteral(isLeaf.value))]));
 
     // final _@FfiNative__square_root = ...
     final fieldName = Name('_@FfiNative_${node.name.text}', currentLibrary);
@@ -127,7 +135,8 @@
         isStatic: true,
         isFinal: true,
         fileUri: currentLibrary!.fileUri,
-        getterReference: currentLibraryIndex?.lookupGetterReference(fieldName));
+        getterReference: currentLibraryIndex?.lookupGetterReference(fieldName))
+      ..fileOffset = node.fileOffset;
     currentLibrary!.addField(funcPtrField);
 
     // _@FfiNative__square_root(x)
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index a4ad2d5..885c48f 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -1080,4 +1080,33 @@
   Dart_DeletePersistentHandle_DL(closure_to_callback_);
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// Functions for testing @FfiNative.
+
+DART_EXPORT Dart_Handle GetRootLibraryUrl() {
+  Dart_Handle root_lib = Dart_RootLibrary();
+  Dart_Handle lib_url = Dart_LibraryUrl(root_lib);
+  ENSURE(!Dart_IsError(lib_url));
+  return lib_url;
+}
+
+intptr_t ReturnIntPtr(intptr_t x) {
+  return x;
+}
+
+static void* FfiNativeResolver(const char* name) {
+  if (strcmp(name, "ReturnIntPtr") == 0) {
+    return reinterpret_cast<void*>(ReturnIntPtr);
+  }
+  // This should be unreachable in tests.
+  ENSURE(false);
+}
+
+DART_EXPORT void SetFfiNativeResolverForTest(Dart_Handle url) {
+  Dart_Handle library = Dart_LookupLibrary(url);
+  ENSURE(!Dart_IsError(library));
+  Dart_Handle result = Dart_SetFfiNativeResolver(library, &FfiNativeResolver);
+  ENSURE(!Dart_IsError(result));
+}
+
 }  // namespace dart
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 6f116a0..2be540b 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -9305,7 +9305,7 @@
 TEST_CASE(Dart_SetFfiNativeResolver) {
   const char* kScriptChars = R"(
     import 'dart:ffi';
-    @FfiNative<IntPtr Function(Double)>('EchoInt')
+    @FfiNative<IntPtr Function(Double)>('EchoInt', isLeaf:true)
     external int echoInt(double x);
     main() => echoInt(7.0);
     )";
@@ -9327,7 +9327,7 @@
 TEST_CASE(Dart_SetFfiNativeResolver_MissingResolver) {
   const char* kScriptChars = R"(
     import 'dart:ffi';
-    @FfiNative<IntPtr Function(Double)>('EchoInt')
+    @FfiNative<IntPtr Function(Double)>('EchoInt', isLeaf:true)
     external int echoInt(double x);
     main() => echoInt(7.0);
     )";
diff --git a/sdk/lib/ffi/ffi.dart b/sdk/lib/ffi/ffi.dart
index 0e8be36..1e8a9ea 100644
--- a/sdk/lib/ffi/ffi.dart
+++ b/sdk/lib/ffi/ffi.dart
@@ -806,7 +806,7 @@
 ///
 /// Example:
 ///```dart
-/// @FfiNative<Int64 Function(Int64, Int64)>("FfiNative_Sum")
+/// @FfiNative<Int64 Function(Int64, Int64)>("FfiNative_Sum", isLeaf:true)
 /// external int sum(int a, int b);
 ///```
 /// Calling such functions will throw an exception if no resolver
@@ -817,7 +817,8 @@
 /// NOTE: This is an experimental feature and may change in the future.
 class FfiNative<T> {
   final String nativeName;
-  const FfiNative(this.nativeName);
+  final bool isLeaf;
+  const FfiNative(this.nativeName, {this.isLeaf: false});
 }
 
 // Bootstrapping native for getting the FFI native C function pointer to look
diff --git a/tests/ffi/ffi_native_test.dart b/tests/ffi/ffi_native_test.dart
new file mode 100644
index 0000000..6997360
--- /dev/null
+++ b/tests/ffi/ffi_native_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+
+import 'dylib_utils.dart';
+
+final nativeLib = dlopenPlatformSpecific('ffi_test_functions');
+final getRootLibraryUrl = nativeLib
+    .lookupFunction<Handle Function(), Object Function()>('GetRootLibraryUrl');
+final setFfiNativeResolverForTest = nativeLib
+    .lookupFunction<Void Function(Handle), void Function(Object)>('SetFfiNativeResolverForTest');
+
+@FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
+external int returnIntPtr(int x);
+
+@FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr', isLeaf: true)
+external int returnIntPtrLeaf(int x);
+
+void main() {
+  // Register test resolver for top-level functions above.
+  final root_lib_url = getRootLibraryUrl();
+  setFfiNativeResolverForTest(root_lib_url);
+
+  Expect.equals(123, returnIntPtr(123));
+  Expect.equals(123, returnIntPtrLeaf(123));
+}
diff --git a/tools/VERSION b/tools/VERSION
index d854130..fa3a2fe 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 314
+PRERELEASE 315
 PRERELEASE_PATCH 0
\ No newline at end of file