Skip to content

Commit a9ceaf4

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Use more 'asElement2' in InheritanceManager3.
Use '.asElement' to map InterfaceElement2 into 'InterfaceElement'. Add and use `mapValue` extension method. Change-Id: I63eb5401d33a696c688a522b463434ef5f3f8ed9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394322 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent e7aaba1 commit a9ceaf4

File tree

4 files changed

+35
-21
lines changed

4 files changed

+35
-21
lines changed

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

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,7 @@ class InheritanceManager3 {
153153
@experimental
154154
ExecutableElement2? getInherited3(InterfaceType type, Name name) {
155155
var element = getInherited(type, name);
156-
if (element is ExecutableMember) {
157-
return element as ExecutableElement2;
158-
}
159-
return (element as ExecutableFragment?)?.element;
156+
return element.asElement2;
160157
}
161158

162159
/// Returns the most specific signature of the member with the given [name]
@@ -169,20 +166,17 @@ class InheritanceManager3 {
169166
// This is a replacement for `getInherited2`.
170167
@experimental
171168
ExecutableElement2? getInherited4(InterfaceElement2 element, Name name) {
172-
var oldElement = getInheritedMap2(
173-
(element as AugmentedInterfaceElement).firstFragment)[name];
174-
return (oldElement as ExecutableFragment?)?.element;
169+
var oldElement = getInheritedMap2(element.asElement)[name];
170+
return oldElement.asElement2;
175171
}
176172

177173
/// Returns signatures of all concrete members that the given [element]
178174
/// inherits from the superclasses and mixins.
179175
@experimental
180176
Map<Name, ExecutableElement2> getInheritedConcreteMap(
181177
InterfaceElement2 element) {
182-
var map = getInheritedConcreteMap2(
183-
(element as AugmentedInterfaceElement).firstFragment);
184-
return map.map((name, element) =>
185-
MapEntry(name, (element as ExecutableFragment).element));
178+
var map = getInheritedConcreteMap2(element.asElement);
179+
return map.mapValue((element) => element.asElement2);
186180
}
187181

188182
/// Return signatures of all concrete members that the given [element] inherits
@@ -205,10 +199,8 @@ class InheritanceManager3 {
205199
/// will not be included.
206200
@experimental
207201
Map<Name, ExecutableElement2> getInheritedMap(InterfaceElement2 element) {
208-
var map =
209-
getInheritedMap2((element as AugmentedInterfaceElement).firstFragment);
210-
return map.map((name, element) =>
211-
MapEntry(name, (element as ExecutableFragment).element));
202+
var map = getInheritedMap2(element.asElement);
203+
return map.mapValue((element) => element.asElement2);
212204
}
213205

214206
/// Return the mapping from names to most specific signatures of members
@@ -271,7 +263,7 @@ class InheritanceManager3 {
271263
/// all libraries.
272264
@experimental
273265
Interface getInterface2(InterfaceElement2 element) {
274-
return getInterface((element as AugmentedInterfaceElement).firstFragment);
266+
return getInterface(element.asElement);
275267
}
276268

277269
/// Return the result of [getMember2] with [type] substitution.
@@ -378,7 +370,7 @@ class InheritanceManager3 {
378370
bool forSuper = false,
379371
}) {
380372
var oldElement = getMember2(
381-
(element as AugmentedInterfaceElement).firstFragment,
373+
element.asElement,
382374
name,
383375
concrete: concrete,
384376
forMixinIndex: forMixinIndex,
@@ -395,7 +387,7 @@ class InheritanceManager3 {
395387
List<ExecutableElement2>? getOverridden(
396388
InterfaceElement2 element, Name name) {
397389
var elements = getOverridden2(
398-
(element as AugmentedInterfaceElement).firstFragment,
390+
element.asElement,
399391
name,
400392
);
401393
if (elements == null) {
@@ -1274,14 +1266,13 @@ class Interface {
12741266
/// The map of declared names to their signatures.
12751267
@experimental
12761268
Map<Name, ExecutableElement2> get declared2 {
1277-
return declared.map((name, element) =>
1278-
MapEntry(name, (element as ExecutableFragment).element));
1269+
return declared.mapValue((element) => element.asElement2);
12791270
}
12801271

12811272
/// The map of names to their signature in the interface.
12821273
@experimental
12831274
Map<Name, ExecutableElement2> get map2 {
1284-
return map.map((name, element) => MapEntry(name, element.asElement2));
1275+
return map.mapValue((element) => element.asElement2);
12851276
}
12861277

12871278
/// Return `true` if the [name] is implemented in the supertype.

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ extension MapExtension<K, V> on Map<K, V> {
107107
K? get firstKey {
108108
return keys.firstOrNull;
109109
}
110+
111+
Map<K, V2> mapValue<V2>(V2 Function(V) convert) {
112+
return map((key, value) {
113+
var value2 = convert(value);
114+
return MapEntry(key, value2);
115+
});
116+
}
110117
}
111118

112119
extension MapOfListExtension<K, V> on Map<K, List<V>> {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ extension ExecutableElementExtension on ExecutableElement {
184184
}
185185
}
186186

187+
extension ExecutableElementOrNullExtension on ExecutableElement? {
188+
ExecutableElement2? get asElement2 {
189+
return this?.asElement2;
190+
}
191+
}
192+
187193
extension FormalParameterExtension on FormalParameterElement {
188194
void appendToWithoutDelimiters(
189195
StringBuffer buffer, {
@@ -205,6 +211,12 @@ extension FormalParameterExtension on FormalParameterElement {
205211
}
206212
}
207213

214+
extension InterfaceElement2Extension on InterfaceElement2 {
215+
InterfaceElement get asElement {
216+
return firstFragment as InterfaceElement;
217+
}
218+
}
219+
208220
extension InterfaceElementExtension on InterfaceElement {
209221
InterfaceElement2 get asElement2 {
210222
return (this as InterfaceElementImpl).element;

pkg/analyzer/test/src/utilities/extensions/collection_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ class MapExtensionTest {
119119
expect({0: 1, 2: 3}.firstKey, 0);
120120
expect(<int, int>{}.firstKey, isNull);
121121
}
122+
123+
test_mapValue() {
124+
expect({0: 1, 2: 3}.mapValue((v) => 'v$v'), {0: 'v1', 2: 'v3'});
125+
}
122126
}
123127

124128
@reflectiveTest

0 commit comments

Comments
 (0)