diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart index 17f00dadb5e..4f6aaaa3178 100644 --- a/pkg/analysis_server/lib/src/cider/completion.dart +++ b/pkg/analysis_server/lib/src/cider/completion.dart @@ -70,7 +70,7 @@ class CiderCompletionComputer { var lineInfo = resolvedUnit.lineInfo; var offset = lineInfo.getOffsetOfLine(line) + column; - _dartCompletionRequest = DartCompletionRequest( + _dartCompletionRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: resolvedUnit, offset: offset, ); diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart index 76a3f3bf0d8..6bf064fbcbb 100644 --- a/pkg/analysis_server/lib/src/domain_completion.dart +++ b/pkg/analysis_server/lib/src/domain_completion.dart @@ -329,7 +329,7 @@ class CompletionDomainHandler extends AbstractRequestHandler { ); performanceList.add(completionPerformance); - var completionRequest = DartCompletionRequest( + var completionRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: resolvedUnit, offset: offset, dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor( @@ -527,7 +527,7 @@ class CompletionDomainHandler extends AbstractRequestHandler { return; } - var completionRequest = DartCompletionRequest( + var completionRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: resolvedUnit, offset: offset, dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor( diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart index a2f6ea6c41f..e0eedc4b52d 100644 --- a/pkg/analysis_server/lib/src/domains/execution/completion.dart +++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart @@ -69,7 +69,7 @@ class RuntimeCompletionComputer { return RuntimeCompletionResult([], []); } - var dartRequest = DartCompletionRequest( + var dartRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: targetResult, offset: targetOffset, ); 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 a4eb456cce0..629101e36c7 100644 --- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart +++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart @@ -215,7 +215,7 @@ class CompletionHandler ); server.performanceStats.completion.add(completionPerformance); - final completionRequest = DartCompletionRequest( + final completionRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: unit, offset: offset, dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(unit), 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 0789ea267e1..90da0ef3ca4 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 @@ -328,17 +328,22 @@ class DartCompletionRequest { bool _aborted = false; factory DartCompletionRequest({ - required ResolvedUnitResult resolvedUnit, + required AnalysisSession analysisSession, + required String filePath, + required String fileContent, + required CompilationUnitElement unitElement, + required AstNode enclosingNode, required int offset, DartdocDirectiveInfo? dartdocDirectiveInfo, CompletionPreference completionPreference = CompletionPreference.insert, DocumentationCache? documentationCache, }) { - var target = CompletionTarget.forOffset(resolvedUnit.unit, offset); + var target = CompletionTarget.forOffset(enclosingNode, offset); + var libraryElement = unitElement.library; var featureComputer = FeatureComputer( - resolvedUnit.typeSystem, - resolvedUnit.typeProvider, + libraryElement.typeSystem, + libraryElement.typeProvider, ); var contextType = featureComputer.computeContextType( @@ -352,23 +357,43 @@ class DartCompletionRequest { } return DartCompletionRequest._( - analysisSession: resolvedUnit.session as AnalysisSessionImpl, + analysisSession: analysisSession as AnalysisSessionImpl, completionPreference: completionPreference, - content: resolvedUnit.content, + content: fileContent, contextType: contextType, dartdocDirectiveInfo: dartdocDirectiveInfo ?? DartdocDirectiveInfo(), documentationCache: documentationCache, featureComputer: featureComputer, - libraryElement: resolvedUnit.libraryElement, + libraryElement: libraryElement, offset: offset, opType: opType, - path: resolvedUnit.path, + path: filePath, replacementRange: target.computeReplacementRange(offset), - source: resolvedUnit.unit.declaredElement!.source, + source: unitElement.source, target: target, ); } + factory DartCompletionRequest.forResolvedUnit({ + required ResolvedUnitResult resolvedUnit, + required int offset, + DartdocDirectiveInfo? dartdocDirectiveInfo, + CompletionPreference completionPreference = CompletionPreference.insert, + DocumentationCache? documentationCache, + }) { + return DartCompletionRequest( + analysisSession: resolvedUnit.session, + filePath: resolvedUnit.path, + fileContent: resolvedUnit.content, + unitElement: resolvedUnit.unit.declaredElement!, + enclosingNode: resolvedUnit.unit, + offset: offset, + dartdocDirectiveInfo: dartdocDirectiveInfo, + completionPreference: completionPreference, + documentationCache: documentationCache, + ); + } + DartCompletionRequest._({ required this.analysisSession, required this.completionPreference, 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 e5d3720be86..83312b9462e 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 @@ -531,7 +531,7 @@ abstract class _BaseDartCompletionContributorTest extends AbstractContextTest { result = await session.getResolvedUnit(testFile) as ResolvedUnitResult; // Build the request - var request = DartCompletionRequest( + var request = DartCompletionRequest.forResolvedUnit( resolvedUnit: result, offset: completionOffset, dartdocDirectiveInfo: dartdocInfo, 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 c60efba2a37..be920e78311 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 @@ -52,7 +52,7 @@ part 'test.dart'; // Build the request var resolvedUnit = await session.getResolvedUnit(testFile) as ResolvedUnitResult; - request = DartCompletionRequest( + request = DartCompletionRequest.forResolvedUnit( resolvedUnit: resolvedUnit, offset: completionOffset, ); 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 8c8bc43fe3b..9f66816ebe7 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 @@ -27,7 +27,7 @@ class ContextTypeTest extends AbstractSingleUnitTest { } Future forTopLevelFunction(String functionName) async { - var request = DartCompletionRequest( + var request = DartCompletionRequest.forResolvedUnit( resolvedUnit: testAnalysisResult, offset: 0, ); diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart index e0754be2e69..2f7a688245f 100644 --- a/pkg/analysis_server/test/stress/completion/completion_runner.dart +++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart @@ -99,7 +99,7 @@ class CompletionRunner { } timer.start(); - var dartRequest = DartCompletionRequest( + var dartRequest = DartCompletionRequest.forResolvedUnit( resolvedUnit: result, offset: offset, ); diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart index b57a1f86c04..a6a9b850296 100644 --- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart +++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart @@ -1368,7 +1368,7 @@ class CompletionMetricsComputer { {required MetricsSuggestionListener listener, required CompletionMetrics metrics}) async { var stopwatch = Stopwatch()..start(); - var request = DartCompletionRequest( + var request = DartCompletionRequest.forResolvedUnit( resolvedUnit: resolvedUnitResult, offset: expectedCompletion.offset, documentationCache: documentationCache,