//替换一个类... static async Task replaceTypeMemberID(CRenameTokenHandler handle, string FilePath, TypeDeclaration_t tdt, bool useInclude) { for (int k = 0; k < tdt.Members.Count; ++k) { MemberDeclaration_t md = tdt.Members[k]; //替换并保存 if (md.pType != null) { await replaceTypeMemberID(handle, FilePath, md.pType, useInclude); return; } await handle.beginReplace(tdt, md, FilePath); await SolutionAsync(handle, useInclude); //if (limit++ > 1) // return; } { await handle.beginReplace(tdt, null, FilePath); await SolutionAsync(handle, useInclude); //if (limit++ > 1) // return; } }
//替换SolutionTypeMember public static async Task replaceAllSolutionTypeMemberID(CRenameTokenHandler rhandle, bool useInclude) { int limit = 0; CCLog.Info(string.Format("=== replaceAllSolutionTypeMemberID Count: {0} ", rhandle.m_solu.doctypelist.Count)); int StartSign = 0; string StartDoc = "ACTAnimConfig.cs"; string StartType = "ACTAnimConfig"; int types = 0; rhandle.pass_cmd = 1; for (int i = 0; i < rhandle.m_solu.doctypelist.Count; ++i) { DocTypeList_t dtt = rhandle.m_solu.doctypelist[i]; if (StartSign == 1 && StartDoc != dtt.Name) { continue; } for (int j = 0; j < dtt.typelist.Count; ++j) { TypeDeclaration_t tdt = dtt.typelist[j]; //判断开始类型.. if (StartSign == 1 && StartType != tdt.Identifier) { continue; } StartSign = 0; //CCLog.Debug(string.Format("=== replaceAllSolutionTypeMemberID Type: {0}/{1} ;Doc {2}/{3};{4}/{5}", j, dtt.typelist.Count,i, rhandle.m_solu.doctypelist.Count, tdt.Identifier, dtt.Name)); await replaceTypeMemberID(rhandle, dtt.FilePath, tdt, useInclude); types++; } //if((i%100) == 99) // rhandle.SaveNewSolution(); if ((i % 20) == 19) { rhandle.CheckCompileAndCommit(); } } rhandle.CheckCompileAndCommit(); CCLog.Info(string.Format("=== replaceAllSolutionTypeMemberID types: {0} ;compile_fails: {1}", types, rhandle.compile_fails)); }
public static async Task DumpAllTypesAsync(string sln, bool useInclude) { ISolutionHandler handle = new ISolutionHandler(sln); await handle.InitSolution(sln); await SolutionAsync(handle, useInclude); // string path = Path.GetDirectoryName(sln); Directory.SetCurrentDirectory(path); CRenameTokenHandler rhandle = new CRenameTokenHandler(); rhandle.m_workspace = handle.m_workspace; rhandle.newSolution = handle.m_solution; rhandle.m_solu = handle.m_solu; rhandle.m_sln = handle.m_sln; await replaceAllSolutionTypeMemberID(rhandle, useInclude); rhandle.SaveNewSolution(); }