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