Skip to content

Commit e7aaba1

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate OverrideHelper.
Change-Id: I645d901fd0655c33c0c147c2b08a67b4791e6186 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394360 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 15cdbc5 commit e7aaba1

File tree

10 files changed

+54
-49
lines changed

10 files changed

+54
-49
lines changed

pkg/analysis_server/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ lib/src/services/completion/dart/feature_computer.dart
4242
lib/src/services/completion/dart/identifier_helper.dart
4343
lib/src/services/completion/dart/in_scope_completion_pass.dart
4444
lib/src/services/completion/dart/not_imported_completion_pass.dart
45-
lib/src/services/completion/dart/override_helper.dart
4645
lib/src/services/completion/dart/relevance_computer.dart
4746
lib/src/services/completion/dart/suggestion_builder.dart
4847
lib/src/services/completion/dart/utilities.dart

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import 'package:analysis_server/src/services/completion/dart/utilities.dart';
1010
import 'package:analyzer/dart/ast/ast.dart';
1111
import 'package:analyzer/dart/ast/token.dart';
1212
import 'package:analyzer/dart/element/element.dart';
13+
import 'package:analyzer/dart/element/element2.dart';
1314
import 'package:analyzer/dart/element/type.dart';
1415
import 'package:analyzer/source/source_range.dart';
16+
import 'package:analyzer/src/utilities/extensions/element.dart';
1517

1618
/// Information about a code completion suggestion that might or might not be
1719
/// sent to the client (that is, one that is a candidate for being sent).
@@ -797,12 +799,12 @@ final class OverrideSuggestion extends CandidateSuggestion
797799
/// Initialize a newly created candidate suggestion to suggest the [element]
798800
/// by inserting the [shouldInvokeSuper].
799801
OverrideSuggestion({
800-
required this.element,
802+
required ExecutableElement2 element,
801803
required this.shouldInvokeSuper,
802804
required this.skipAt,
803805
required this.replacementRange,
804806
required super.matcherScore,
805-
});
807+
}) : element = element.asElement;
806808

807809
@override
808810
String get completion =>

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,7 @@ class FeatureComputer {
407407
) {
408408
// This method is only visible for the metrics computation and might be made
409409
// private at some future date.
410-
return _inheritanceDistance(
411-
subclass.asElement2 as InterfaceElement2?,
412-
superclass.asElement2 as InterfaceElement2,
413-
{},
414-
);
410+
return _inheritanceDistance(subclass.asElement2, superclass.asElement2, {});
415411
}
416412

