Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 3b11f88

Browse files
author
Dart CI
committed
Version 2.15.0-268.0.dev
Merge commit 'cd59d39fe3006cd0bf1a30699554e89071282783' into 'dev'
2 parents d84981b + cd59d39 commit 3b11f88

36 files changed

+730
-185
lines changed

pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,6 @@ class DartCompletionRequest {
285285

286286
final DocumentationCache? documentationCache;
287287

288-
/// Return the expression to the right of the "dot" or "dot dot",
289-
/// or `null` if this is not a "dot" completion (e.g. `foo.b`).
290-
final Expression? dotTarget;
291-
292288
/// Return the object used to compute the values of the features used to
293289
/// compute relevance scores for suggestions.
294290
final FeatureComputer featureComputer;
@@ -328,7 +324,6 @@ class DartCompletionRequest {
328324
DocumentationCache? documentationCache,
329325
}) {
330326
var target = CompletionTarget.forOffset(resolvedUnit.unit, offset);
331-
var dotTarget = _dotTarget(target);
332327

333328
var featureComputer = FeatureComputer(
334329
resolvedUnit.typeSystem,
@@ -350,7 +345,6 @@ class DartCompletionRequest {
350345
contextType: contextType,
351346
dartdocDirectiveInfo: dartdocDirectiveInfo ?? DartdocDirectiveInfo(),
352347
documentationCache: documentationCache,
353-
dotTarget: dotTarget,
354348
featureComputer: featureComputer,
355349
offset: offset,
356350
opType: opType,
@@ -366,7 +360,6 @@ class DartCompletionRequest {
366360
required this.contextType,
367361
required this.dartdocDirectiveInfo,
368362
required this.documentationCache,
369-
required this.dotTarget,
370363
required this.featureComputer,
371364
required this.offset,
372365
required this.opType,
@@ -464,29 +457,4 @@ class DartCompletionRequest {
464457
throw AbortCompletion();
465458
}
466459
}
467-
468-
/// TODO(scheglov) Should this be a property of [CompletionTarget]?
469-
static Expression? _dotTarget(CompletionTarget target) {
470-
var node = target.containingNode;
471-
var offset = target.offset;
472-
if (node is MethodInvocation) {
473-
if (identical(node.methodName, target.entity)) {
474-
return node.realTarget;
475-
} else if (node.isCascaded && node.operator!.offset + 1 == offset) {
476-
return node.realTarget;
477-
}
478-
}
479-
if (node is PropertyAccess) {
480-
if (identical(node.propertyName, target.entity)) {
481-
return node.realTarget;
482-
} else if (node.isCascaded && node.operator.offset + 1 == offset) {
483-
return node.realTarget;
484-
}
485-
}
486-
if (node is PrefixedIdentifier) {
487-
if (identical(node.identifier, target.entity)) {
488-
return node.prefix;
489-
}
490-
}
491-
}
492460
}

pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,22 @@ import 'package:analyzer/dart/element/type.dart';
1515
/// A contributor that produces suggestions based on the members of an
1616
/// extension.
1717
class ExtensionMemberContributor extends DartCompletionContributor {
18-
late MemberSuggestionBuilder memberBuilder;
18+
late final memberBuilder = MemberSuggestionBuilder(request, builder);
1919

2020
ExtensionMemberContributor(
2121
DartCompletionRequest request,
2222
SuggestionBuilder builder,
2323
) : super(request, builder);
2424

25-
@override
26-
Future<void> computeSuggestions() async {
25+
void addExtensions(List<ExtensionElement> extensions) {
2726
var containingLibrary = request.libraryElement;
28-
memberBuilder = MemberSuggestionBuilder(request, builder);
2927

3028
var defaultKind = request.target.isFunctionalArgument()
3129
? CompletionSuggestionKind.IDENTIFIER
3230
: request.opType.suggestKind;
3331

3432
// Recompute the target because resolution might have changed it.
35-
var expression = request.dotTarget;
33+
var expression = request.target.dotTarget;
3634

3735
if (expression == null) {
3836
if (!request.includeIdentifiers) {
@@ -44,7 +42,7 @@ class ExtensionMemberContributor extends DartCompletionContributor {
4442
if (classOrMixin != null) {
4543
var type = classOrMixin.declaredElement?.thisType;
4644
if (type != null) {
47-
_addExtensionMembers(containingLibrary, defaultKind, type);
45+
_addExtensionMembers(extensions, defaultKind, type);
4846
}
4947
} else {
5048
var extension = request.target.containingNode
@@ -59,7 +57,7 @@ class ExtensionMemberContributor extends DartCompletionContributor {
5957
extendedType.element, type.element);
6058
_addTypeMembers(type, defaultKind, inheritanceDistance);
6159
}
62-
_addExtensionMembers(containingLibrary, defaultKind, extendedType);
60+
_addExtensionMembers(extensions, defaultKind, extendedType);
6361
}
6462
}
6563
}
@@ -103,15 +101,23 @@ class ExtensionMemberContributor extends DartCompletionContributor {
103101
// invoked on a non-null value.
104102
type = containingLibrary.typeSystem.promoteToNonNull(type);
105103
}
106-
_addExtensionMembers(containingLibrary, defaultKind, type);
104+
_addExtensionMembers(extensions, defaultKind, type);
107105
expression.staticType;
108106
}
109107
}
110108

111-
void _addExtensionMembers(LibraryElement containingLibrary,
109+
@override
110+
Future<void> computeSuggestions() async {
111+
addExtensions(
112+
request.libraryElement.accessibleExtensions,
113+
);
114+
}
115+
116+
void _addExtensionMembers(List<ExtensionElement> extensions,
112117
CompletionSuggestionKind? kind, DartType type) {
118+
var containingLibrary = request.libraryElement;
113119
var typeSystem = containingLibrary.typeSystem;
114-
for (var extension in containingLibrary.accessibleExtensions) {
120+
for (var extension in extensions) {
115121
var extendedType =
116122
extension.resolvedExtendedType(containingLibrary, type);
117123
if (extendedType != null && typeSystem.isSubtypeOf(type, extendedType)) {

pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class LibraryMemberContributor extends DartCompletionContributor {
2323
@override
2424
Future<void> computeSuggestions() async {
2525
// Determine if the target looks like a library prefix.
26-
var targetId = request.dotTarget;
26+
var targetId = request.target.dotTarget;
2727
if (targetId is SimpleIdentifier && !request.target.isCascade) {
2828
var elem = targetId.staticElement;
2929
if (elem is PrefixElement && !elem.isSynthetic) {

pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import 'dart:async';
66

77
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
88
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
9+
import 'package:analysis_server/src/services/completion/dart/extension_member_contributor.dart';
910
import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
10-
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'
11-
show SuggestionBuilder;
11+
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
1212
import 'package:analyzer/dart/analysis/results.dart';
13+
import 'package:analyzer/dart/element/element.dart';
1314
import 'package:analyzer/src/dart/analysis/file_state.dart';
1415
import 'package:analyzer/src/dart/analysis/session.dart';
15-
import 'package:analyzer/src/dart/resolver/scope.dart';
1616
import 'package:analyzer/src/lint/pub.dart';
1717
import 'package:analyzer/src/workspace/pub.dart';
1818
import 'package:collection/collection.dart';
@@ -36,10 +36,6 @@ class NotImportedContributor extends DartCompletionContributor {
3636

3737
@override
3838
Future<void> computeSuggestions() async {
39-
if (!request.includeIdentifiers) {
40-
return;
41-
}
42-
4339
var session = request.result.session as AnalysisSessionImpl;
4440
var analysisDriver = session.getDriver(); // ignore: deprecated_member_use
4541

@@ -52,6 +48,9 @@ class NotImportedContributor extends DartCompletionContributor {
5248
return;
5349
}
5450

51+
// Use single instance to track getter / setter pairs.
52+
var extensionContributor = ExtensionMemberContributor(request, builder);
53+
5554
var knownFiles = fsState.knownFiles.toList();
5655
for (var file in knownFiles) {
5756
onFile?.call(file);
@@ -70,10 +69,17 @@ class NotImportedContributor extends DartCompletionContributor {
7069
continue;
7170
}
7271

72+
var exportNamespace = elementResult.element.exportNamespace;
73+
var exportElements = exportNamespace.definedNames.values.toList();
74+
7375
var newSuggestions = builder.markSuggestions();
7476

75-
_buildSuggestions(
76-
elementResult.element.exportNamespace,
77+
if (request.includeIdentifiers) {
78+
_buildSuggestions(exportElements);
79+
}
80+
81+
extensionContributor.addExtensions(
82+
exportElements.whereType<ExtensionElement>().toList(),
7783
);
7884

7985
newSuggestions.setLibraryUriToImportIndex(() {
@@ -93,9 +99,9 @@ class NotImportedContributor extends DartCompletionContributor {
9399
}
94100
}
95101

96-
void _buildSuggestions(Namespace namespace) {
102+
void _buildSuggestions(List<Element> elements) {
97103
var visitor = LibraryElementSuggestionBuilder(request, builder);
98-
for (var element in namespace.definedNames.values) {
104+
for (var element in elements) {
99105
element.accept(visitor);
100106
}
101107
}

pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class StaticMemberContributor extends DartCompletionContributor {
2323
Future<void> computeSuggestions() async {
2424
var library = request.libraryElement;
2525
bool isVisible(Element element) => element.isAccessibleIn(library);
26-
var targetId = request.dotTarget;
26+
var targetId = request.target.dotTarget;
2727
if (targetId is Identifier && !request.target.isCascade) {
2828
var element = targetId.staticElement;
2929
if (element is TypeAliasElement) {

pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class SuggestionBuilder {
250250
String? get _containingMemberName {
251251
if (!_hasContainingMemberName) {
252252
_hasContainingMemberName = true;
253-
if (request.dotTarget is SuperExpression) {
253+
if (request.target.dotTarget is SuperExpression) {
254254
var containingMethod = request.target.containingNode
255255
.thisOrAncestorOfType<MethodDeclaration>();
256256
if (containingMethod != null) {

pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class TypeMemberContributor extends DartCompletionContributor {
2626
@override
2727
Future<void> computeSuggestions() async {
2828
// Recompute the target because resolution might have changed it.
29-
var expression = request.dotTarget;
29+
var expression = request.target.dotTarget;
3030
if (expression == null ||
3131
expression.isSynthetic ||
3232
expression is ExtensionOverride) {

pkg/analysis_server/lib/src/services/correction/assist_internal.dart

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
66
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
7-
import 'package:analysis_server/src/services/correction/assist.dart';
87
import 'package:analysis_server/src/services/correction/base_processor.dart';
98
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
109
import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
@@ -171,46 +170,6 @@ class AssistProcessor extends BaseProcessor {
171170
return assists;
172171
}
173172

174-
Future<List<Assist>> computeAssist(AssistKind assistKind) async {
175-
var context = CorrectionProducerContext.create(
176-
selectionOffset: selectionOffset,
177-
selectionLength: selectionLength,
178-
resolvedResult: resolvedResult,
179-
workspace: workspace,
180-
);
181-
if (context == null) {
182-
return assists;
183-
}
184-
185-
Future<void> compute(CorrectionProducer producer) async {
186-
producer.configure(context);
187-
188-
var builder = ChangeBuilder(
189-
workspace: context.workspace, eol: context.utils.endOfLine);
190-
await producer.compute(builder);
191-
192-
var assistKind = producer.assistKind;
193-
if (assistKind != null) {
194-
_addAssistFromBuilder(builder, assistKind,
195-
args: producer.assistArguments);
196-
}
197-
}
198-
199-
// Calculate only specific assists for edit.dartFix
200-
if (assistKind == DartAssistKind.CONVERT_CLASS_TO_MIXIN) {
201-
await compute(ConvertClassToMixin());
202-
} else if (assistKind == DartAssistKind.CONVERT_TO_INT_LITERAL) {
203-
await compute(ConvertToIntLiteral());
204-
} else if (assistKind == DartAssistKind.CONVERT_TO_SPREAD) {
205-
await compute(ConvertAddAllToSpread());
206-
} else if (assistKind == DartAssistKind.CONVERT_TO_FOR_ELEMENT) {
207-
await compute(ConvertMapFromIterableToForLiteral());
208-
} else if (assistKind == DartAssistKind.CONVERT_TO_IF_ELEMENT) {
209-
await compute(ConvertConditionalExpressionToIfElement());
210-
}
211-
return assists;
212-
}
213-
214173
void _addAssistFromBuilder(ChangeBuilder builder, AssistKind kind,
215174
{List<Object>? args}) {
216175
var change = builder.sourceChange;

pkg/analysis_server/lib/src/services/correction/fix_internal.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,15 @@ class FixInFileProcessor {
229229
dartFixContext: context,
230230
diagnostic: error,
231231
resolvedResult: resolveResult,
232-
selectionOffset: context.error.offset,
233-
selectionLength: context.error.length,
232+
selectionOffset: error.offset,
233+
selectionLength: error.length,
234234
workspace: workspace,
235235
);
236236
if (correctionContext == null) {
237237
return const <Fix>[];
238238
}
239239

240-
var generators = _getGenerators(error.errorCode, correctionContext);
240+
var generators = _getGenerators(error.errorCode);
241241

242242
var fixes = <Fix>[];
243243
for (var generator in generators) {
@@ -309,8 +309,7 @@ class FixInFileProcessor {
309309
}
310310
}
311311

312-
List<ProducerGenerator> _getGenerators(
313-
ErrorCode errorCode, CorrectionProducerContext context) {
312+
List<ProducerGenerator> _getGenerators(ErrorCode errorCode) {
314313
if (errorCode is LintCode) {
315314
return FixProcessor.lintProducerMap[errorCode.name] ?? [];
316315
} else {

0 commit comments

Comments
 (0)