public override void VisitInvocationExpression(InvocationExpressionSyntax node)
        {
            if (node.Expression is MemberAccessExpressionSyntax)
            {
                var expr = (MemberAccessExpressionSyntax)node.Expression;

                foreach (var contractKind in KindStrings.Keys)
                {
                    if (ContractType.HasFlag(contractKind) && expr.ToString().StartsWith(KindStrings[contractKind]))
                    {
                        var contract        = StripParenthesis(node.ArgumentList.Arguments[0].Expression);
                        var topLevelClauses = TopLevelClauses(contract, true);

                        foreach (var clause in topLevelClauses)
                        {
                            if (IsInvalidContract(clause))
                            {
                                continue;
                            }

                            ContractTags tags = new ContractTags(contractKind, clause.ToString());
                            foreach (var category in Categories)
                            {
                                var normalized = StripParenthesis(clause);

                                if (category.Rule(ContractType, normalized))
                                {
                                    tags.Labels.Add(category.Name);

                                    if (CATEGORIES_ARE_MUTEX)
                                    {
                                        break;
                                    }
                                }
                                else if (CreateEnumerablePredicate(category.Rule)(ContractType, normalized))
                                {
                                    tags.Labels.Add(category.Name);

                                    if (CATEGORIES_ARE_MUTEX)
                                    {
                                        break;
                                    }
                                }
                            }
                            Labels.Add(tags);
                        }
                    }
                }
            }
        }
        public override void VisitInvocationExpression(InvocationExpressionSyntax node)
        {
            if (node.Expression is MemberAccessExpressionSyntax)
              {
            var expr = (MemberAccessExpressionSyntax)node.Expression;

            foreach (var contractKind in KindStrings.Keys)
            {
              if (ContractType.HasFlag(contractKind) && expr.ToString().StartsWith(KindStrings[contractKind]))
              {
            var contract = StripParenthesis(node.ArgumentList.Arguments[0].Expression);
            var topLevelClauses = TopLevelClauses(contract, true);

            foreach (var clause in topLevelClauses)
            {
              if (IsInvalidContract(clause)) continue;

              ContractTags tags = new ContractTags(contractKind, clause.ToString());
              foreach (var category in Categories)
              {
                var normalized = StripParenthesis(clause);

                if (category.Rule(ContractType, normalized))
                {
                  tags.Labels.Add(category.Name);

                  if (CATEGORIES_ARE_MUTEX) break;
                }
                else if (CreateEnumerablePredicate(category.Rule)(ContractType, normalized))
                {
                  tags.Labels.Add(category.Name);

                  if (CATEGORIES_ARE_MUTEX) break;
                }
              }
              Labels.Add(tags);
            }
              }
            }
              }
        }