Ejemplo n.º 1
0
 //从匹配的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);
 }
Ejemplo n.º 2
0
        //把TypeName保存一下: 格式..文档名{文件名...;文件名2....}
        public void SaveTypeList(string fn)
        {
            FileStream fp = new FileStream(fn, FileMode.Create);

            if (fp != null)
            {
                StringBuilder sb = new StringBuilder();
                StreamWriter  sw = new StreamWriter(fp);
                //逐个处理...
                for (int i = 0; i < doctypelist.Count; ++i)
                {
                    DocTypeList_t doctype = doctypelist[i];
                    sb.Clear();

                    sb.AppendLine(doctype.Name + ";" + doctype.FilePath);
                    for (int j = 0; j < doctype.typelist.Count; ++j)
                    {
                        TypeDeclaration_t tdt = doctype.typelist[j];
                        SaveTypeDeclaration(sb, tdt, "\t");
                    }
                    sw.WriteLine(sb.ToString());
                }

                sw.Close();
                fp.Close();
            }
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 static void HandleTypeMember(TypeDeclarationSyntax td, TypeDeclaration_t tdt)
 {
     for (int k = 0; k < td.Members.Count; ++k)
     {
         MemberDeclarationSyntax member = td.Members[k];
         HandleMemberDeclarationSyntax(member, tdt);
     }
 }
Ejemplo n.º 5
0
 static void HandleEnumMember(EnumDeclarationSyntax td, TypeDeclaration_t tdt)
 {
     for (int k = 0; k < td.Members.Count; ++k)
     {
         MemberDeclarationSyntax member = td.Members[k];
         HandleMemberDeclarationSyntax(member, tdt);
     }
     //           Console.WriteLine(td);
 }
Ejemplo n.º 6
0
 //
 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");
         }
     }
 }
Ejemplo n.º 7
0
        //查找对应的节点
        BaseMemberDeclaration_t FindSyntaxNode()
        {
            List <TypeDeclaration_t> ref_ls = new List <TypeDeclaration_t>();

            ref_tdt.declList(ref_ls);
            for (int i = 0; i < m_dtl.typelist.Count; ++i)
            {
                TypeDeclaration_t td = m_dtl.typelist[i];

                TypeDeclaration_t dst = FindTypeDeclaration(td, ref_ls, 0); //类型也要符合...
                if (dst != null)
                {
                    return(FindMemberSyntaxNode(dst));
                }
            }
            return(null);
        }
Ejemplo n.º 8
0
        ////合成唯一的类名字...
        //public string GetUUID()
        //{
        //    string pp = parent != null ? parent.GetUUID()+"+":"";
        //    return pp + identifierToken;
        //}

        /// <summary>
        /// 处理TypeDeclaration_t
        /// </summary>
        /// <param name="tdt"></param>
        public static void HandleDecl(TypeDeclaration_t parent, TypeDeclaration_t tdt)
        {
            BaseTypeDeclarationSyntax btd = tdt.Syntax as BaseTypeDeclarationSyntax;

            tdt.Identifier = btd.Identifier.Text;
            tdt.parent     = parent;

            if (btd is TypeDeclarationSyntax)
            {
                HandleTypeMember(btd as TypeDeclarationSyntax, tdt);
            }
            else if (btd is EnumDeclarationSyntax)
            {
                HandleEnumMember(btd as EnumDeclarationSyntax, tdt);
            }
            //sb.AppendLine("\t" + td.Identifier.Text + ";");
        }
Ejemplo n.º 9
0
        //替换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));
        }
Ejemplo n.º 10
0
        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);
                }
            }
        }
Ejemplo n.º 11
0
 //支持 ClassDeclarationSyntax EnumDeclarationSyntax
 public TypeDeclaration_t(TypeDeclaration_t parent, BaseTypeDeclarationSyntax node)
 {
     Syntax = node;
     HandleDecl(parent, this);
 }
Ejemplo n.º 12
0
        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 + ";");
        }
Ejemplo n.º 13
0
        //替换一个类...
        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;
            }
        }