anchor.diff:      right?.accept(_resolver);
       right = node.rightHandSide;
   
  -    _resolve2(node, node.writeType, doNullShortingTermination: false);
  -
  -    // TODO(scheglov) inline into resolve2().
  -    DartType assignedType;
  -    if (operator == TokenType.EQ ||
  -        operator == TokenType.QUESTION_QUESTION_EQ) {
  -      assignedType = right.staticType;
  -    } else {
  -      assignedType = node.staticType;
  -    }
  -    _checkForInvalidAssignment(node.writeType, right, assignedType);
  +    _resolveTypes(node);
   
       _resolver.nullShortingTermination(node);
   
  
positive.code:     }
  
      _resolve3(node, left, operator, right);
    }
  
    /// TODO(scheglov) This is mostly necessary for backward compatibility.
  
negative.code:     Expression right,
      DartType rightType,
    ) {
      if (!writeType.isVoid && _checkForUseOfVoidResult(right)) {
        return;
      }
  