| 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 63cf51c34f02a9b47cf6590698db3c8f63631fa8..e88de480c0ca4610e605687347c063b78704861c 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
|
| @@ -3,6 +3,7 @@
|
| // BSD-style license that can be found in the LICENSE.md file.
|
|
|
| import 'package:front_end/src/base/instrumentation.dart';
|
| +import 'package:front_end/src/fasta/errors.dart' show internalError;
|
| import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
|
| import 'package:front_end/src/fasta/names.dart' show callName;
|
| import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
|
| @@ -29,7 +30,11 @@ import 'package:kernel/ast.dart'
|
| Name,
|
| Procedure,
|
| ProcedureKind,
|
| + PropertyGet,
|
| + PropertySet,
|
| Statement,
|
| + SuperPropertyGet,
|
| + SuperPropertySet,
|
| TypeParameterType,
|
| VoidType;
|
| import 'package:kernel/class_hierarchy.dart';
|
| @@ -258,6 +263,50 @@ abstract class TypeInferrerImpl extends TypeInferrer {
|
| return null;
|
| }
|
|
|
| + /// Finds a member of [receiverType] called [name], and if it is found,
|
| + /// reports it through instrumentation and records it in [propertyGet].
|
| + Member findPropertyGetMember(DartType receiverType, Expression propertyGet,
|
| + {bool silent: false}) {
|
| + if (propertyGet is PropertyGet) {
|
| + var interfaceMember = findInterfaceMember(
|
| + receiverType, propertyGet.name, propertyGet.fileOffset,
|
| + silent: silent);
|
| + propertyGet.interfaceTarget = interfaceMember;
|
| + return interfaceMember;
|
| + } else if (propertyGet is SuperPropertyGet) {
|
| + var interfaceMember = findInterfaceMember(
|
| + receiverType, propertyGet.name, propertyGet.fileOffset,
|
| + silent: silent);
|
| + propertyGet.interfaceTarget = interfaceMember;
|
| + return interfaceMember;
|
| + } else {
|
| + throw internalError(
|
| + 'Unexpected propertyGet type: ${propertyGet.runtimeType}');
|
| + }
|
| + }
|
| +
|
| + /// Finds a member of [receiverType] called [name], and if it is found,
|
| + /// reports it through instrumentation and records it in [propertySet].
|
| + Member findPropertySetMember(DartType receiverType, Expression propertySet,
|
| + {bool silent: false}) {
|
| + if (propertySet is PropertySet) {
|
| + var interfaceMember = findInterfaceMember(
|
| + receiverType, propertySet.name, propertySet.fileOffset,
|
| + setter: true, silent: silent);
|
| + propertySet.interfaceTarget = interfaceMember;
|
| + return interfaceMember;
|
| + } else if (propertySet is SuperPropertySet) {
|
| + var interfaceMember = findInterfaceMember(
|
| + receiverType, propertySet.name, propertySet.fileOffset,
|
| + setter: true, silent: silent);
|
| + propertySet.interfaceTarget = interfaceMember;
|
| + return interfaceMember;
|
| + } else {
|
| + throw internalError(
|
| + 'Unexpected propertySet type: ${propertySet.runtimeType}');
|
| + }
|
| + }
|
| +
|
| /// Finds a member of [receiverType] called [name], and if it is found,
|
| /// reports it through instrumentation and records it in [methodInvocation].
|
| Member findMethodInvocationMember(
|
|
|