private void OnEnable()
 {
     result = target as EZScriptStatisticResult;
 }
        public void RefreshResult()
        {
            PathNormalize(statistics.includePaths);
            PathNormalize(statistics.excludePaths);
            EditorUtility.DisplayProgressBar("EZScriptStatistics", "Analysing", 0);
            List <string> scriptFilePaths = new List <string>();

            for (int i = 0; i < statistics.includePaths.Length; i++)
            {
                string includePath = statistics.includePaths[i];
                if (string.IsNullOrEmpty(includePath))
                {
                    continue;
                }
                for (int j = 0; j < statistics.filePatterns.Length; j++)
                {
                    string pattern = statistics.filePatterns[j];
                    if (string.IsNullOrEmpty(pattern))
                    {
                        continue;
                    }
                    try
                    {
                        scriptFilePaths.AddRange(Directory.GetFiles(includePath, pattern, SearchOption.AllDirectories));
                    }
                    catch { }
                }
            }
            PathNormalize(scriptFilePaths);
            List <ScriptInfo> scriptInfoList = new List <ScriptInfo>();

            for (int i = 0; i < scriptFilePaths.Count; i++)
            {
                var scriptInfo = GetScriptInfo(scriptFilePaths[i]);
                if (scriptInfo != null)
                {
                    scriptInfoList.Add(scriptInfo);
                }
            }
            if (scriptInfoList.Count == 0)
            {
                Debug.Log("No script file found");
                return;
            }

            EZScriptStatisticResult result = CreateInstance <EZScriptStatisticResult>();

            result.time = DateTime.Now.ToString("yyyyMMdd-HHmmss");
            result.name = "Result-" + result.time;
            int totalValidLineCount = 0;

            foreach (var contribution in scriptInfoList.GroupBy(info => info.author))
            {
                Contributor contributor = new Contributor(contribution.Key);
                foreach (ScriptInfo info in contribution.Cast <ScriptInfo>())
                {
                    contributor.scriptList.Add(info);
                    contributor.lineCount      += info.lineCount;
                    contributor.validLineCount += info.validLineCount;
                    totalValidLineCount        += info.validLineCount;
                }
                result.contributors.Add(contributor);
            }
            foreach (Contributor contributor in result.contributors)
            {
                contributor.proportion = (float)contributor.validLineCount / totalValidLineCount;
            }
            string assetPath = AssetDatabase.GetAssetPath(target);

            AssetDatabase.AddObjectToAsset(result, target);
            EditorUtility.ClearProgressBar();
            AssetDatabase.SaveAssets();
            Selection.activeObject = result;
        }