Pass DartCompletionRequestImpl to DartCompletionManager.
We sometimes create it outside DartCompletionManager, and then call
and create it inside again.
Change-Id: Ifa5bd958437a5ea4e2bac65e7800183f915a9a07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217800
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
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,