ArchiMetrics.CodeReview.Rules.Code.MissingEventHandlerDetachmentRule.EvaluateImpl C# (CSharp) Method

EvaluateImpl() protected method

protected EvaluateImpl ( Microsoft.CodeAnalysis.SyntaxNode node ) : EvaluationResult
node Microsoft.CodeAnalysis.SyntaxNode
return EvaluationResult
		protected override EvaluationResult EvaluateImpl(SyntaxNode node)
		{
			var declarationSyntax = (TypeDeclarationSyntax)node;
			var addAssignments = declarationSyntax
				.DescendantNodes()
				.Where(x => x.Kind() == SyntaxKind.AddAssignmentExpression)
				.Cast<AssignmentExpressionSyntax>()
				.AsArray();
			var subtractAssignments = declarationSyntax.DescendantNodes()
				.Where(x => x.Kind() == SyntaxKind.SubtractAssignmentExpression)
				.Cast<AssignmentExpressionSyntax>()
				.AsArray();

			var assignmentExpressionSyntaxes = addAssignments.DistinctBy(x => x.ToFullString()).AsArray();

			if (assignmentExpressionSyntaxes.Count() != subtractAssignments.DistinctBy(x => x.ToFullString()).Count())
			{
				var unmatched = assignmentExpressionSyntaxes.Where(x => !MatchingAssignmentExpressionExists(x, subtractAssignments));
				var snippet = string.Join(Environment.NewLine, unmatched.Select(x => x.ToFullString()));

				return new EvaluationResult
						   {
							   Snippet = snippet
						   };
			}

			return null;
		}