417413
/// Return the inheritance distance between the [subclass] and the
@@ -437,8 +433,8 @@ class FeatureComputer {
437433
InterfaceElement superclass,
438434
) {
439435
var distance = _inheritanceDistance(
440-
subclass.asElement2 as InterfaceElement2,
441-
superclass.asElement2 as InterfaceElement2,
436+
subclass.asElement2,
437+
superclass.asElement2,
442438
{},
443439
);
444440
return distanceToPercent(distance);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import 'package:analyzer/src/dart/ast/ast.dart';
2929
import 'package:analyzer/src/dart/ast/extensions.dart';
3030
import 'package:analyzer/src/dart/ast/token.dart';
3131
import 'package:analyzer/src/utilities/extensions/ast.dart';
32+
import 'package:analyzer/src/utilities/extensions/element.dart';
3233
import 'package:analyzer/src/utilities/extensions/flutter.dart';
3334

3435
/// A completion pass that will create candidate suggestions based on the
@@ -3896,7 +3897,7 @@ class InScopeCompletionPass extends SimpleAstVisitor<void> {
38963897
}
38973898
if (suggestOverrides && element != null) {
38983899
overrideHelper.computeOverridesFor(
3899-
interfaceElement: element,
3900+
interfaceElement: element.asElement2,
39003901
replacementRange: SourceRange(offset, 0),
39013902
skipAt: skipAt,
39023903
);

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'dart:math' as math;
77
import 'package:analysis_server/src/services/completion/dart/candidate_suggestion.dart';
88
import 'package:analysis_server/src/services/completion/dart/completion_state.dart';
99
import 'package:analysis_server/src/services/completion/dart/suggestion_collector.dart';
10-
import 'package:analyzer/dart/element/element.dart';
10+
import 'package:analyzer/dart/element/element2.dart';
1111
import 'package:analyzer/source/source_range.dart';
1212
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
1313

@@ -29,14 +29,14 @@ class OverrideHelper {
2929
: inheritanceManager = state.request.inheritanceManager;
3030

3131
void computeOverridesFor({
32-
required InterfaceElement interfaceElement,
32+
required InterfaceElement2 interfaceElement,
3333
required SourceRange replacementRange,
3434
required bool skipAt,
3535
}) {
36-
var interface = inheritanceManager.getInterface(interfaceElement);
37-
var interfaceMap = interface.map;
36+
var interface = inheritanceManager.getInterface2(interfaceElement);
37+
var interfaceMap = interface.map2;
3838
var namesToOverride = _namesToOverride(
39-
interfaceElement.librarySource.uri,
39+
interfaceElement.library2.firstFragment.source.uri,
4040
interface,
4141
);
4242

@@ -73,29 +73,29 @@ class OverrideHelper {
7373
}
7474

7575
/// Checks if the [element] has the `@nonVirtual` annotation.
76-
bool _hasNonVirtualAnnotation(ExecutableElement element) {
77-
if (element is PropertyAccessorElement && element.isSynthetic) {
78-
var variable = element.variable2;
79-
if (variable != null && variable.hasNonVirtual) {
76+
bool _hasNonVirtualAnnotation(ExecutableElement2 element) {
77+
if (element is GetterElement && element.isSynthetic) {
78+
var variable = element.variable3;
79+
if (variable != null && variable.metadata2.hasNonVirtual) {
8080
return true;
8181
}
8282
}
83-
return element.hasNonVirtual;
83+
return element.metadata2.hasNonVirtual;
8484
}
8585

8686
/// Return the list of names that belong to the [interface] of a class, but
8787
/// are not yet declared in the class.
8888
List<Name> _namesToOverride(Uri libraryUri, Interface interface) {
8989
var namesToOverride = <Name>[];
90-
for (var name in interface.map.keys) {
90+
for (var name in interface.map2.keys) {
9191
if (name.isAccessibleFor(libraryUri)) {
9292
// TODO(brianwilkerson): When the user is typing the name of an
9393
// inherited member, the map will contain a key matching the current
9494
// prefix. If the name is the only thing typed (that is, the field
9595
// declaration consists of a single identifier), and that identifier
9696
// matches the name of an overridden member, then the override should
9797
// still be suggested.
98-
if (!interface.declared.containsKey(name)) {
98+
if (!interface.declared2.containsKey(name)) {
9999
namesToOverride.add(name);
100100
}
101101
}

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8596,8 +8596,9 @@ final class FunctionExpressionInvocationImpl extends InvocationExpressionImpl
85968596

85978597
@experimental
85988598
@override
8599-
ExecutableElement2? get element =>
8600-
staticElement?.asElement2 as ExecutableElement2?;
8599+
ExecutableElement2? get element {
8600+
return staticElement?.asElement2;
8601+
}
86018602

86028603
@override
86038604
Token get endToken => _argumentList.endToken;

pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ class InheritanceManager3 {
354354
forMixinIndex: forMixinIndex,
355355
forSuper: forSuper,
356356
);
357-
return element?.asElement2 as ExecutableElement2?;
357+
return element?.asElement2;
358358
}
359359

360360
/// Returns the member with the given [name].
@@ -384,7 +384,7 @@ class InheritanceManager3 {
384384
forMixinIndex: forMixinIndex,
385385
forSuper: forSuper,
386386
);
387-
return oldElement?.asElement2 as ExecutableElement2?;
387+
return oldElement?.asElement2;
388388
}
389389

390390
/// Returns all members of mixins, superclasses, and interfaces that a member
@@ -401,7 +401,7 @@ class InheritanceManager3 {
401401
if (elements == null) {
402402
return null;
403403
}
404-
return elements.map((fragment) => fragment.asExecutableElement2).toList();
404+
return elements.map((fragment) => fragment.asElement2).toList();
405405
}
406406

407407
/// Return all members of mixins, superclasses, and interfaces that a member
@@ -419,9 +419,7 @@ class InheritanceManager3 {
419419
InterfaceElement2 element, Name name) {
420420
var interface = getInterface2(element);
421421
var fragments = interface.overridden[name];
422-
return fragments
423-
?.map((fragment) => fragment.asElement2 as ExecutableElement2)
424-
.toList();
422+
return fragments?.map((fragment) => fragment.asElement2).toList();
425423
}
426424

427425
/// Remove interfaces for classes defined in specified libraries.
@@ -920,8 +918,7 @@ class InheritanceManager3 {
920918
var uniqueRedeclared2 = <Name, List<ExecutableElement2>>{};
921919
for (var entry in redeclared.entries) {
922920
var name = entry.key;
923-
var fragments =
924-
entry.value.map((fragment) => fragment.asExecutableElement2);
921+
var fragments = entry.value.map((fragment) => fragment.asElement2);
925922
if (fragments.length == 1) {
926923
uniqueRedeclared2[name] = fragments.toFixedList();
927924
} else {
@@ -1284,8 +1281,7 @@ class Interface {
12841281
/// The map of names to their signature in the interface.
12851282
@experimental
12861283
Map<Name, ExecutableElement2> get map2 {
1287-
return map
1288-
.map((name, element) => MapEntry(name, element.asExecutableElement2));
1284+
return map.map((name, element) => MapEntry(name, element.asElement2));
12891285
}
12901286

12911287
/// Return `true` if the [name] is implemented in the supertype.
@@ -1435,11 +1431,3 @@ class _ParameterDesc {
14351431
other.name == name;
14361432
}
14371433
}
1438-
1439-
extension on ExecutableElement {
1440-
ExecutableElement2 get asExecutableElement2 => switch (this) {
1441-
ExecutableFragment(:var element) => element,
1442-
ExecutableMember member => member,
1443-
_ => throw UnsupportedError('Unsupported type: $runtimeType'),
1444-
};
1445-
}

pkg/analyzer/lib/src/dart/element/member.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,7 @@ abstract class ExecutableMember extends Member
312312
.nonNulls
313313
.toList();
314314

315-
ExecutableElement2 get _element2 =>
316-
declaration.asElement2 as ExecutableElement2;
315+
ExecutableElement2 get _element2 => declaration.asElement2;
317316

318317
@override
319318
void appendTo(ElementDisplayStringBuilder builder) {

pkg/analyzer/lib/src/error/inheritance_override.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,9 +1091,6 @@ class _ClassVerifier {
10911091

10921092
extension on List<ExecutableElement>? {
10931093
List<ExecutableElement2> get asElement2 {
1094-
return this
1095-
?.map((element) => element.asElement2 as ExecutableElement2)
1096-
.toList() ??
1097-
const [];
1094+
return this?.map((element) => element.asElement2).toList() ?? const [];
10981095
}
10991096
}

pkg/analyzer/lib/src/utilities/extensions/element.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,22 @@ extension ElementOrNullExtension on Element? {
168168
}
169169
}
170170

171+
extension ExecutableElement2Extension on ExecutableElement2 {
172+
ExecutableElement get asElement {
173+
return firstFragment as ExecutableElement;
174+
}
175+
}
176+
177+
extension ExecutableElementExtension on ExecutableElement {
178+
ExecutableElement2 get asElement2 {
179+
return switch (this) {
180+
ExecutableFragment(:var element) => element,
181+
ExecutableMember member => member,
182+
_ => throw UnsupportedError('Unsupported type: $runtimeType'),
183+
};
184+
}
185+
}
186+
171187
extension FormalParameterExtension on FormalParameterElement {
172188
void appendToWithoutDelimiters(
173189
StringBuffer buffer, {
@@ -189,6 +205,12 @@ extension FormalParameterExtension on FormalParameterElement {
189205
}
190206
}
191207

208+
extension InterfaceElementExtension on InterfaceElement {
209+
InterfaceElement2 get asElement2 {
210+
return (this as InterfaceElementImpl).element;
211+
}
212+
}
213+
192214
extension LibraryFragmentExtension on LibraryFragment {
193215
/// Returns a list containing this library fragment and all of its enclosing
194216
/// fragments.

0 commit comments

Comments
 (0)