Ejemplo n.º 1
0
        private static void ShowChanges(List <ChangeRecord> changes)
        {
            Debug.Assert(changes != null);

            if (changes.Count == 0)
            {
                Console.ForegroundColor = COLOR_NO_WARNING;
                Console.WriteLine("No API changes");
                return;
            }


            //
            // Show changes
            //
            while (true)
            {
                ConsoleUtils.ShowNLinesOnConsole(3, ConsoleColor.Black);

                if (changes.Where(changeTmp => changeTmp.m_ConsoleColor == COLOR_WARNING).Count() == 0)
                {
                    Console.ForegroundColor = COLOR_NO_WARNING;
                    Console.WriteLine("No API breaking change detected!");
                }
                else
                {
                    Console.ForegroundColor = COLOR_WARNING;
                    Console.WriteLine("API breaking change detected! (in Yellow)");
                }

                //
                // Show changes menu
                //
                var aCharNumber = Convert.ToInt16('a');
                for (var i = 0; i <= changes.Count; i++)
                {
                    var changeDescription = "Exit";
                    if (i != changes.Count)
                    {
                        var changeTmp = changes[i];
                        Console.ForegroundColor = changeTmp.m_ConsoleColor;
                        changeDescription       = changeTmp.m_Members.Count() + changeTmp.m_Description;
                    }
                    Console.WriteLine(" " + Convert.ToChar(aCharNumber + i) + ")  " + changeDescription);
                }
                Console.ForegroundColor = COLOR_DEFAULT;


                //
                // Get user choice
                //
                int changeIndex;
                while (true)
                {
                    Console.Write("Enter change key:");
                    var keyChar = Char.ToLower(Console.ReadKey().KeyChar);
                    Console.WriteLine("");
                    changeIndex = Convert.ToInt16(keyChar) - aCharNumber;
                    if (changeIndex < 0 || changeIndex > changes.Count)
                    {
                        Console.Write(keyChar + " is not a valid key!");
                        continue;
                    }
                    break;
                }

                if (changeIndex == changes.Count)
                {
                    break;
                }
                var change = changes[changeIndex];


                //
                // Show changes
                //
                var membersDisplayer = new MembersDisplayer(change.m_Members.ToList());
                membersDisplayer.Display();
            }
        }
Ejemplo n.º 2
0
        public void Run()
        {
            IAnalysisResult analysisResult;

            if (!ProjectAnalysisUtils.TryChooseAnalysisResult(out analysisResult))
            {
                return;
            }
            Debug.Assert(analysisResult != null);

            var codeBase = analysisResult.CodeBase;

            // make usage of the default NDepend attribute: NDepend.Attributes.IsNotDeadCodeAttribute
            var isNotDeadCodeAttribute = codeBase.Types.WithFullName("NDepend.Attributes.IsNotDeadCodeAttribute").SingleOrDefault();
            var funcHasAttribute       = new Func <IMember, bool>(member =>
                                                                  (isNotDeadCodeAttribute != null && member.HasAttribute(isNotDeadCodeAttribute))
                                                                  );


            //
            // Apply dead code algo!
            //
            var deadTypesMetric   = DeadCodeAlgo.FindDeadTypes(codeBase, funcHasAttribute);
            var deadMethodsMetric = DeadCodeAlgo.FindDeadMethods(codeBase, funcHasAttribute);
            var deadFields        = DeadCodeAlgo.FindDeadFields(codeBase, funcHasAttribute);

            var deadCodeRecords = new List <DeadCodeRecord>();

            deadCodeRecords.Add(new DeadCodeRecord(" unused types", deadTypesMetric.Where(v => v.Value == 0).Select(v => v.CodeElement).Cast <IMember>().ToArray()));
            deadCodeRecords.Add(new DeadCodeRecord(" types used only by unused types", deadTypesMetric.Where(v => v.Value > 0).Select(v => v.CodeElement).Cast <IMember>().ToArray()));

            deadCodeRecords.Add(new DeadCodeRecord(" unused methods", deadMethodsMetric.Where(v => v.Value == 0).Select(v => v.CodeElement).Cast <IMember>().ToArray()));
            deadCodeRecords.Add(new DeadCodeRecord(" methods used only by unused methods", deadMethodsMetric.Where(v => v.Value > 0).Select(v => v.CodeElement).Cast <IMember>().ToArray()));

            deadCodeRecords.Add(new DeadCodeRecord(" unused fields", deadFields.Cast <IMember>().ToArray()));

            //
            // No dead code found!
            //
            var deadCodeFound = deadCodeRecords.Where(record => record.m_Members.Count() > 0).Count() > 0;

            if (!deadCodeFound)
            {
                Console.ForegroundColor = COLOR_NO_WARNING;
                Console.WriteLine("No dead code found!");
                return;
            }


            //
            // Show dead code
            //
            while (true)
            {
                ConsoleUtils.ShowNLinesOnConsole(3, ConsoleColor.Black);

                if (deadCodeRecords.Where(record => record.m_Members.Count() > 0).Count() == 0)
                {
                    Console.ForegroundColor = COLOR_NO_WARNING;
                    Console.WriteLine("No dead code found!");
                }
                else
                {
                    Console.ForegroundColor = COLOR_WARNING;
                    Console.WriteLine("Dead code found! (in Yellow)");
                }

                //
                // Show dead code menu
                //
                var aCharNumber = Convert.ToInt16('a');
                for (var i = 0; i <= deadCodeRecords.Count; i++)
                {
                    var description = "Exit";
                    if (i != deadCodeRecords.Count)
                    {
                        var record = deadCodeRecords[i];
                        Console.ForegroundColor = record.m_Members.Count() == 0 ? COLOR_NO_WARNING : COLOR_WARNING;
                        description             = record.m_Members.Count() + record.m_Description;
                    }
                    Console.WriteLine(" " + Convert.ToChar(aCharNumber + i) + ")  " + description);
                }
                Console.ForegroundColor = COLOR_DEFAULT;


                //
                // Get user choice
                //
                int deadCodeIndex;
                while (true)
                {
                    Console.Write("Enter key:");
                    var keyChar = Char.ToLower(Console.ReadKey().KeyChar);
                    Console.WriteLine("");
                    deadCodeIndex = Convert.ToInt16(keyChar) - aCharNumber;
                    if (deadCodeIndex < 0 || deadCodeIndex > deadCodeRecords.Count)
                    {
                        Console.Write(keyChar + " is not a valid key!");
                        continue;
                    }
                    break;
                }

                if (deadCodeIndex == deadCodeRecords.Count)
                {
                    break;
                }
                var recordTmp = deadCodeRecords[deadCodeIndex];


                //
                // Show dead members
                //
                var membersDisplayer = new MembersDisplayer(recordTmp.m_Members.ToList());
                membersDisplayer.Display();
            }
        }