Skip to content

Commit c156687

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Exploit the fact that setters always have exctly one formal parameter.
So, it is always present in the AST. And it is always present in the elements model: fragments and elements. Change-Id: I8ca84f88d4a605f926008c1c2d638cb48e4d26f5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442104 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 9b89266 commit c156687

File tree

5 files changed

+27
-52
lines changed

5 files changed

+27
-52
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5132,7 +5132,8 @@ abstract class InterfaceFragmentImpl extends InstanceFragmentImpl
51325132
List<InterfaceTypeImpl> _interfaces = const [];
51335133

51345134
/// This callback is set during mixins inference to handle reentrant calls.
5135-
List<InterfaceTypeImpl>? Function(InterfaceFragmentImpl)? mixinInferenceCallback;
5135+
List<InterfaceTypeImpl>? Function(InterfaceFragmentImpl)?
5136+
mixinInferenceCallback;
51365137

51375138
InterfaceTypeImpl? _supertype;
51385139

@@ -8735,8 +8736,7 @@ abstract class PropertyInducingElementImpl extends VariableElementImpl
87358736
if (element.setter case var setterElement?) {
87368737
if (setterElement.isSynthetic) {
87378738
setterElement.returnType = VoidTypeImpl.instance;
8738-
setterElement.formalParameters.single
8739-
.type = type;
8739+
setterElement.valueFormalParameter.type = type;
87408740
}
87418741
}
87428742

@@ -8963,8 +8963,8 @@ class SetterFragmentImpl extends PropertyAccessorFragmentImpl
89638963
return null;
89648964
}
89658965

8966-
FormalParameterFragmentImpl? get valueFormalParameter {
8967-
return formalParameters.singleOrNull;
8966+
FormalParameterFragmentImpl get valueFormalParameter {
8967+
return formalParameters.single;
89688968
}
89698969

89708970
void addFragment(SetterFragmentImpl fragment) {

pkg/analyzer/lib/src/fine/manifest_item.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ class InstanceItemSetterItem extends InstanceItemMemberItem<SetterElementImpl> {
761761
element.thisOrVariableMetadata,
762762
),
763763
isStatic: element.isStatic,
764-
valueType: element.formalParameters[0].type.encode(context),
764+
valueType: element.valueFormalParameter.type.encode(context),
765765
);
766766
}
767767

@@ -777,7 +777,7 @@ class InstanceItemSetterItem extends InstanceItemMemberItem<SetterElementImpl> {
777777
@override
778778
bool match(MatchContext context, SetterElementImpl element) {
779779
return super.match(context, element) &&
780-
valueType.match(context, element.formalParameters[0].type);
780+
valueType.match(context, element.valueFormalParameter.type);
781781
}
782782

783783
@override
@@ -1302,7 +1302,7 @@ class TopLevelSetterItem extends TopLevelItem<SetterElementImpl> {
13021302
context,
13031303
element.thisOrVariableMetadata,
13041304
),
1305-
valueType: element.formalParameters[0].type.encode(context),
1305+
valueType: element.valueFormalParameter.type.encode(context),
13061306
);
13071307
}
13081308

