Пример #1
0
        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);
        }