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