@@ -1317,7 +1317,7 @@ class TopLevelSetterItem extends TopLevelItem<SetterElementImpl> {
13171317
@override
13181318
bool match(MatchContext context, SetterElementImpl element) {
13191319
return super.match(context, element) &&
1320-
valueType.match(context, element.formalParameters[0].type);
1320+
valueType.match(context, element.valueFormalParameter.type);
13211321
}
13221322

13231323
@override

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,13 +1115,6 @@ class LibraryReader {
11151115

11161116
element.deferReadResolution(
11171117
_createDeferredReadResolutionCallback((reader) {
1118-
// TODO(scheglov): add to element
1119-
var valueFragment = fragments.first.valueFormalParameter;
1120-
if (valueFragment != null) {
1121-
// TODO(scheglov): create, not get
1122-
valueFragment.element;
1123-
}
1124-
11251118
element.returnType = reader.readRequiredType();
11261119
// TODO(scheglov): other properties?
11271120
}),

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

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,7 @@ class InstanceMemberInferrer {
206206
}
207207

208208
if (setter != null) {
209-
var formalParameters =
210-
setter.formalParameters.cast<FormalParameterElementImpl>();
211-
if (formalParameters.isEmpty) {
212-
return;
213-
}
214-
var valueFormalParameter = formalParameters[0];
209+
var valueFormalParameter = setter.valueFormalParameter;
215210

216211
if (overriddenSetters.any((s) => _isCovariantSetter(s.baseElement))) {
217212
valueFormalParameter.inheritsCovariant = true;
@@ -258,9 +253,7 @@ class InstanceMemberInferrer {
258253
var setter = field.setter;
259254
if (setter != null) {
260255
if (overriddenSetters.any((s) => _isCovariantSetter(s.baseElement))) {
261-
var formalParameter = setter.formalParameters[0];
262-
formalParameter.inheritsCovariant =
263-
true;
256+
setter.valueFormalParameter.inheritsCovariant = true;
264257
}
265258
}
266259

@@ -491,11 +484,7 @@ class InstanceMemberInferrer {
491484
var formalParameters = element.formalParameters;
492485
for (var index = 0; index < formalParameters.length; index++) {
493486
var formalParameter = formalParameters[index];
494-
_inferParameterCovariance(
495-
formalParameter,
496-
index,
497-
overriddenElements,
498-
);
487+
_inferParameterCovariance(formalParameter, index, overriddenElements);
499488

500489
if (formalParameter.hasImplicitType) {
501490
_inferParameterType(formalParameter, index, combinedSignatureType);
@@ -757,10 +746,7 @@ class InstanceMemberInferrer {
757746
return overriddenType;
758747
}
759748

760-
return replaceTypeParameters(
761-
overriddenType,
762-
elementTypeParameters,
763-
);
749+
return replaceTypeParameters(overriddenType, elementTypeParameters);
764750
}
765751

766752
static bool _isCovariantSetter(ExecutableElementImpl element) {

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

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,11 @@ class TypesBuilder {
186186
(element.variable as TopLevelVariableElementImpl).type = returnType;
187187
case SetterElementImpl():
188188
element.returnType = returnType;
189-
var valueElement =
190-
element.formalParameters.singleOrNull;
191-
var valueNode =
192-
node.functionExpression.parameters?.parameters.firstOrNull;
193-
var valueNodeElement = valueNode?.declaredFragment!.element;
194-
var valueNodeType = valueNodeElement?.type;
195-
var valueType = valueNodeType ?? InvalidTypeImpl.instance;
196-
valueElement?.type = valueType;
189+
var valueElement = element.valueFormalParameter;
190+
var valueNode = node.functionExpression.parameters!.parameters.single;
191+
var valueNodeElement = valueNode.declaredFragment!.element;
192+
var valueType = valueNodeElement.type;
193+
valueElement.type = valueType;
197194

198195
var variableElement = element.variable as TopLevelVariableElementImpl;
199196
if (variableElement.isSynthetic) {
@@ -229,13 +226,11 @@ class TypesBuilder {
229226
(element.variable as FieldElementImpl).type = returnType;
230227
case SetterElementImpl():
231228
element.returnType = returnType;
232-
var valueElement =
233-
element.formalParameters.singleOrNull;
234-
var valueNode = node.parameters?.parameters.firstOrNull;
235-
var valueNodeElement = valueNode?.declaredFragment!.element;
236-
var valueNodeType = valueNodeElement?.type;
237-
var valueType = valueNodeType ?? InvalidTypeImpl.instance;
238-
valueElement?.type = valueType;
229+
var valueElement = element.valueFormalParameter;
230+
var valueNode = node.parameters!.parameters.single;
231+
var valueNodeElement = valueNode.declaredFragment!.element;
232+
var valueType = valueNodeElement.type;
233+
valueElement.type = valueType;
239234

240235
var variableElement = element.variable as FieldElementImpl;
241236
if (variableElement.isSynthetic && variableElement.getter == null) {
@@ -266,8 +261,7 @@ class TypesBuilder {
266261
}
267262
if (variableElement.setter case var setterElement?) {
268263
setterElement.returnType = VoidTypeImpl.instance;
269-
setterElement.formalParameters.single
270-
.type = type;
264+
setterElement.valueFormalParameter.type = type;
271265
}
272266
}
273267
}
@@ -648,7 +642,9 @@ class _MixinsInference {
648642

649643
/// This method is invoked when mixins are asked from the [element], and
650644
/// we are not inferring the [element] now, i.e. there is no loop.
651-
List<InterfaceTypeImpl>? _callbackWhenRecursion(InterfaceFragmentImpl element) {
645+
List<InterfaceTypeImpl>? _callbackWhenRecursion(
646+
InterfaceFragmentImpl element,
647+
) {
652648
var declaration = _declarations[element];
653649
if (declaration != null) {
654650
_inferDeclaration(declaration);

0 commit comments

Comments
 (0)