Skip to content

Commit a90bb09

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Use ElementImpl for Member, other tweaks.
Change-Id: Iee806e5f302473950a510c63012fb28698f413cb Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417083 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent a53d81e commit a90bb09

File tree

3 files changed

+38
-51
lines changed

3 files changed

+38
-51
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4459,7 +4459,7 @@ class FormalParameterElementImpl extends PromotableElementImpl2
44594459

44604460
@override
44614461
// TODO(augmentations): Implement the merge of formal parameters.
4462-
List<FormalParameterElement> get formalParameters =>
4462+
List<FormalParameterElementImpl> get formalParameters =>
44634463
wrappedElement.parameters.map((fragment) => fragment.element).toList();
44644464

44654465
@override

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

Lines changed: 36 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -94,31 +94,29 @@ class ConstructorMember extends ExecutableMember
9494
}
9595

9696
@override
97-
ConstructorElement2? get redirectedConstructor2 {
98-
var element = redirectedConstructor.asElement2;
99-
return switch (element) {
100-
ConstructorElement2() => element,
101-
_ => null,
102-
};
97+
ConstructorElementMixin2? get redirectedConstructor2 {
98+
return redirectedConstructor?.asElement2;
10399
}
104100

105101
@override
106-
InterfaceTypeImpl get returnType =>
107-
// TODO(paulberry): eliminate this cast by changing the type of `type` to
108-
// `FunctionTypeImpl`.
109-
type.returnType as InterfaceTypeImpl;
102+
InterfaceTypeImpl get returnType {
103+
var returnType = declaration.returnType;
104+
return substitution.mapInterfaceType(returnType);
105+
}
110106

111107
@override
112108
Source get source => _declaration.source!;
113109

114110
@override
115-
ConstructorElement? get superConstructor {
111+
ConstructorElementMixin? get superConstructor {
116112
var element = declaration.superConstructor;
117113
return _redirect(element);
118114
}
119115

120116
@override
121-
ConstructorElement2? get superConstructor2 => superConstructor?.asElement2;
117+
ConstructorElementMixin2? get superConstructor2 {
118+
return superConstructor?.asElement2;
119+
}
122120

123121
@override
124122
ConstructorElementImpl2 get _element2 => declaration.asElement2;
@@ -215,7 +213,7 @@ abstract class ExecutableMember extends Member
215213
/// their bounds. The [substitution] includes replacing [declaration] type
216214
/// parameters with the provided fresh [typeParameters].
217215
ExecutableMember({
218-
required ExecutableElement super.declaration,
216+
required ExecutableElementImpl super.declaration,
219217
required super.substitution,
220218
required this.typeParameters,
221219
});
@@ -338,10 +336,8 @@ abstract class ExecutableMember extends Member
338336
}
339337

340338
@override
341-
List<TypeParameterElement2> get typeParameters2 => typeParameters
342-
.map((fragment) => fragment.asElement2 as TypeParameterElement2?)
343-
.nonNulls
344-
.toList();
339+
List<TypeParameterElementImpl2> get typeParameters2 =>
340+
typeParameters.map((fragment) => fragment.asElement2).toList();
345341

346342
@override
347343
ExecutableElement2 get _element2 => declaration.asElement2;
@@ -391,33 +387,27 @@ abstract class ExecutableMember extends Member
391387
}
392388

