public static int RightSideOfAssignmentCount(ISymbol variable,
                                                 BlockSyntax block,
                                                 SemanticModel semanticModel,
                                                 CancellationToken cancellationToken)
    {
        int count = 0;

        using (var walker = AssignmentWalker.Borrow(block, Search.TopLevel, semanticModel, cancellationToken))
        {
            foreach (AssignmentExpressionSyntax assignment in walker.Assignments)
            {
                var right = semanticModel.GetSymbolSafe(CastUtils.UnWrapCast(assignment.Right), cancellationToken);
                if (right != null && right.Equals(variable))
                {
                    count++;
                }
            }
        }

        using (var walker = VariableDeclarationWalker.Borrow(block, Search.TopLevel, semanticModel, cancellationToken))
        {
            foreach (VariableDeclaratorSyntax delc in walker.Declarations)
            {
                var rightSymbol = semanticModel.GetSymbolSafe(CastUtils.UnWrapCast(delc.Initializer.Value), cancellationToken);
                if (SymbolComparer.Equals(variable, rightSymbol))
                {
                    count++;
                }
            }
        }
        return(count);
    }