Skip to content

Commit 17483c5

Browse files
keertipCommit Queue
authored andcommitted
[Elements.migrate] Migrate add_extension_override.dart
Change-Id: Id70be814e55899f62fffeb5d435ded3ba85d1278 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398540 Commit-Queue: Keerti Parthasarathy <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 579de4e commit 17483c5

File tree

3 files changed

+138
-6
lines changed

3 files changed

+138
-6
lines changed

pkg/analysis_server/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ lib/src/services/completion/dart/declaration_helper.dart
3232
lib/src/services/completion/dart/identifier_helper.dart
3333
lib/src/services/completion/dart/in_scope_completion_pass.dart
3434
lib/src/services/completion/dart/visibility_tracker.dart
35-
lib/src/services/correction/dart/add_extension_override.dart
3635
lib/src/services/correction/dart/create_extension_member.dart
3736
lib/src/services/correction/dart/import_library.dart
3837
lib/src/services/correction/dart/use_different_division_operator.dart

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ class AddExtensionOverride extends MultiCorrectionProducer {
3030
var dartFixContext = context.dartFixContext;
3131
if (dartFixContext == null) return const [];
3232

33-
var libraryFragment = dartFixContext.unitResult.unit.declaredElement!;
34-
var libraryElement = libraryFragment.library;
33+
var libraryFragment = dartFixContext.unitResult.unit.declaredFragment!;
34+
var libraryElement = libraryFragment.element;
3535

36-
var nodeName = Name(libraryElement.source.uri, node.name);
37-
var extensions = libraryFragment.accessibleExtensions
36+
var nodeName = Name(libraryElement.uri, node.name);
37+
var extensions = libraryFragment.accessibleExtensions2
3838
.havingMemberWithBaseName(nodeName);
3939
var producers = <ResolvedCorrectionProducer>[];
4040
for (var extension in extensions) {
41-
var name = extension.extension.name;
41+
var name = extension.extension.name3;
4242
if (name != null) {
4343
producers.add(_AddOverride(target, name, context: context));
4444
}

pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart

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

55
import 'package:analyzer/dart/analysis/features.dart';
66
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
78
import 'package:analyzer/dart/element/type.dart';
89
import 'package:analyzer/src/dart/element/element.dart';
910
import 'package:analyzer/src/dart/element/generic_inferrer.dart';
@@ -14,6 +15,7 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
1415
import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
1516
import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
1617
import 'package:analyzer/src/generated/inference_log.dart';
18+
import 'package:analyzer/src/utilities/extensions/element.dart';
1719

1820
class InstantiatedExtensionWithMember {
1921
final _NotInstantiatedExtensionWithMember candidate;
@@ -49,6 +51,40 @@ class InstantiatedExtensionWithMember {
4951
}
5052
}
5153

54+
class InstantiatedExtensionWithMember2 {
55+
final _NotInstantiatedExtensionWithMember2 candidate;
56+
final MapSubstitution substitution;
57+
final DartType extendedType;
58+
59+
InstantiatedExtensionWithMember2(
60+
this.candidate,
61+
this.substitution,
62+
this.extendedType,
63+
);
64+
65+
ExtensionResolutionResult get asResolutionResult {
66+
return SingleExtensionResolutionResult(getter: getter, setter: setter);
67+
}
68+
69+
ExtensionElement2 get extension => candidate.extension;
70+
71+
ExecutableElement? get getter {
72+
var getter = candidate.getter.asElement;
73+
if (getter == null) {
74+
return null;
75+
}
76+
return ExecutableMember.from2(getter, substitution);
77+
}
78+
79+
ExecutableElement? get setter {
80+
var setter = candidate.setter.asElement;
81+
if (setter == null) {
82+
return null;
83+
}
84+
return ExecutableMember.from2(setter, substitution);
85+
}
86+
}
87+
5288
class InstantiatedExtensionWithoutMember {
5389
final ExtensionElement extension;
5490
final MapSubstitution substitution;
@@ -72,6 +108,17 @@ abstract class _NotInstantiatedExtension<R> {
72108
});
73109
}
74110

111+
abstract class _NotInstantiatedExtension2<R> {
112+
final ExtensionElement2 extension;
113+
114+
_NotInstantiatedExtension2(this.extension);
115+
116+
R instantiate({
117+
required MapSubstitution substitution,
118+
required DartType extendedType,
119+
});
120+
}
121+
75122
class _NotInstantiatedExtensionWithMember
76123
extends _NotInstantiatedExtension<InstantiatedExtensionWithMember> {
77124
final ExecutableElement? getter;
@@ -90,6 +137,24 @@ class _NotInstantiatedExtensionWithMember
90137
}
91138
}
92139

