| Index: pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
|
| index 5a2029a3d9ab3b8132af9f70d3b1661eaa2ab71b..d7761fe769be537f40c18f8dbbf2bbf56fd30536 100644
|
| --- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
|
| +++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
|
| @@ -838,14 +838,11 @@ abstract class TypeInferrerImpl extends TypeInferrer {
|
|
|
| /// Performs the core type inference algorithm for property gets (this handles
|
| /// both null-aware and non-null-aware property gets).
|
| - DartType inferPropertyGet(
|
| - Expression expression,
|
| - Expression receiver,
|
| - int fileOffset,
|
| + DartType inferPropertyGet(Expression expression, Expression receiver,
|
| + int fileOffset, DartType typeContext, bool typeNeeded,
|
| + {VariableDeclaration receiverVariable,
|
| PropertyGet desugaredGet,
|
| - DartType typeContext,
|
| - bool typeNeeded,
|
| - {VariableDeclaration receiverVariable}) {
|
| + Name propertyName}) {
|
| typeNeeded =
|
| listener.propertyGetEnter(expression, typeContext) || typeNeeded;
|
| // First infer the receiver so we can look up the getter that was invoked.
|
| @@ -853,8 +850,9 @@ abstract class TypeInferrerImpl extends TypeInferrer {
|
| if (strongMode) {
|
| receiverVariable?.type = receiverType;
|
| }
|
| + propertyName ??= desugaredGet.name;
|
| Member interfaceMember =
|
| - findInterfaceMember(receiverType, desugaredGet.name, fileOffset);
|
| + findInterfaceMember(receiverType, propertyName, fileOffset);
|
| if (isTopLevel &&
|
| ((interfaceMember is Procedure &&
|
| interfaceMember.kind == ProcedureKind.Getter) ||
|
| @@ -872,9 +870,9 @@ abstract class TypeInferrerImpl extends TypeInferrer {
|
| recordNotImmediatelyEvident(fileOffset);
|
| }
|
| }
|
| - desugaredGet.interfaceTarget = interfaceMember;
|
| + desugaredGet?.interfaceTarget = interfaceMember;
|
| var inferredType =
|
| - getCalleeType(interfaceMember, receiverType, desugaredGet.name);
|
| + getCalleeType(interfaceMember, receiverType, propertyName);
|
| // TODO(paulberry): Infer tear-off type arguments if appropriate.
|
| listener.propertyGetExit(expression, inferredType);
|
| return typeNeeded ? inferredType : null;
|
|
|