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())); } } }