/// <summary>
        /// This method walks the control flow graph counting edges and nodes. Cyclomatic complexity is then calculated from the two values.
        /// </summary>
        private static int CalcCyclomaticComplexity(ICSharpFunctionDeclaration declaration)
        {
            ICSharpControlFlowGraf    graf = CSharpControlFlowBuilder.Build(declaration);
            HashSet <IControlFlowRib> ribs = GetRibs(graf);
            int nodes = GetNodesCount(ribs);

            return(ribs.Count - nodes + 2);
        }
        private static HashSet <IControlFlowRib> GetRibs(ICSharpControlFlowGraf graf)
        {
            var ribs = new HashSet <IControlFlowRib>();

            foreach (ICSharpControlFlowElement element in graf.AllElements)
            {
                foreach (IControlFlowRib rib in element.Exits)
                {
                    ribs.Add(rib);
                }
                foreach (IControlFlowRib rib in element.Entries)
                {
                    ribs.Add(rib);
                }
            }
            return(ribs);
        }
 private static HashSet<IControlFlowRib> GetRibs(ICSharpControlFlowGraf graf)
 {
   var ribs = new HashSet<IControlFlowRib>();
   foreach(ICSharpControlFlowElement element in graf.AllElements)
   {
     foreach(IControlFlowRib rib in element.Exits)
       ribs.Add(rib);
     foreach(IControlFlowRib rib in element.Entries)
       ribs.Add(rib);
   }
   return ribs;
 }