Exemple #1
0
 public Analyzer(FileInfo aSettingFile
                 , CodeFileCallBack aOnAnalyzerStartFunc
                 , CodeFileCallBack aOnCalcIncludeCountStartFunc
                 )
 {
     // 初期化
     settingFile                 = aSettingFile;
     onAnalyzerStartFunc         = aOnAnalyzerStartFunc;
     onCalcIncludeCountStartFunc = aOnCalcIncludeCountStartFunc;
     // 設定の読み込み
     try
     {
         loadSetting(aSettingFile);
     }
     catch (Exception aExp)
     {
         throw aExp;
     }
     // 強制インクルードファイル
     foreach (FileInfo fileInfo in forceIncludeFiles)
     {
         addCodeFileIfNeccesary(fileInfo);
     }
     // ソースファイルの追加
     foreach (DirectoryInfo dirInfo in targetDirs)
     {
         addCodeFiles(dirInfo);
     }
     // 除外フラグの設定
     foreach (FileInfo fileInfo in ignoreCodeFiles)
     {
         if (!codeFiles.IsExistCodeFile(fileInfo))
         {// 存在しない
             continue;
         }
         setIgnoreFragRecursive(codeFiles.GetCodeFile(fileInfo));
     }
     // インクルードカウントの計算
     foreach (CodeFile sourceFile in codeFiles.GetCodeFiles())
     {
         onCalcIncludeCountStartFunc(sourceFile.fileInfo);
         CodeFileTable guardTable = new CodeFileTable();
         sourceFile.includeCount = calculateTotalIncludeCount(sourceFile, guardTable);
         // 強制インクルードファイル
         foreach (FileInfo fileInfo in forceIncludeFiles)
         {
             sourceFile.includeCount += calculateTotalIncludeCountRev(codeFiles.GetCodeFile(fileInfo), guardTable);
         }
         if (sourceFile.IsSource())
         {// 補正
             --sourceFile.includeCount;
         }
     }
 }
Exemple #2
0
        // calculateTotalIncludeCountとは逆の方向で計算。
        private uint calculateTotalIncludeCountRev(CodeFile aCodeFile, CodeFileTable aGuardTable)
        {
            if (aGuardTable.IsExistCodeFile(aCodeFile.fileInfo))
            {// 既に計算済み
                return(0);
            }
            aGuardTable.AddCodeFileRef(aCodeFile);

            uint cnt = 0;

            if (aCodeFile.IsSource())
            {// ソースファイルを数に含める
                ++cnt;
            }

            foreach (CodeFile subCodeFile in aCodeFile.includeCodeFiles.GetCodeFiles())
            {
                cnt += calculateTotalIncludeCountRev(subCodeFile, aGuardTable);
            }
            return(cnt);
        }