Skip to content

Commit cc687f1

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Set types of synthetic getter / setter when set type of PropertyInducingElementImpl.
And, for consistency with local variables, set type by default of FormalParameterElementImpl to InvalidTypeImpl.instance. Change-Id: I9d1ad603ad29b3d019c47914888136a2530274c0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442173 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 7013a02 commit cc687f1

File tree

5 files changed

+23
-46
lines changed

5 files changed

+23
-46
lines changed

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

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3097,7 +3097,7 @@ class FormalParameterElementImpl extends PromotableElementImpl
30973097
final FormalParameterFragmentImpl wrappedElement;
30983098

30993099
@override
3100-
late TypeImpl type;
3100+
TypeImpl type = InvalidTypeImpl.instance;
31013101

31023102
/// Whether this formal parameter inherits from a covariant formal parameter.
31033103
/// This happens when it overrides a method in a supertype that has a
@@ -8749,32 +8749,35 @@ abstract class PropertyInducingElementImpl extends VariableElementImpl
87498749
@override
87508750
TypeImpl get type {
87518751
_ensureReadResolution();
8752-
if (_type != null) return _type!;
8752+
if (_type case var type?) {
8753+
return type;
8754+
}
87538755

87548756
// We must be linking, and the type has not been set yet.
87558757
var type = firstFragment.typeInference?.perform();
87568758
type ??= InvalidTypeImpl.instance;
8757-
_type = type;
8759+
this.type = type;
87588760
shouldUseTypeForInitializerInference = false;
87598761

8760-
// TODO(scheglov): We repeat this code.
8761-
var element = this;
8762-
if (element.getter case var getterElement?) {
8763-
getterElement.returnType = type;
8764-
}
8765-
if (element.setter case var setterElement?) {
8766-
if (setterElement.isSynthetic) {
8767-
setterElement.returnType = VoidTypeImpl.instance;
8768-
setterElement.valueFormalParameter.type = type;
8769-
}
8770-
}
8771-
8772-
return _type!;
8762+
return type;
87738763
}
87748764

87758765
@override
87768766
set type(TypeImpl value) {
87778767
_type = value;
8768+
8769+
if (getter case var getter?) {
8770+
if (getter.isSynthetic) {
8771+
getter.returnType = type;
8772+
}
8773+
}
8774+
8775+
if (setter case var setter?) {
8776+
if (setter.isSynthetic) {
8777+
setter.returnType = VoidTypeImpl.instance;
8778+
setter.valueFormalParameter.type = type;
8779+
}
8780+
}
87788781
}
87798782

87808783
List<PropertyInducingFragmentImpl> get _fragments;

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,7 @@ class _Node extends graph.Node<_Node> {
155155

156156
var representationFragment = element.firstFragment.representation;
157157
var representationElement = representationFragment.element;
158-
159158
representationElement.type = type;
160-
// TODO(scheglov): we repeat similar code in many places
161-
representationElement.getter!.returnType = type;
162159

163160
element.firstFragment.typeErasure = type.extensionTypeErasure;
164161
element.firstFragment.interfaces =

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,7 @@ class InstanceMemberInferrer {
266266
// to be the return type of the combined member signature of said getter
267267
// in the direct superinterfaces.
268268
if (overriddenGetters.isNotEmpty && overriddenSetters.isEmpty) {
269-
var type = combinedGetterType();
270-
_setFieldType(field, type);
269+
field.type = combinedGetterType();
271270
return;
272271
}
273272

@@ -276,8 +275,7 @@ class InstanceMemberInferrer {
276275
// to be the parameter type of the combined member signature of said
277276
// setter in the direct superinterfaces.
278277
if (overriddenGetters.isEmpty && overriddenSetters.isNotEmpty) {
279-
var type = combinedSetterType();
280-
_setFieldType(field, type);
278+
field.type = combinedSetterType();
281279
return;
282280
}
283281

@@ -286,8 +284,7 @@ class InstanceMemberInferrer {
286284
// and a getter is inferred to be the return type of the combined
287285
// member signature of said getter in the direct superinterfaces.
288286
if (field.isFinal) {
289-
var type = combinedGetterType();
290-
_setFieldType(field, type);
287+
field.type = combinedGetterType();
291288
return;
292289
}
293290

@@ -302,7 +299,7 @@ class InstanceMemberInferrer {
302299
var setterType = combinedSetterType();
303300

304301
if (getterType == setterType) {
305-
_setFieldType(field, getterType);
302+
field.type = getterType;
306303
}
307304
return;
308305
}
@@ -756,15 +753,6 @@ class InstanceMemberInferrer {
756753
}
757754
return false;
758755
}
759-
760-
static void _setFieldType(FieldElementImpl field, TypeImpl type) {
761-
field.type = type;
762-
field.getter?.returnType = type;
763-
if (field.setter case var setter?) {
764-
setter.returnType = VoidTypeImpl.instance;
765-
setter.valueFormalParameter.type = type;
766-
}
767-
}
768756
}
769757

770758
/// A class of exception that is not used anywhere else.

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,6 @@ class LibraryBuilder {
223223
);
224224
enum_.valuesTypeNode.type = valuesType;
225225
enum_.valuesElement.element.type = valuesType;
226-
// TODO(scheglov): We repeat this code.
227-
enum_.valuesElement.element.getter!.returnType = valuesType;
228226
}
229227
}
230228

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -255,15 +255,6 @@ class TypesBuilder {
255255
var variableFragment = variable.declaredFragment!;
256256
var variableElement = variableFragment.element;
257257
variableElement.type = type;
258-
if (variableElement is PropertyInducingElementImpl) {
259-
if (variableElement.getter case var getterElement?) {
260-
getterElement.returnType = type;
261-
}
262-
if (variableElement.setter case var setterElement?) {
263-
setterElement.returnType = VoidTypeImpl.instance;
264-
setterElement.valueFormalParameter.type = type;
265-
}
266-
}
267258
}
268259
}
269260
} else {

0 commit comments

Comments
 (0)