示例#1
0
        private AridCheckResult CheckSimpleNode(IAnalyzableNode node)
        {
            var filterPassing = _filters.FirstOrDefault(filter => filter.IsSatisfied(node));

            return(filterPassing != null
                ? AridCheckResult.CreateForArid(filterPassing)
                : AridCheckResult.CreateForNonArid());
        }
示例#2
0
 public AridCheckResult Check(IAnalyzableNode node, IDictionary <IAnalyzableNode, AridCheckResult> results)
 {
     if (IsAnyParentArid(results, node, out var parentResult))
     {
         return(AridCheckResult.CreateForArid(parentResult.TriggeredBy));
     }
     return(node.IsCompoundNode ? CheckCompoundNode(node, results) : CheckSimpleNode(node));
 }
示例#3
0
        private AridCheckResult CheckCompoundNode(IAnalyzableNode node, IDictionary <IAnalyzableNode, AridCheckResult> results)
        {
            var filtersTriggered = new List <IAridNodeFilter>();
            var childNodes       = node.ChildNodes();

            foreach (var childNode in childNodes)
            {
                var check = Check(childNode, results);
                if (!check.IsArid)
                {
                    return(check);
                }
                filtersTriggered.AddRange(check.TriggeredBy);
            }

            return(AridCheckResult.CreateForArid(filtersTriggered.ToArray()));
        }
示例#4
0
        private static bool TryGetResult(IDictionary <IAnalyzableNode, AridCheckResult> results, IAnalyzableNode syntaxNode, out AridCheckResult result)
        {
            if (!results.ContainsKey(syntaxNode))
            {
                result = null;
                return(false);
            }

            result = results[syntaxNode];
            return(true);
        }
示例#5
0
        private static bool IsAnyParentArid(IDictionary <IAnalyzableNode, AridCheckResult> results, IAnalyzableNode node, out AridCheckResult parentResult)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            var parent = node.Parent;

            while (parent != null &&
                   parent.SyntaxType != AnalyzableNodeSyntaxType.StatementSyntax &&
                   parent.SyntaxType != AnalyzableNodeSyntaxType.MethodDeclarationSyntax &&
                   parent.SyntaxType != AnalyzableNodeSyntaxType.PropertyDeclarationSyntax)
            {
                if (TryGetResult(results, parent, out var result) && result.IsArid)
                {
                    parentResult = result;
                    return(true);
                }

                parent = parent.Parent;
            }
            parentResult = null;
            return(false);
        }