393389
static ExecutableElementOrMember from2(
394-
ExecutableElement element,
390+
ExecutableElementOrMember element,
395391
MapSubstitution substitution,
396392
) {
397-
// TODO(scheglov): There is (E, E) substitution in `test_rewrite_without_target`.
398-
// TODO(scheglov): Shortcut on `_NullSubstitution`.
393+
if (identical(substitution, Substitution.empty)) {
394+
return element;
395+
}
399396

400397
ExecutableElementImpl declaration;
401398
var combined = substitution;
402399
if (element is ExecutableMember) {
403-
ExecutableMember member = element;
404-
declaration = member.declaration;
400+
declaration = element.declaration;
405401

406402
var map = <TypeParameterElement2, DartType>{
407-
for (var MapEntry(:key, :value) in member.substitution.map.entries)
403+
for (var MapEntry(:key, :value) in element.substitution.map.entries)
408404
key: substitution.substituteType(value),
409405
};
410406
combined = Substitution.fromMap2(map);
411407
} else {
412408
declaration = element as ExecutableElementImpl;
413409
}
414410

415-
if (combined.map.isEmpty) {
416-
// TODO(paulberry): eliminate this cast by changing the type of the
417-
// parameter `element`.
418-
return element as ExecutableElementOrMember;
419-
}
420-
421411
switch (declaration) {
422412
case ConstructorElementImpl():
423413
return ConstructorMember(
@@ -784,15 +774,15 @@ class GetterMember extends PropertyAccessorMember
784774
/// parameters are known.
785775
abstract class Member implements Element, ElementOrMember {
786776
/// The element on which the parameterized element was created.
787-
final Element _declaration;
777+
final ElementImpl _declaration;
788778

789779
/// The substitution for type parameters referenced in the base element.
790780
final MapSubstitution substitution;
791781

792782
/// Initialize a newly created element to represent a member, based on the
793783
/// [declaration], and applied [substitution].
794784
Member({
795-
required Element declaration,
785+
required ElementImpl declaration,
796786
required this.substitution,
797787
}) : _declaration = declaration {
798788
if (_declaration is Member) {
@@ -808,7 +798,7 @@ abstract class Member implements Element, ElementOrMember {
808798
AnalysisContext get context => _declaration.context;
809799

810800
@override
811-
ElementImpl get declaration => _declaration as ElementImpl;
801+
ElementImpl get declaration => _declaration;
812802

813803
@override
814804
String get displayName => _declaration.displayName;
@@ -922,12 +912,12 @@ abstract class Member implements Element, ElementOrMember {
922912
Source? get librarySource => _declaration.librarySource;
923913

924914
@override
925-
ElementLocation get location => _declaration.location!;
915+
ElementLocation get location => _declaration.location;
926916

927917
@override
928918
List<ElementAnnotation> get metadata => _declaration.metadata;
929919

930-
Metadata get metadata2 => (_declaration as ElementImpl).metadata2;
920+
Metadata get metadata2 => declaration.metadata2;
931921

932922
@override
933923
String? get name => _declaration.name;
@@ -1175,8 +1165,7 @@ class ParameterMember extends VariableMember
11751165
FormalParameterFragment get firstFragment => _element2.firstFragment;
11761166

11771167
@override
1178-
// TODO(brianwilkerson): This loses type information.
1179-
List<FormalParameterElement> get formalParameters =>
1168+
List<FormalParameterElementImpl> get formalParameters =>
11801169
_element2.formalParameters;
11811170

11821171
@override
@@ -1244,7 +1233,7 @@ class ParameterMember extends VariableMember
12441233
TypeImpl get typeShared => type;
12451234

12461235
@override
1247-
FormalParameterElement get _element2 => declaration.asElement2;
1236+
FormalParameterElementImpl get _element2 => declaration.asElement2;
12481237

12491238
@Deprecated('Use Element2 and accept2() instead')
12501239
@override
@@ -1403,17 +1392,16 @@ abstract class PropertyAccessorMember extends ExecutableMember
14031392

14041393
@override
14051394
PropertyInducingElementOrMember? get variable2 {
1406-
// TODO(scheglov): revisit
14071395
var variable = declaration.variable2;
1408-
if (variable is FieldElementImpl) {
1409-
return FieldMember(
1410-
declaration: variable,
1411-
substitution: substitution,
1412-
);
1413-
} else if (variable is TopLevelVariableElementImpl) {
1414-
return variable;
1396+
switch (variable) {
1397+
case FieldElementImpl():
1398+
return FieldMember(
1399+
declaration: variable,
1400+
substitution: substitution,
1401+
);
1402+
default:
1403+
return variable;
14151404
}
1416-
return variable;
14171405
}
14181406

14191407
@Deprecated('Use Element2 and accept2() instead')
@@ -1635,7 +1623,7 @@ class _SubstitutedTypeParameters {
16351623
final MapSubstitution substitution;
16361624

16371625
factory _SubstitutedTypeParameters(
1638-
List<TypeParameterElement> elements,
1626+
List<TypeParameterElementImpl> elements,
16391627
MapSubstitution substitution,
16401628
) {
16411629
if (elements.isEmpty) {
@@ -1658,8 +1646,7 @@ class _SubstitutedTypeParameters {
16581646
}
16591647

16601648
// Update bounds to reference new TypeParameterElement(s).
1661-
// TODO(scheglov): remove the cast
1662-
var substitution2 = Substitution.fromPairs(elements.cast(), newTypes);
1649+
var substitution2 = Substitution.fromPairs(elements, newTypes);
16631650
for (int i = 0; i < newElements.length; i++) {
16641651
var element = elements[i];
16651652
var newElement = newElements[i];

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2008,7 +2008,7 @@ class ResolutionReader {
20082008
);
20092009
}
20102010

2011-
if (element is ExecutableElement) {
2011+
if (element is ExecutableElementOrMember) {
20122012
element = ExecutableMember.from2(element, substitution);
20132013
} else {
20142014
element as FieldElementImpl;

0 commit comments

Comments
 (0)