Skip to content

Commit 7a3df2c

Browse files
bwilkersonCommit Queue
authored and
Commit Queue
committed
Move the last of the local reference contributor to the first pass
Change-Id: Ib345a5facef37e2d9d9fc8494b8df116d36c23f0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341332 Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent 0b0a972 commit 7a3df2c

File tree

5 files changed

+51
-163
lines changed

5 files changed

+51
-163
lines changed

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

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import 'package:analysis_server/src/services/completion/dart/field_formal_contri
1717
import 'package:analysis_server/src/services/completion/dart/in_scope_completion_pass.dart';
1818
import 'package:analysis_server/src/services/completion/dart/library_member_contributor.dart';
1919
import 'package:analysis_server/src/services/completion/dart/library_prefix_contributor.dart';
20-
import 'package:analysis_server/src/services/completion/dart/local_reference_contributor.dart';
2120
import 'package:analysis_server/src/services/completion/dart/named_constructor_contributor.dart';
2221
import 'package:analysis_server/src/services/completion/dart/not_imported_contributor.dart';
2322
import 'package:analysis_server/src/services/completion/dart/override_contributor.dart';
@@ -30,7 +29,6 @@ import 'package:analysis_server/src/services/completion/dart/super_formal_contri
3029
import 'package:analysis_server/src/services/completion/dart/type_member_contributor.dart';
3130
import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart';
3231
import 'package:analysis_server/src/services/completion/dart/variable_name_contributor.dart';
33-
import 'package:analysis_server/src/services/completion/dart/visibility_tracker.dart';
3432
import 'package:analysis_server/src/utilities/selection.dart';
3533
import 'package:analyzer/dart/analysis/features.dart';
3634
import 'package:analyzer/dart/analysis/results.dart';
@@ -135,7 +133,6 @@ class DartCompletionManager {
135133
// Compute the list of contributors that will be run.
136134
var builder =
137135
SuggestionBuilder(request, useFilter: useFilter, listener: listener);
138-
var localReferenceContributor = LocalReferenceContributor(request, builder);
139136
var contributors = <DartCompletionContributor>[
140137
ArgListContributor(request, builder),
141138
ClosureContributor(request, builder),
@@ -145,7 +142,6 @@ class DartCompletionManager {
145142
FieldFormalContributor(request, builder),
146143
LibraryMemberContributor(request, builder),
147144
LibraryPrefixContributor(request, builder),
148-
localReferenceContributor,
149145
NamedConstructorContributor(request, builder),
150146
if (enableOverrideContributor) OverrideContributor(request, builder),
151147
RecordLiteralContributor(request, builder),
@@ -170,17 +166,12 @@ class DartCompletionManager {
170166
}
171167

172168
try {
173-
VisibilityTracker? visibilityTracker;
174169
await performance.runAsync(
175170
'InScopeCompletionPass',
176171
(performance) async {
177-
visibilityTracker =
178-
_runFirstPass(request, builder, includedElementKinds != null);
172+
_runFirstPass(request, builder, includedElementKinds != null);
179173
},
180174
);
181-
if (visibilityTracker != null) {
182-
localReferenceContributor.visibilityTracker = visibilityTracker!;
183-
}
184175
for (var contributor in contributors) {
185176
await performance.runAsync(
186177
'${contributor.runtimeType}',
@@ -239,10 +230,8 @@ class DartCompletionManager {
239230
}
240231

241232
// Run the first pass of the code completion algorithm.
242-
VisibilityTracker? _runFirstPass(DartCompletionRequest request,
243-
SuggestionBuilder builder, bool skipImports) {
244-
// TODO(brianwilkerson): Stop returning the visibility tracker when the
245-
// `LocalReferenceContributor` has been deleted.
233+
void _runFirstPass(DartCompletionRequest request, SuggestionBuilder builder,
234+
bool skipImports) {
246235
var collector = SuggestionCollector();
247236
var selection = request.unit.select(offset: request.offset, length: 0);
248237
if (selection == null) {
@@ -253,7 +242,6 @@ class DartCompletionManager {
253242
state: state, collector: collector, skipImports: skipImports);
254243
pass.computeSuggestions();
255244
builder.suggestFromCandidates(collector.suggestions);
256-
return pass.visibilityTracker;
257245
}
258246
}
259247

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,9 @@ class DeclarationHelper {
169169
} else if (parent is CompilationUnit) {
170170
parent = containingMember;
171171
}
172+
CompilationUnitMember? topLevelMember;
172173
if (parent is CompilationUnitMember) {
174+
topLevelMember = parent;
173175
_addMembersOf(parent, containingMember);
174176
parent = parent.parent;
175177
}
@@ -182,6 +184,9 @@ class DeclarationHelper {
182184
}
183185
}
184186
}
187+
if (topLevelMember != null && !mustBeStatic && !mustBeType) {
188+
_addInheritedMembers(topLevelMember);
189+
}
185190
}
186191

187192
void addMembersOfType(DartType type) {
@@ -319,6 +324,33 @@ class DeclarationHelper {
319324
}
320325
}
321326

327+
/// Add suggestions for any instance members inherited by the
328+
/// [containingMember].
329+
void _addInheritedMembers(CompilationUnitMember containingMember) {
330+
var element = switch (containingMember) {
331+
ClassDeclaration() => containingMember.declaredElement,
332+
EnumDeclaration() => containingMember.declaredElement,
333+
ExtensionDeclaration() => containingMember.declaredElement,
334+
ExtensionTypeDeclaration() => containingMember.declaredElement,
335+
MixinDeclaration() => containingMember.declaredElement,
336+
ClassTypeAlias() => containingMember.declaredElement,
337+
GenericTypeAlias() => containingMember.declaredElement,
338+
_ => null,
339+
};
340+
if (element is! InterfaceElement) {
341+
return;
342+
}
343+
var members = request.inheritanceManager.getInheritedMap2(element);
344+
for (var member in members.values) {
345+
switch (member) {
346+
case MethodElement():
347+
_suggestMethod(member, element);
348+
case PropertyAccessorElement():
349+
_suggestProperty(member, element);
350+
}
351+
}
352+
}
353+
322354
/// Add suggestions for any local declarations that are visible at the
323355
/// completion location, given that the completion location is within the
324356
/// [node].

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

Lines changed: 0 additions & 138 deletions
This file was deleted.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ class OverrideContributor extends DartCompletionContributor {
110110
var namesToOverride = <Name>[];
111111
for (var name in interface.map.keys) {
112112
if (name.isAccessibleFor(libraryUri)) {
113+
// TODO(brianwilkerson): When the user is typing the name of an
114+
// inherited member, the map will contain a key matching the current
115+
// prefix. If the name is the only thing typed (that is, the field
116+
// declaration consists of a single identifier), and that identifier
117+
// matches the name of an overridden member, then the override should
118+
// still be suggested.
113119
if (!interface.declared.containsKey(name)) {
114120
namesToOverride.add(name);
115121
}

pkg/analysis_server/test/lsp/completion_dart_test.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,6 @@ void f() {
471471
}
472472

473473
Future<void> test_local_override() async {
474-
// TODO(dantup): Debug why using "a" instead of "aa" doesn't work.
475474
final content = '''
476475
class Base {
477476
String aa(String a) => '';
@@ -4154,12 +4153,13 @@ void f() {
41544153
prefix: IfElseStatement.prefix,
41554154
label: IfElseStatement.label,
41564155
);
4157-
expect(updated, r'''
4156+
var fourSpaces = ' ';
4157+
expect(updated, '''
41584158
void f() {
4159-
if (${1:condition}) {
4160-
$0
4159+
if (\${1:condition}) {
4160+
\$0
41614161
} else {
4162-
4162+
$fourSpaces
41634163
}
41644164
}
41654165
''');
@@ -4318,13 +4318,13 @@ void f() {
43184318
prefix: TryCatchStatement.prefix,
43194319
label: TryCatchStatement.label,
43204320
);
4321-
4322-
expect(updated, r'''
4321+
var fourSpaces = ' ';
4322+
expect(updated, '''
43234323
void f() {
43244324
try {
4325-
$0
4326-
} catch (${1:e}) {
4327-
4325+
\$0
4326+
} catch (\${1:e}) {
4327+
$fourSpaces
43284328
}
43294329
}
43304330
''');

0 commit comments

Comments
 (0)