anchor.diff:      }
     }
   
  -  /// TODO(scheglov) Replace [leftWriteType] with `node.writeType`
  -  void _resolve2(AssignmentExpressionImpl node, DartType leftWriteType,
  -      {@required bool doNullShortingTermination}) {
  -    TokenType operator = node.operator.type;
  -    if (operator == TokenType.EQ) {
  -      var rightType = node.rightHandSide.staticType;
  -      _inferenceHelper.recordStaticType(node, rightType);
  -    } else if (operator == TokenType.QUESTION_QUESTION_EQ) {
  -      var leftType = node.readType;
  -
  -      // The LHS value will be used only if it is non-null.
  -      if (_isNonNullableByDefault) {
  -        leftType = _typeSystem.promoteToNonNull(leftType);
  -      }
  -
  -      var rightType = node.rightHandSide.staticType;
  -      var result = _typeSystem.getLeastUpperBound(leftType, rightType);
  -
  -      _inferenceHelper.recordStaticType(node, result);
  -    } else if (operator == TokenType.AMPERSAND_AMPERSAND_EQ ||
  -        operator == TokenType.BAR_BAR_EQ) {
  -      _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
  -    } else {
  -      var rightType = node.rightHandSide.staticType;
  -
  -      var leftReadType = node.readType;
  -      if (identical(leftReadType, NeverTypeImpl.instance)) {
  -        _inferenceHelper.recordStaticType(node, rightType);
  -        return;
  -      }
  -
  -      var operatorElement = node.staticElement;
  -      var type = operatorElement?.returnType ?? DynamicTypeImpl.instance;
  -      type = _typeSystem.refineBinaryExpressionType(
  -        leftReadType,
  -        operator,
  -        rightType,
  -        type,
  -        operatorElement,
  -      );
  -      _inferenceHelper.recordStaticType(node, type);
  -
  -      if (!_typeSystem.isAssignableTo2(type, leftWriteType)) {
  -        _resolver.errorReporter.reportErrorForNode(
  -          CompileTimeErrorCode.INVALID_ASSIGNMENT,
  -          node.rightHandSide,
  -          [type, leftWriteType],
  -        );
  -      }
  -    }
  -
  -    if (doNullShortingTermination) {
  -      _resolver.nullShortingTermination(node);
  -    }
  -  }
  -
     void _resolve3(AssignmentExpressionImpl node, Expression left,
         TokenType operator, Expression right) {
       _resolve1(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;
      }
  