private static void HandleAssignment(SyntaxNodeAnalysisContext context)
        {
            if (context.IsExcludedFromAnalysis())
            {
                return;
            }

            if (context.Node is AssignmentExpressionSyntax assignment)
            {
                if (assignment.Right is IdentifierNameSyntax identifier &&
                    context.ContainingSymbol is IMethodSymbol method &&
                    method.DeclaredAccessibility.IsEither(Accessibility.Internal, Accessibility.Protected, Accessibility.Public) &&
                    method.Parameters.TryFirst(x => x.Name == identifier.Identifier.ValueText, out var parameter) &&
                    parameter.Type.IsReferenceType &&
                    !parameter.HasExplicitDefaultValue &&
                    !NullCheck.IsChecked(parameter, assignment.FirstAncestor <BaseMethodDeclarationSyntax>(), context.SemanticModel, context.CancellationToken))
                {
                    context.ReportDiagnostic(Diagnostic.Create(GU0012NullCheckParameter.Descriptor, assignment.Right.GetLocation()));
                }

                if (AreSame(assignment.Left, assignment.Right))
                {
                    if (assignment.FirstAncestorOrSelf <InitializerExpressionSyntax>() != null)
                    {
                        return;
                    }

                    var left  = context.SemanticModel.GetSymbolSafe(assignment.Left, context.CancellationToken);
                    var right = context.SemanticModel.GetSymbolSafe(assignment.Right, context.CancellationToken);
                    if (!ReferenceEquals(left, right))
                    {
                        return;
                    }

                    context.ReportDiagnostic(Diagnostic.Create(GU0010DoNotAssignSameValue.Descriptor, assignment.GetLocation()));
                }
            }
        }