140+
class _NotInstantiatedExtensionWithMember2
141+
extends _NotInstantiatedExtension2<InstantiatedExtensionWithMember2> {
142+
final ExecutableElement2? getter;
143+
final ExecutableElement2? setter;
144+
145+
_NotInstantiatedExtensionWithMember2(super.extension,
146+
{this.getter, this.setter})
147+
: assert(getter != null || setter != null);
148+
149+
@override
150+
InstantiatedExtensionWithMember2 instantiate({
151+
required MapSubstitution substitution,
152+
required DartType extendedType,
153+
}) {
154+
return InstantiatedExtensionWithMember2(this, substitution, extendedType);
155+
}
156+
}
157+
93158
/// [_NotInstantiatedExtension] for any [ExtensionElement].
94159
class _NotInstantiatedExtensionWithoutMember
95160
extends _NotInstantiatedExtension<InstantiatedExtensionWithoutMember> {
@@ -180,6 +245,74 @@ extension ExtensionsExtensions on Iterable<ExtensionElement> {
180245
}
181246
}
182247

248+
extension ExtensionsExtensions2 on Iterable<ExtensionElement2> {
249+
/// Returns the sublist of [ExtensionElement2]s that have an instance member
250+
/// named [baseName].
251+
List<_NotInstantiatedExtensionWithMember2> havingMemberWithBaseName(
252+
Name baseName,
253+
) {
254+
var result = <_NotInstantiatedExtensionWithMember2>[];
255+
for (var extension in this) {
256+
if (baseName.name == '[]') {
257+
ExecutableElement2? getter;
258+
ExecutableElement2? setter;
259+
for (var method in extension.getters2) {
260+
if (method.name3 == '[]') {
261+
getter = method;
262+
}
263+
}
264+
for (var method in extension.setters2) {
265+
if (method.name3 == '[]=') {
266+
setter = method;
267+
}
268+
}
269+
if (getter != null || setter != null) {
270+
result.add(
271+
_NotInstantiatedExtensionWithMember2(
272+
extension,
273+
getter: getter,
274+
setter: setter,
275+
),
276+
);
277+
}
278+
} else {
279+
for (var field in extension.fields2) {
280+
if (field.isStatic) {
281+
continue;
282+
}
283+
var fieldName = Name(extension.library2.uri, field.displayName);
284+
if (fieldName == baseName) {
285+
result.add(
286+
_NotInstantiatedExtensionWithMember2(
287+
extension,
288+
getter: field.getter2,
289+
setter: field.setter2,
290+
),
291+
);
292+
break;
293+
}
294+
}
295+
for (var method in extension.methods2) {
296+
if (method.isStatic) {
297+
continue;
298+
}
299+
var methodName = Name(extension.library2.uri, method.displayName);
300+
if (methodName == baseName) {
301+
result.add(
302+
_NotInstantiatedExtensionWithMember2(
303+
extension,
304+
getter: method,
305+
),
306+
);
307+
break;
308+
}
309+
}
310+
}
311+
}
312+
return result;
313+
}
314+
}
315+
183316
extension NotInstantiatedExtensionsExtensions<R>
184317
on Iterable<_NotInstantiatedExtension<R>> {
185318
/// Extensions that can be applied, within [targetLibrary], to [targetType].

0 commit comments

Comments
 (0)