public List<DeveloperModel> GetAllDeveloper(AssemblyModel assemblyModel) { List<DeveloperModel> result = new List<DeveloperModel>(); lock (this) { result = DeveloperModelList; } return result; }
public MethodModel(string methodName, AssemblyModel theAssembly, CreaterAttribute createPerson, int iLCodeNum, ReviewerAttribute[] reviews, bool? bug, string codeString) { this.Name = methodName; this.TheAssembly = theAssembly; this.CreaterAttr = createPerson; this.ILCodeNum = iLCodeNum; this.ReviewerAttr = reviews == null ? new ReviewerAttribute[] { } : reviews; this.Bug = bug; this.CodeString = codeString; }
private void LoadAssemblyInfo(AssemblyModel assemblyModel) { this.lblFileName.Text = assemblyModel.FileName; this.lblFileLength.Text = string.Format("{0}", DataConverter.MyConverter.ConvertToFileLength(assemblyModel.AssemblyFileLength)); this.lblAssemblyName.Text = assemblyModel.Name; this.lblGuid.Text = string.IsNullOrEmpty(assemblyModel.Guid) ? "该程序集没有标注 Guid" : assemblyModel.Guid; this.lblVersion.Text = assemblyModel.Version; this.lblMethodSum.Text = string.Format("{0} 个", assemblyModel.MethodNum); this.lblCodeNum.Text = string.Format("{0} 行", assemblyModel.ILCodeNum); this.lblDeveloperNum.Text = string.Format("{0} 名", assemblyModel.Developers.Count); }
public FormReport(AssemblyModel assemblymodels) { InitializeComponent(); assemblyModel = assemblymodels; this.FormClosing += delegate { DeveloperModelBindingSource.Dispose(); AssemblyModelBindingSource.Dispose(); ReportFormatDeveloperBindingSource.Dispose(); reportViewer1.Dispose(); }; }
public DeveloperModel GetDeveloper(string developerName, AssemblyModel theAssembly) { DeveloperModel developer = null; lock (this) { developer = DeveloperModelList.Find(((DeveloperModel d) => { if (d.Name.Equals(developerName) && d.TheAssembly.Equals(theAssembly)) return true; else return false; })); if (developer == null)//未发现就创建。 { developer = new DeveloperModel(developerName, theAssembly); DeveloperModelList.Add(developer); } } return developer; }
private void LoadDeveloperInfo(AssemblyModel assemblyModel) { this.dgvDeveloper.Rows.Clear(); int newRowIndex = 0; assemblyModel.Developers.Sort(new Comparison<DeveloperModel>((d1, d2) => { return d1.Name.CompareTo(d2.Name); })); foreach (DeveloperModel developerModel in assemblyModel.Developers) { double methodPercentage = MyConverter.ConvertToPercentage((double)developerModel.MethodNum, (double)assemblyModel.MethodNum); double ILCodePercentage = MyConverter.ConvertToPercentage((double)developerModel.ILCodeNum, (double)assemblyModel.ILCodeNum); double bugPercentage = MyConverter.ConvertToPercentage((double)developerModel.BugNum, (double)assemblyModel.Developers.Sum(d => d.BugNum)); double noBugPercentage = MyConverter.ConvertToPercentage((double)(developerModel.MethodNum - developerModel.BugNum - developerModel.NotYetCheckBugNum), (double)assemblyModel.Developers.Sum(d => (d.MethodNum - d.BugNum - d.NotYetCheckBugNum))); double notYetCheckBugPercentage = MyConverter.ConvertToPercentage((double)developerModel.NotYetCheckBugNum, (double)assemblyModel.Developers.Sum(d => d.NotYetCheckBugNum)); newRowIndex = this.dgvDeveloper.Rows.Add(); this.dgvDeveloper.Rows[newRowIndex].Cells["ColDeveloperName"].Value = developerModel.Name; this.dgvDeveloper.Rows[newRowIndex].Cells["ColMethodNum"].Value = string.Format("{0}({1}%)", developerModel.MethodNum, methodPercentage); this.dgvDeveloper.Rows[newRowIndex].Cells["ColCodeNum"].Value = string.Format("{0}({1}%)", developerModel.ILCodeNum, ILCodePercentage); this.dgvDeveloper.Rows[newRowIndex].Cells["ColReviewNum"].Value = developerModel.ReviewNum; this.dgvDeveloper.Rows[newRowIndex].Cells["ColBeReviewNum"].Value = developerModel.BeReviewNum; this.dgvDeveloper.Rows[newRowIndex].Cells["ColBugNum"].Value = string.Format("{0}({1}%)", developerModel.BugNum, bugPercentage); this.dgvDeveloper.Rows[newRowIndex].Cells["ColNoBugNum"].Value = string.Format("{0}({1}%)", developerModel.MethodNum - developerModel.BugNum - developerModel.NotYetCheckBugNum, noBugPercentage); this.dgvDeveloper.Rows[newRowIndex].Cells["ColNotCheckedBug"].Value = string.Format("{0}({1}%)", developerModel.NotYetCheckBugNum, notYetCheckBugPercentage); this.dgvDeveloper.Rows[newRowIndex].Tag = developerModel; } //合计 newRowIndex = this.dgvDeveloper.Rows.Add(); this.dgvDeveloper.Rows[newRowIndex].Cells["ColDeveloperName"].Value = "合计"; this.dgvDeveloper.Rows[newRowIndex].Cells["ColMethodNum"].Value = assemblyModel.MethodNum; this.dgvDeveloper.Rows[newRowIndex].Cells["ColCodeNum"].Value = assemblyModel.ILCodeNum; this.dgvDeveloper.Rows[newRowIndex].Cells["ColBugNum"].Value = assemblyModel.Developers.Sum(d => d.BugNum); this.dgvDeveloper.Rows[newRowIndex].Cells["ColNoBugNum"].Value = assemblyModel.Developers.Sum(d => d.MethodNum - d.BugNum - d.NotYetCheckBugNum); this.dgvDeveloper.Rows[newRowIndex].Cells["ColNotCheckedBug"].Value = assemblyModel.Developers.Sum(d => d.NotYetCheckBugNum); }
private void ShowAssemblyInfo(AssemblyModel assemblyModel) { if (assemblyModel != null) { StringBuilder sbShowText = new StringBuilder(); sbShowText.AppendLine(string.Format("文件名称:[{0}]", assemblyModel.FileName)); sbShowText.AppendLine(string.Format("文件大小:[{0}]", DataConverter.MyConverter.ConvertToFileLength(assemblyModel.AssemblyFileLength))); sbShowText.AppendLine(string.Format("程序集名称:[{0}]", assemblyModel.Name)); sbShowText.AppendLine(string.Format("程序集Guid:[{0}]", string.IsNullOrEmpty(assemblyModel.Guid) ? "该程序集没有标注 Guid" : assemblyModel.Guid)); sbShowText.AppendLine(string.Format("程序集版本:[{0}]", assemblyModel.Version)); sbShowText.AppendLine(string.Format("程序集方法数目:[{0} 个]", assemblyModel.MethodNum)); sbShowText.AppendLine(string.Format("程序集MSIL代码行数:[{0} 行]", assemblyModel.ILCodeNum)); sbShowText.AppendLine(string.Format("程序集开发人数:[{0} 名]", assemblyModel.Developers.Count)); StringBuilder sbDevelopers = new StringBuilder(); string maxLengthName = assemblyModel.Developers.Max(d => d.Name); int maxNameLength = Encoding.Default.GetByteCount(maxLengthName); for (int i = 0; i < assemblyModel.Developers.Count; i++) { double methodPercentage = MyConverter.ConvertToPercentage((double)assemblyModel.Developers[i].MethodNum, (double)assemblyModel.MethodNum); double ILCodePercentage = MyConverter.ConvertToPercentage((double)assemblyModel.Developers[i].ILCodeNum, (double)assemblyModel.ILCodeNum); int nameLength = Encoding.Default.GetByteCount(assemblyModel.Developers[i].Name); string formatEmpty = new string(' ', (maxNameLength - nameLength)); string developerName = string.Format("{0}{1}", assemblyModel.Developers[i].Name, formatEmpty); sbDevelopers.AppendLine(string.Format("{0}.{1}=>方法数目:{2} 个({3}%),MSIL代码行数:{4} 行({5}%)", i + 1, developerName, assemblyModel.Developers[i].MethodNum, methodPercentage, assemblyModel.Developers[i].ILCodeNum, ILCodePercentage)); } sbShowText.AppendLine(string.Format("程序集开发者清单:{0}{1}", Environment.NewLine, sbDevelopers.ToString())); this.txtAssembly.Text = sbShowText.ToString().Trim(new char[] { '\r', '\n' }); } else this.txtAssembly.Text = string.Empty; }
private void PrintSelected(AssemblyModel assemblyModel) { FormReport formReport = new FormReport(assemblyModel); formReport.Show(); }
public DeveloperModel(string developerName, AssemblyModel theAssembly) { this.Name = developerName; this.TheAssembly = theAssembly; this.MethodModels = new List<MethodModel>(); }
public void AsyncAnalyze(ProgressObject progressObject) { Thread searchThread = new Thread(() => { IAssemblyService assemblyService = new AssemblyService(); IDeveloperService developerService = new DeveloperService(); IMethodService methodService = new MethodService(developerService); Exception runException = null; AssemblyModel assemblyModel = null; try { Globals.LoadOpCodes(); string filePath = progressObject.CurrAssemblyFilePath; Assembly assembly = Assembly.LoadFile(filePath); string assemblyFileNama = Path.GetFileName(filePath); string assemblyName = assembly.ManifestModule.ScopeName; string assemblyVersion = assembly.GetName().Version.ToString(); object[] guids = assembly.GetCustomAttributes(typeof(GuidAttribute), false); string guidString = string.Empty; if (guids.Length > 0) guidString = ((GuidAttribute)(guids[0])).Value; FileInfo fileInfo = new FileInfo(filePath); long filelength = fileInfo.Length; assemblyModel = new AssemblyModel(assemblyName, progressObject.CurrAssemblyFileName, assemblyVersion, guidString, filelength); Type[] foundTypes = assembly.GetTypes(); decimal totalLength = foundTypes.Length; decimal currProgress = 0; int currProgressPercentage = 0; foreach (Type t in foundTypes) { if (isCancel) break; if (ProgressChanged != null) { int percentage = (int)(Math.Round((++currProgress / totalLength), 2) * 100); progressObject.CurrTypeName = t.Name; if (currProgressPercentage != percentage) { currProgressPercentage = percentage; ReportProgress(percentage, progressObject); } } object[] typeAttrs = t.GetCustomAttributes(false); CreaterAttribute classCreaterAttribute = null; ReviewerAttribute[] classReviewerAttributes = null; if (typeAttrs.Where(c => c is CreaterAttribute).Count() > 0) classCreaterAttribute = typeAttrs.Where(c => c is CreaterAttribute).Cast<CreaterAttribute>().First(); if (typeAttrs.Where(r => r is ReviewerAttribute).Count() > 0) classReviewerAttributes = typeAttrs.Where(r => r is ReviewerAttribute).Cast<ReviewerAttribute>().ToArray(); //只处理该模块下的方法,摒弃系统方法 MethodInfo[] methodInfos = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); Attribute createrAttr = null; object[] objectAttrs = null; ReviewerAttribute[] reviewerAttrs = null; Attribute bugAttr = null; MethodModel methodModel = null; MethodBodyReader methodBody = null; string methodName = string.Empty; foreach (MethodInfo method in methodInfos) { methodName = string.Format("{0}.{1}", t.Name, method.Name); createrAttr = Attribute.GetCustomAttribute(method, typeof(CreaterAttribute)); objectAttrs = method.GetCustomAttributes(typeof(ReviewerAttribute), false); bugAttr = Attribute.GetCustomAttribute(method, typeof(BugAttribute)); bool? isBug = null;//null表示该方法没有测试过 CreaterAttribute createPerson = null; int methodCodeNum = 0; string methodCodeString = string.Empty; ReviewerAttribute[] reviews = null; if (createrAttr is CreaterAttribute) createPerson = (CreaterAttribute)createrAttr; else if (classCreaterAttribute is CreaterAttribute) createPerson = (CreaterAttribute)classCreaterAttribute; else createPerson = new CreaterAttribute("未标注的开发者", "未标注时间"); if (objectAttrs.Where(r => r is ReviewerAttribute).Count() > 0) reviewerAttrs = objectAttrs.Where(r => r is ReviewerAttribute).Cast<ReviewerAttribute>().ToArray(); if (classReviewerAttributes != null && reviewerAttrs != null) reviews = classReviewerAttributes.Concat(reviewerAttrs).ToArray(); else if (classReviewerAttributes != null && reviewerAttrs == null) reviews = classReviewerAttributes; else if (classReviewerAttributes == null && reviewerAttrs != null) reviews = reviewerAttrs; if (bugAttr is BugAttribute) { BugAttribute Attr = (BugAttribute)bugAttr; isBug = Attr.IsBug; } methodBody = new MethodBodyReader(method); methodCodeNum = methodBody.GetCodeNum(); methodCodeString = methodBody.GetBodyCode(); methodModel = new MethodModel(methodName, assemblyModel, createPerson, methodCodeNum, reviews, isBug, methodCodeString); methodService.FindNewMethod(methodModel); } } //该程序集解析完毕,开始汇总 if (!isCancel) { List<DeveloperModel> developerModels = developerService.GetAllDeveloper(assemblyModel); assemblyService.SetMethodNum(assemblyModel, developerModels.Sum(d => d.MethodNum)); assemblyService.SetILCodeNum(assemblyModel, developerModels.Sum(d => d.ILCodeNum)); assemblyService.SetDevelopers(assemblyModel, developerModels); } } catch (Exception err) { runException = err; } finally { assemblyService = null; methodService = null; developerService = null; } AsyncAnalyzeCompleted(assemblyModel, runException); }); searchThread.IsBackground = true; searchThread.Start(); }
private void AsyncAnalyzeCompleted(AssemblyModel assemblyModel, Exception runException) { if (AnalyzeCompleted != null) { AsyncAnalyzeCompletedEventArgs completedEventArgs = new AsyncAnalyzeCompletedEventArgs(assemblyModel, runException, isCancel); AnalyzeCompleted(this, completedEventArgs); } }
public void SetDevelopers(AssemblyModel assemblyModel, List<DeveloperModel> developers) { assemblyModel.Developers = developers; }
public void SetMethodNum(AssemblyModel assemblyModel, int totalMethodNum) { assemblyModel.MethodNum = totalMethodNum; }
public void SetILCodeNum(AssemblyModel assemblyModel, int totalILCodeNum) { assemblyModel.ILCodeNum = totalILCodeNum; }