Index: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
index 8857a2280605a2133fdd5d5c5bb947c6e84ad8db..10cc272f1ef311377fc60b39a25df22429f6c84e 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
@@ -510,21 +510,23 @@ class KernelDirectMethodInvocation extends DirectMethodInvocation |
Expression receiver, Procedure target, Arguments arguments) |
: super(receiver, target, arguments); |
- KernelDirectMethodInvocation.byReference( |
- Expression receiver, Reference targetReference, Arguments arguments) |
- : super.byReference(receiver, targetReference, arguments); |
- |
@override |
void _collectDependencies(KernelDependencyCollector collector) { |
- // TODO(paulberry): Determine the right thing to do here. |
- throw 'TODO(paulberry)'; |
+ // DirectMethodInvocation can only occur as a result of a use of `super`, |
+ // and `super` can't appear inside a field initializer. So this code should |
+ // never be reached. |
+ internalError( |
+ 'Unexpected call to _collectDependencies for DirectMethodInvocation'); |
} |
@override |
DartType _inferExpression( |
KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
- // TODO(scheglov): implement. |
- return typeNeeded ? const DynamicType() : null; |
+ inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset, |
+ 'target', new InstrumentationValueForMember(target)); |
+ return inferrer.inferMethodInvocation( |
+ this, receiver, fileOffset, false, typeContext, typeNeeded, |
+ interfaceMember: target, methodName: target.name, arguments: arguments); |
} |
} |
@@ -1266,8 +1268,9 @@ class KernelMethodInvocation extends MethodInvocation |
@override |
DartType _inferExpression( |
KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
- return inferrer.inferMethodInvocation(this, receiver, fileOffset, this, |
- _isImplicitCall, typeContext, typeNeeded); |
+ return inferrer.inferMethodInvocation( |
+ this, receiver, fileOffset, _isImplicitCall, typeContext, typeNeeded, |
+ desugaredInvocation: this); |
} |
} |
@@ -1321,11 +1324,11 @@ class KernelNullAwareMethodInvocation extends Let implements KernelExpression { |
this, |
variable.initializer, |
fileOffset, |
- _desugaredInvocation, |
false, |
typeContext, |
typeNeeded || inferrer.strongMode, |
- receiverVariable: variable); |
+ receiverVariable: variable, |
+ desugaredInvocation: _desugaredInvocation); |
if (inferrer.strongMode) { |
body.staticType = inferredType; |
} |
@@ -1787,8 +1790,13 @@ class KernelSuperMethodInvocation extends SuperMethodInvocation |
@override |
DartType _inferExpression( |
KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
- // TODO(scheglov): implement. |
- return typeNeeded ? const DynamicType() : null; |
+ inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset, |
+ 'target', new InstrumentationValueForMember(interfaceTarget)); |
+ return inferrer.inferMethodInvocation(this, new KernelThisExpression(), |
+ fileOffset, false, typeContext, typeNeeded, |
+ interfaceMember: interfaceTarget, |
+ methodName: name, |
+ arguments: arguments); |
} |
} |