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:     Expression right,
      DartType rightType,
    ) {
      // TODO(scheglov) should not happen
      if (writeType == null) {
        return;
      }
  
      if (!writeType.isVoid && _checkForUseOfVoidResult(right)) {
        return;
      }
  
negative.code:   /// TODO(scheglov) this is duplication
    void _recordStaticType(Expression expression, DartType type) {
      if (_resolver.migrationResolutionHooks != null) {
        type = _migrationResolutionHooks.modifyExpressionType(expression, type);
      }
  
      // TODO(scheglov) type cannot be null
  