ArchiMetrics.CodeReview.Rules.Code.ImmediateTaskWaitRule.EvaluateImpl C# (CSharp) Метод

EvaluateImpl() защищенный Метод

protected EvaluateImpl ( Microsoft.CodeAnalysis.SyntaxNode node ) : EvaluationResult
node Microsoft.CodeAnalysis.SyntaxNode
Результат EvaluationResult
		protected override EvaluationResult EvaluateImpl(SyntaxNode node)
		{
			var memberAccess = (MemberAccessExpressionSyntax)node;
			if (memberAccess.Expression.IsKind(SyntaxKind.IdentifierName)
				&& memberAccess.Name.Identifier.ValueText == "Wait")
			{
				var invokedVariable = memberAccess.Expression as IdentifierNameSyntax;
				if (invokedVariable != null)
				{
					var variableName = invokedVariable.Identifier.ValueText;
					var methodParent = FindMethodParent(node);
					var variableAssignment = methodParent == null ? null : FindVariableAssignment(methodParent, variableName);
					if (variableAssignment != null)
					{
						var childNodes = memberAccess.Parent.Parent.Parent.ChildNodes().Select(n => n.WithLeadingTrivia().WithTrailingTrivia().ToString()).AsArray();
						var assignmentIndex = Array.IndexOf(childNodes, variableAssignment.Parent.WithLeadingTrivia().WithTrailingTrivia() + ";");
						var invocationIndex = Array.IndexOf(childNodes, memberAccess.Parent.WithLeadingTrivia().WithTrailingTrivia() + ";");
						if (invocationIndex == assignmentIndex + 1)
						{
							var snippet = methodParent.ToFullString();

							return new EvaluationResult
									   {
										   Snippet = snippet
									   };
						}
					}
				}
			}

			return null;
		}