diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 225a9fa..3a20010 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/dart/element/element.dart' show LibraryElement;
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:meta/meta.dart';
 
@@ -78,7 +77,10 @@
         offset,
         CompletionPerformance(),
       );
-      var dartdocDirectiveInfo = DartdocDirectiveInfo();
+
+      _dartCompletionRequest = await DartCompletionRequestImpl.from(
+        completionRequest,
+      );
 
       var suggestions = await performance.runAsync(
         'suggestions',
@@ -90,15 +92,14 @@
                 <IncludedSuggestionRelevanceTag>[];
 
             var manager = DartCompletionManager(
-              dartdocDirectiveInfo: dartdocDirectiveInfo,
               includedElementKinds: includedElementKinds,
               includedElementNames: includedElementNames,
               includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
             );
 
             return await manager.computeSuggestions(
+              _dartCompletionRequest,
               performance,
-              completionRequest,
               enableOverrideContributor: false,
               enableUriContributor: false,
             );
@@ -109,12 +110,6 @@
         },
       );
 
-      _dartCompletionRequest = await DartCompletionRequestImpl.from(
-        performance,
-        completionRequest,
-        dartdocDirectiveInfo,
-      );
-
       performance.run('imports', (performance) {
         if (_dartCompletionRequest.includeIdentifiers) {
           _logger.run('Add imported suggestions', () {
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 9a00f2d..bef8ea5 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -95,9 +95,6 @@
     const COMPUTE_SUGGESTIONS_TAG = 'computeSuggestions';
     await perf.runAsync(COMPUTE_SUGGESTIONS_TAG, (perf) async {
       var manager = DartCompletionManager(
-        dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(
-          request.result,
-        ),
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
@@ -105,11 +102,16 @@
 
       var contributorTag = 'computeSuggestions - ${manager.runtimeType}';
       await perf.runAsync(contributorTag, (performance) async {
+        var dartRequest = await DartCompletionRequestImpl.from(
+          request,
+          dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(
+            request.result,
+          ),
+          documentationCache: server.getDocumentationCacheFor(request.result),
+        );
         try {
           suggestions.addAll(
-            await manager.computeSuggestions(performance, request,
-                documentationCache:
-                    server.getDocumentationCacheFor(request.result)),
+            await manager.computeSuggestions(dartRequest, performance),
           );
         } on AbortCompletion {
           suggestions.clear();
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index 7162de9..01ab4cf 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -70,20 +70,19 @@
       return RuntimeCompletionResult([], []);
     }
 
-    var contributor = DartCompletionManager(
-        // dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(targetResult)
-        );
     var request = CompletionRequestImpl(
       targetResult,
       targetOffset,
       CompletionPerformance(),
     );
 
+    var dartRequest = await DartCompletionRequestImpl.from(request);
+
     var suggestions = await request.performance.runRequestOperation(
       (performance) async {
-        return await contributor.computeSuggestions(
+        return await DartCompletionManager().computeSuggestions(
+          dartRequest,
           performance,
-          request,
         );
       },
     );
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 2ab3d5d..c93b316 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -214,7 +214,10 @@
       final directiveInfo =
           server.getDartdocDirectiveInfoFor(completionRequest.result);
       final dartCompletionRequest = await DartCompletionRequestImpl.from(
-          perf, completionRequest, directiveInfo);
+        completionRequest,
+        dartdocDirectiveInfo: directiveInfo,
+        completionPreference: CompletionPreference.replace,
+      );
       final target = dartCompletionRequest.target;
 
       if (triggerCharacter != null) {
@@ -234,16 +237,14 @@
 
       try {
         var contributor = DartCompletionManager(
-          dartdocDirectiveInfo: directiveInfo,
           includedElementKinds: includedElementKinds,
           includedElementNames: includedElementNames,
           includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
         );
 
         final serverSuggestions = await contributor.computeSuggestions(
+          dartCompletionRequest,
           perf,
-          completionRequest,
-          completionPreference: CompletionPreference.replace,
         );
 
         final insertLength = _computeInsertLength(
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 f8298ff..039cd5d 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
@@ -6,7 +6,6 @@
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/documentation_cache.dart';
@@ -49,9 +48,6 @@
 /// [DartCompletionManager] determines if a completion request is Dart specific
 /// and forwards those requests to all [DartCompletionContributor]s.
 class DartCompletionManager {
-  /// The object used to resolve macros in Dartdoc comments.
-  final DartdocDirectiveInfo? dartdocDirectiveInfo;
-
   /// If not `null`, then instead of using [ImportedReferenceContributor],
   /// fill this set with kinds of elements that are applicable at the
   /// completion location, so should be suggested from available suggestion
@@ -77,8 +73,7 @@
   /// [includedSuggestionRelevanceTags] must either all be `null` or must all be
   /// non-`null`.
   DartCompletionManager(
-      {this.dartdocDirectiveInfo,
-      this.includedElementKinds,
+      {this.includedElementKinds,
       this.includedElementNames,
       this.includedSuggestionRelevanceTags,
       this.listener})
@@ -90,27 +85,18 @@
                 includedSuggestionRelevanceTags == null));
 
   Future<List<CompletionSuggestion>> computeSuggestions(
-    OperationPerformanceImpl performance,
-    CompletionRequest request, {
+    DartCompletionRequestImpl dartRequest,
+    OperationPerformanceImpl performance, {
     bool enableOverrideContributor = true,
     bool enableUriContributor = true,
-    CompletionPreference? completionPreference,
-    DocumentationCache? documentationCache,
   }) async {
+    final request = dartRequest.request;
     request.checkAborted();
     var pathContext = request.resourceProvider.pathContext;
     if (!file_paths.isDart(pathContext, request.result.path)) {
       return const <CompletionSuggestion>[];
     }
 
-    var dartRequest = await DartCompletionRequestImpl.from(
-      performance,
-      request,
-      dartdocDirectiveInfo,
-      completionPreference: completionPreference,
-      documentationCache: documentationCache,
-    );
-
     // Don't suggest in comments.
     if (dartRequest.target.isCommentText) {
       return const <CompletionSuggestion>[];
@@ -258,6 +244,8 @@
 
 /// The information about a requested list of completions within a Dart file.
 class DartCompletionRequestImpl implements DartCompletionRequest {
+  final CompletionRequest request;
+
   @override
   final ResolvedUnitResult result;
 
@@ -298,8 +286,6 @@
 
   final CompletionRequest _originalRequest;
 
-  final CompletionPerformance performance;
-
   SourceRange? _replacementRange;
 
   @override
@@ -308,6 +294,7 @@
   final DocumentationCache? documentationCache;
 
   DartCompletionRequestImpl._(
+      this.request,
       this.result,
       this.resourceProvider,
       this.objectType,
@@ -317,7 +304,6 @@
       CompilationUnit unit,
       this.dartdocDirectiveInfo,
       this._originalRequest,
-      this.performance,
       {CompletionPreference? completionPreference,
       this.documentationCache})
       : featureComputer =
@@ -447,39 +433,34 @@
     }
   }
 
-  /// Return a [Future] that completes with a newly created completion request
-  /// based on the given [request]. This method will throw [AbortCompletion]
-  /// if the completion request has been aborted.
+  /// Return a newly created completion request based on the given [request].
+  /// This method will throw [AbortCompletion] if the completion request has
+  /// been aborted.
   static Future<DartCompletionRequestImpl> from(
-      OperationPerformanceImpl performance,
-      CompletionRequest request,
-      DartdocDirectiveInfo? dartdocDirectiveInfo,
-      {CompletionPreference? completionPreference,
-      DocumentationCache? documentationCache}) async {
+    CompletionRequest request, {
+    DartdocDirectiveInfo? dartdocDirectiveInfo,
+    CompletionPreference? completionPreference,
+    DocumentationCache? documentationCache,
+  }) async {
     request.checkAborted();
 
-    return performance.run(
-      'build DartCompletionRequest',
-      (_) {
-        var unit = request.result.unit;
-        var libSource = unit.declaredElement!.library.source;
-        var objectType = request.result.typeProvider.objectType;
+    var unit = request.result.unit;
+    var libSource = unit.declaredElement!.library.source;
+    var objectType = request.result.typeProvider.objectType;
 
-        return DartCompletionRequestImpl._(
-          request.result,
-          request.resourceProvider,
-          objectType,
-          libSource,
-          request.source,
-          request.offset,
-          unit,
-          dartdocDirectiveInfo ?? DartdocDirectiveInfo(),
-          request,
-          (request as CompletionRequestImpl).performance,
-          completionPreference: completionPreference,
-          documentationCache: documentationCache,
-        );
-      },
+    return DartCompletionRequestImpl._(
+      request,
+      request.result,
+      request.resourceProvider,
+      objectType,
+      libSource,
+      request.source,
+      request.offset,
+      unit,
+      dartdocDirectiveInfo ?? DartdocDirectiveInfo(),
+      request,
+      completionPreference: completionPreference,
+      documentationCache: documentationCache,
     );
   }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 8545220..35f317f 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -538,7 +538,9 @@
       (performance) async {
         // Build the request
         var request = await DartCompletionRequestImpl.from(
-            performance, baseRequest, dartdocInfo);
+          baseRequest,
+          dartdocDirectiveInfo: dartdocInfo,
+        );
 
         var range = request.target.computeReplacementRange(request.offset);
         replacementOffset = range.offset;
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 38fb1ef..9e8f9e7 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -12,7 +12,6 @@
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -59,8 +58,7 @@
         CompletionPerformance());
     await baseRequest.performance.runRequestOperation((performance) async {
       var requestCompleter = Completer<DartCompletionRequest>();
-      DartCompletionRequestImpl.from(
-              performance, baseRequest, DartdocDirectiveInfo())
+      DartCompletionRequestImpl.from(baseRequest)
           .then((DartCompletionRequest request) {
         requestCompleter.complete(request);
       });
diff --git a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
index 4cc60a3..1bd5992 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
@@ -7,8 +7,6 @@
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
-import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -32,9 +30,8 @@
 
   Future<CompletionSuggestion> forTopLevelFunction(String functionName) async {
     var request = await DartCompletionRequestImpl.from(
-        OperationPerformanceImpl(''),
-        CompletionRequestImpl(testAnalysisResult, 0, CompletionPerformance()),
-        DartdocDirectiveInfo());
+      CompletionRequestImpl(testAnalysisResult, 0, CompletionPerformance()),
+    );
     var builder = SuggestionBuilder(request);
     builder.suggestTopLevelFunction(findElement.topFunction('f'));
     var suggestions = builder.suggestions.toList();
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 16d1e81..dcb36a9 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -100,11 +100,12 @@
 
           timer.start();
           var request = CompletionRequestImpl(result, offset, statistics);
+          var dartRequest = await DartCompletionRequestImpl.from(request);
           var suggestions = await request.performance.runRequestOperation(
             (performance) async {
               return await contributor.computeSuggestions(
+                dartRequest,
                 performance,
-                request,
               );
             },
           );
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 4522ce8..6b4dd8a 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -1208,13 +1208,17 @@
           availableSuggestionsParams]) async {
     List<protocol.CompletionSuggestion> suggestions;
 
+    var dartRequest = await DartCompletionRequestImpl.from(
+      request,
+      dartdocDirectiveInfo: dartdocDirectiveInfo,
+      documentationCache: documentationCache,
+    );
+
     if (declarationsTracker == null) {
       // available suggestions == false
       suggestions = await DartCompletionManager(
-        dartdocDirectiveInfo: dartdocDirectiveInfo,
         listener: listener,
-      ).computeSuggestions(performance, request,
-          documentationCache: documentationCache);
+      ).computeSuggestions(dartRequest, performance);
     } else {
       // available suggestions == true
       var includedElementKinds = <protocol.ElementKind>{};
@@ -1223,13 +1227,11 @@
           <protocol.IncludedSuggestionRelevanceTag>[];
       var includedSuggestionSetList = <protocol.IncludedSuggestionSet>[];
       suggestions = await DartCompletionManager(
-        dartdocDirectiveInfo: dartdocDirectiveInfo,
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTagList,
         listener: listener,
-      ).computeSuggestions(performance, request,
-          documentationCache: documentationCache);
+      ).computeSuggestions(dartRequest, performance);
 
       computeIncludedSetList(declarationsTracker, request.result,
           includedSuggestionSetList, includedElementNames);
@@ -1378,14 +1380,15 @@
             expectedCompletion.offset,
             CompletionPerformance(),
           );
-          var directiveInfo = DartdocDirectiveInfo();
 
           late OpType opType;
           late List<protocol.CompletionSuggestion> suggestions;
           await request.performance.runRequestOperation(
             (performance) async {
               var dartRequest = await DartCompletionRequestImpl.from(
-                  performance, request, directiveInfo);
+                request,
+                documentationCache: documentationCache,
+              );
               opType = OpType.forCompletion(dartRequest.target, request.offset);
               suggestions = await _computeCompletionSuggestions(
                 listener,
