private void BeginScanProject() { Control cntrlParent = Parent; while (cntrlParent.Parent != null) { cntrlParent = cntrlParent.Parent; } //MethodInfo miAPSC = cntrlParent.GetType().UnderlyingSystemType.GetMethod("AnalyzeProjectSourceCode"); //object oResultAPSC = miAPSC.Invoke(cntrlParent, null); //string sAnalyzeProjectSourceCode = (string)oResultAPSC; PropertyInfo piAAPF = cntrlParent.GetType().UnderlyingSystemType.GetProperty("ActiveAndroidProjectFolder"); object oResultAAPF = piAAPF.GetValue(cntrlParent, null); string sActiveAndroidProjectFolder = (string)oResultAAPF; // Map all resource references found in XML files List <CodeAnalyzer.CodeResourceRef> listCR = ScanXMLFiles(sActiveAndroidProjectFolder); // Map all files in "Res" folder ResourceObject[] ros = ResourceObject.MapResources(sActiveAndroidProjectFolder + "\\res"); List <string> listCategories = new List <string>(); CodeAnalyzer.ResourceRef[] rrs = null; string[] sRFile = Directory.GetFiles(sActiveAndroidProjectFolder, "*.java", SearchOption.AllDirectories); foreach (var sFile in sRFile) { if (System.IO.Path.GetFileName(sFile).Equals("R.java", StringComparison.CurrentCultureIgnoreCase)) { rrs = CodeAnalyzer.AnalyzeRFile(sFile); var uniquecatgroups = from r in rrs group r by r.Category; foreach (var u in uniquecatgroups) { listCategories.Add(u.Key); } } } List <CodeAnalyzer.CodeResourceRef> listTotalCRR = new List <CodeAnalyzer.CodeResourceRef>(); foreach (var sFile in sRFile) { if (!System.IO.Path.GetFileName(sFile).Equals("R.java", StringComparison.CurrentCultureIgnoreCase)) { var codeResourceRefs = CodeAnalyzer.AnalyzeCodeFile(listCategories.ToArray(), sFile); listTotalCRR.AddRange(codeResourceRefs); } } var unusedRR = CodeAnalyzer.UnusedResources(rrs, listTotalCRR.ToArray()); DataSet ds = new DataSet(); DataTable dtAllRes = new DataTable("All resources"); DataColumn dcARCategory = new DataColumn("Category", typeof(string)); DataColumn dcARName = new DataColumn("Name", typeof(string)); DataColumn dcARStatus = new DataColumn("Status", typeof(string)); DataColumn dcARRefId = new DataColumn("RefId", typeof(string)); DataColumn dcARType = new DataColumn("Type", typeof(string)); DataColumn dcARSize = new DataColumn("Size", typeof(string)); DataColumn dcARResPath = new DataColumn("Path", typeof(string)); dtAllRes.Columns.Add(dcARCategory); dtAllRes.Columns.Add(dcARName); dtAllRes.Columns.Add(dcARStatus); dtAllRes.Columns.Add(dcARRefId); dtAllRes.Columns.Add(dcARType); dtAllRes.Columns.Add(dcARSize); dtAllRes.Columns.Add(dcARResPath); ds.Tables.Add(dtAllRes); foreach (var r in rrs) { ResourceObject[] roFounds = FindResourceObjectByName(ros, r.RefName); if (roFounds != null) { foreach (var roFound in roFounds) { DataRow dr = dtAllRes.NewRow(); dr["Category"] = r.Category; dr["Name"] = r.RefName; if (FindNameInResourceRef(unusedRR, r.RefName)) { dr["Status"] = "Unused"; } else { dr["Status"] = "Used"; } dr["RefId"] = r.RefId; dr["Type"] = roFound.ToString(); dr["Size"] = string.Format("{0} bytes", roFound.resourceObjectSize.ToString("00000000")); dr["Path"] = roFound.resourceObjectPath; dtAllRes.Rows.Add(dr); } } else { DataRow dr = dtAllRes.NewRow(); dr["Category"] = r.Category; dr["Name"] = r.RefName; if (FindNameInResourceRef(unusedRR, r.RefName)) { dr["Status"] = "Unused"; } else { dr["Status"] = "Used"; } dr["RefId"] = r.RefId; dtAllRes.Rows.Add(dr); } } dgvAllResources.DataSource = null; dgvAllResources.DataSource = ds.Tables["All resources"]; ////DataGridViewComboBoxColumn dcAction = new DataGridViewComboBoxColumn(); ////dgvUsedResources.Columns.Add(dcAction); }
private bool FindNameInResourceRef(CodeAnalyzer.ResourceRef[] rr, string Name) { var lr = from l in rr where l.RefName.Equals(Name,StringComparison.CurrentCultureIgnoreCase) select l; if (lr.Count() > 0) { return true; } else return false; }