@@ -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.
785775abstract 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];
0 commit comments