//从匹配的Type中找到 BaseMemberDeclaration_t FindMemberSyntaxNode(TypeDeclaration_t td) { if (ref_md != null) { for (int j = 0; j < td.Members.Count; ++j) { MemberDeclaration_t md = td.Members[j]; //如果是儿子?? if (md.Identifier == ref_md.Identifier && md.Field == ref_md.Field && !md.Identifier.StartsWith(PREFIX)) { newName = PREFIX + md.Identifier; // new string(md.Identifier.ToCharArray().Reverse().ToArray()); ref_md.NewName = newName; //保存新名字: m_ReplaceHis.AppendFormat("{0}==>{1};", md.Identifier, newName); return(md); } } return(null); } if (!td.Identifier.StartsWith(PREFIX)) { newName = PREFIX + td.Identifier; // new string(td.Identifier.ToCharArray().Reverse().ToArray()); ref_tdt.NewName = newName; //保存新名字: m_ReplaceHis.AppendFormat("{0}==>{1};", td.Identifier, newName); return(td); } return(null); }
/// <param name="td"></param> /// <param name="ref_ls"></param> /// <param name="index"></param> /// <returns></returns> TypeDeclaration_t FindTypeDeclaration(TypeDeclaration_t td, List <TypeDeclaration_t> ref_ls, int index) { if (td == null) { return(null); } bool bLast = ref_ls.Count == index + 1; if (td.Identifier == ref_ls[index].Identifier) { if (bLast) { return(td); } for (int i = 0; i < td.Members.Count; ++i) { MemberDeclaration_t md = td.Members[i]; if (md.pType != null) { TypeDeclaration_t sub = FindTypeDeclaration(md.pType, ref_ls, index + 1); if (sub != null) { return(sub); } } } } return(null); }
//替换一个类... 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; } }
// void SaveTypeDeclaration(StringBuilder sb, TypeDeclaration_t tdt, string prefix) { sb.AppendLine(prefix + tdt.Identifier + ";"); for (int k = 0; k < tdt.Members.Count; ++k) { MemberDeclaration_t md = tdt.Members[k]; sb.AppendLine(prefix + "\t" + md.Field + ";" + md.Identifier); if (md.pType != null) { SaveTypeDeclaration(sb, md.pType, prefix + "\t"); } } }
public async Task beginReplace(TypeDeclaration_t tdt, MemberDeclaration_t md, string FilePath) { this.ref_tdt = tdt; this.ref_md = md; this.docName = FilePath; if (newSolution != null)// { m_solution = newSolution; newSolution = null; } if (m_solution == null) { m_solution = await m_workspace.OpenSolutionAsync(this.m_sln); //if(m_solution!= m_workspace.CurrentSolution) //{ // CCLog.Error("m_solution!= m_workspace.CurrentSolution"); //} if (m_solution == null) { CCLog.Error("!!!!!!!!!!!!!!!OpenSolutionAsync fail." + this.m_sln); } } }
static void HandleMemberDeclarationSyntax(MemberDeclarationSyntax member, TypeDeclaration_t tdt) { //MemberDeclarationSyntax // if (member is FieldDeclarationSyntax) { FieldDeclarationSyntax ed = member as FieldDeclarationSyntax; VariableDeclarationSyntax decl = ed.Declaration; if (decl.Variables.Count > 0) { VariableDeclaratorSyntax v = decl.Variables[0]; tdt.Members.Add(new MemberDeclaration_t("Field", v.Identifier.Text, ed)); } } else if (member is EnumMemberDeclarationSyntax) { EnumMemberDeclarationSyntax ed = member as EnumMemberDeclarationSyntax; tdt.Members.Add(new MemberDeclaration_t("EnumMember", ed.Identifier.Text, ed)); } else if (member is MethodDeclarationSyntax) { MethodDeclarationSyntax ed = member as MethodDeclarationSyntax; tdt.Members.Add(new MemberDeclaration_t("Method", ed.Identifier.Text, ed)); } else if (member is PropertyDeclarationSyntax) { PropertyDeclarationSyntax ed = member as PropertyDeclarationSyntax; tdt.Members.Add(new MemberDeclaration_t("Property", ed.Identifier.Text, ed)); } else if (member is EventFieldDeclarationSyntax) { EventFieldDeclarationSyntax ed = member as EventFieldDeclarationSyntax; VariableDeclarationSyntax decl = ed.Declaration; if (decl.Variables.Count > 0) { VariableDeclaratorSyntax v = decl.Variables[0]; tdt.Members.Add(new MemberDeclaration_t("EventField", v.Identifier.Text, ed)); } } else if (member is DelegateDeclarationSyntax) { DelegateDeclarationSyntax ed = member as DelegateDeclarationSyntax; tdt.Members.Add(new MemberDeclaration_t("Delegate", ed.Identifier.Text, ed)); } else if (member is InterfaceDeclarationSyntax) { InterfaceDeclarationSyntax ed = member as InterfaceDeclarationSyntax; //tdt.Members.Add(new MemberDeclaration_t("Interface", ed.Identifier.Text, ed)); MemberDeclaration_t t = new MemberDeclaration_t("Interface", ed.Identifier.Text, ed); tdt.Members.Add(t); //处理子节点... t.pType = new TypeDeclaration_t(tdt, member as BaseTypeDeclarationSyntax); } else if (member is EnumDeclarationSyntax) { EnumDeclarationSyntax ed = member as EnumDeclarationSyntax; MemberDeclaration_t t = new MemberDeclaration_t("Enum", ed.Identifier.Text, ed); tdt.Members.Add(t); //处理子节点... t.pType = new TypeDeclaration_t(tdt, member as BaseTypeDeclarationSyntax); } else if (member is ClassDeclarationSyntax) { ClassDeclarationSyntax ed = member as ClassDeclarationSyntax; MemberDeclaration_t t = new MemberDeclaration_t("Class", ed.Identifier.Text, ed); tdt.Members.Add(t); //处理子节点... t.pType = new TypeDeclaration_t(tdt, member as TypeDeclarationSyntax); } else if (member is StructDeclarationSyntax) { StructDeclarationSyntax ed = member as StructDeclarationSyntax; MemberDeclaration_t t = new MemberDeclaration_t("Struct", ed.Identifier.Text, ed); tdt.Members.Add(t); //处理子节点... t.pType = new TypeDeclaration_t(tdt, member as TypeDeclarationSyntax); } else if (member is ConstructorDeclarationSyntax) { member = member; } else if (member is DestructorDeclarationSyntax) { //忽略... member = member; } else if (member is OperatorDeclarationSyntax) { //忽略... } else if (member is IndexerDeclarationSyntax) { //忽略... member = member; } else if (member is ConversionOperatorDeclarationSyntax) { //忽略... member = member; } else { member = member; //sb.AppendLine("\t\tUnknow;" + member); } // sb.AppendLine("\t\t" + member + ";"); }