public RootItem CreateViewForDiff(MetaDataDescriptor mdata,string srcRootPath) { if (mdata == null) throw new ArgumentNullException("null input: mdata"); m_mdata = mdata; m_view = new RootItem(); m_packageMap = new Dictionary<string, PackageItem>(); m_srcFileMap = new Dictionary<string, SrcFileItem>(); m_classMap = new Dictionary<string, ClassItem>(); PackageItem packageItem = null; foreach (string key in mdata.ClassMap.Keys) { ClassDescriptor cls = mdata.ClassMap[key]; string packageVMName = cls.PackageVMName; if (!m_packageMap.ContainsKey(packageVMName)) { string packageName = packageVMName.Length == 0 ? "default package" : VMNameConvert.VMNameToJavaName(packageVMName); packageItem = new PackageItem(m_view, packageName, packageVMName); m_packageMap.Add(packageVMName, packageItem); m_view.AddChild(packageItem); } else packageItem = m_packageMap[packageVMName]; SrcFileItem srcfileItem = null; string srcFileName = cls.SrcFileName; if (srcFileName == null) throw new ArgumentNullException("src file name = null"); string fullSrcFileName = VMNameConvert.CombineVMName(packageVMName, srcFileName); if (!m_srcFileMap.ContainsKey(fullSrcFileName)) { srcfileItem = new SrcFileItem(packageItem, srcFileName, fullSrcFileName); m_srcFileMap.Add(fullSrcFileName, srcfileItem); packageItem.AddChild(srcfileItem); } else srcfileItem = m_srcFileMap[fullSrcFileName]; ClassItem classItem = new ClassItem(srcfileItem, cls); MethodDescriptor[] methods = cls.Methods; for (int m = 0; m < methods.Length; ++m) { MethodDescriptor method = methods[m]; if ((method.Status & DataConstants.METHOD_NO_BLOCK_DATA) != 0) continue; MethodItem methodItem = new MethodItem(classItem, m, method.Name, method.Descriptor, method.FirstLine); classItem.AddChild(methodItem); for (int b = 0; b < method.BlockMap.Length; b++) { int blockSize = method.BlockSizes == null ? -1 : method.BlockSizes[b]; BlockItem blockItem = new BlockItem(methodItem, b, method.BlockMap[b], blockSize); methodItem.AddChild(blockItem); } } srcfileItem.AddChild(classItem); m_classMap.Add(classItem.Name, classItem); } ComputeHashCode(srcRootPath); return m_view; }
public RootItem CreateViewForCaseCoverage(MetaDataDescriptor mdata, CaseCoverageDescriptor ccdata, string srcRootPath) { if (mdata == null) throw new ArgumentNullException("null input: mdata"); if (ccdata == null) throw new ArgumentNullException("null input: ccdata"); m_mdata = mdata; bool srcView = !string.IsNullOrEmpty(srcRootPath); if (srcView && !mdata.HasSrcFileData) throw new ArgumentException("source file data view requested for metadata with incomplete SourceFile debug info"); m_view = new RootItem(); m_packageMap = new Dictionary<string, PackageItem>(); m_srcFileMap = new Dictionary<string, SrcFileItem>(); m_classMap = new Dictionary<string, ClassItem>(); PackageItem packageItem = null; foreach (string key in mdata.ClassMap.Keys) { ClassDescriptor cls = mdata.ClassMap[key]; string packageVMName = cls.PackageVMName; if (!m_packageMap.ContainsKey(packageVMName)) { string packageName = packageVMName.Length == 0 ? "default package" : VMNameConvert.VMNameToJavaName(packageVMName); packageItem = new PackageItem(m_view, packageName, packageVMName); m_packageMap.Add(packageVMName, packageItem); m_view.AddChild(packageItem); } else packageItem = m_packageMap[packageVMName]; SrcFileItem srcfileItem = null; if (srcView) { string srcFileName = cls.SrcFileName; if (srcFileName == null) throw new ArgumentNullException("src file name = null"); string fullSrcFileName = VMNameConvert.CombineVMName(packageVMName, srcFileName); if (!m_srcFileMap.ContainsKey(fullSrcFileName)) { srcfileItem = new SrcFileItem(packageItem, srcFileName, fullSrcFileName); m_srcFileMap.Add(fullSrcFileName, srcfileItem); packageItem.AddChild(srcfileItem); } else srcfileItem = m_srcFileMap[fullSrcFileName]; } CaseCoverageDataHolder data = ccdata.GetCoverage(cls); if (data != null) { if (data.Stamp != cls.Stamp) throw new Exception("class stamp mismatch:" + VMNameConvert.VMNameToJavaName(cls.ClassVMName)); } HashSet<string>[][] coverage = (data != null ? data.CaseCoverage : null); ClassItem classItem = srcView ? new ClassItem(srcfileItem, cls, coverage) : new ClassItem(packageItem, cls, coverage); MethodDescriptor[] methods = cls.Methods; for (int m = 0; m < methods.Length; ++m) { MethodDescriptor method = methods[m]; if ((method.Status & DataConstants.METHOD_NO_BLOCK_DATA) != 0) continue; MethodItem methodItem = new MethodItem(classItem, m, method.Name, method.Descriptor, method.FirstLine); classItem.AddChild(methodItem); for (int b = 0; b < method.BlockMap.Length; b++) { BlockItem blockItem = new BlockItem(methodItem, b, method.BlockMap[b], method.BlockSizes[b]); methodItem.AddChild(blockItem); } } if (srcView) { srcfileItem.AddChild(classItem); m_classMap.Add(classItem.Name, classItem); } else packageItem.AddChild(classItem); } ComputeHashCode(srcRootPath); return m_view; }