anchor.diff:    }
   
     /// Computes the appropriate set of context messages to report along with an
  -  /// error that may have occurred because [receiver] was not type promoted.
  +  /// error that may have occurred because [expression] was not type promoted.
  +  ///
  +  /// If [expression] is `null`, it means the expression that was not type
  +  /// promoted was an implicit `this`.
  +  ///
  +  /// [errorEntity] is the entity whose location will be associated with the
  +  /// error.  This is needed for test instrumentation.
  +  ///
  +  /// [whyNotPromoted] should be the non-promotion details returned by the flow
  +  /// analysis engine.
     List<DiagnosticMessage> computeWhyNotPromotedMessages(
  -      Expression? receiver,
  +      Expression? expression,
         SyntacticEntity errorEntity,
         Map<DartType, NonPromotionReason>? whyNotPromoted) {
       List<DiagnosticMessage> messages = [];
       if (whyNotPromoted != null) {
         for (var entry in whyNotPromoted.entries) {
           var whyNotPromotedVisitor = _WhyNotPromotedVisitor(
  -            source, receiver, errorEntity, flowAnalysis!.dataForTesting);
  +            source, expression, errorEntity, flowAnalysis!.dataForTesting);
           if (typeSystem.isPotentiallyNullable(entry.key)) continue;
           var message = entry.value.accept(whyNotPromotedVisitor);
           if (message != null) {
  
positive.code:   DartType? propertyType;
  
    _WhyNotPromotedVisitor(
        this.source, this._receiver, this._errorEntity, this._dataForTesting);
  
    @override
    DiagnosticMessage? visitDemoteViaExplicitWrite(
  
negative.code:       return _contextMessageForProperty(receiverElement, reason.propertyName);
      } else {
        assert(receiverElement == null,
            'Unrecognized property element: ${receiverElement.runtimeType}');
        return null;
      }
    }
  