コード例 #1
0
        /// <summary>
        /// 执行命令
        /// </summary>
        /// <param name="para">自定义参数</param>
        /// <result></result>
        public override CommandResult Process(object para)
        {
            CommandResult result = new CommandResult();

            result.ErrCode = CommandExecStatus.Succeed;
            result.ErrMsg  = para.ToString();
            if (vsWindowType.vsWindowTypeDocument == DteHelper.Dte2.ActiveWindow.Type)
            {
                _currentCodePoint    = DteHelper.GetCurrentActivePoint();
                _currentCodeDocument = DteHelper.Dte2.ActiveDocument;
                List <CodeDomCodeElement <CodeElement> > listElement = DteHelper.FetchCodeElementByPoint(_currentCodeDocument.ProjectItem.FileCodeModel, _currentCodePoint);
                this.CurrentCodeElement = DteHelper.FindPointElement(listElement, _currentCodePoint);
            }
            else if (vsWindowType.vsWindowTypeSolutionExplorer == DteHelper.Dte2.ActiveWindow.Type && CurrentCodeElement != null)
            {
                //取得所有选中文件
                IList <ProjectItem> listItem = DteHelper.GetSelectedItem(Constant.CSharpFileExtension);

                List <CodeDomCodeElement <CodeElement> > listElement = DteHelper.FetchCodeElementByPoint(_currentCodeDocument.ProjectItem.FileCodeModel, _currentCodePoint);
                CodeDomCodeElement <CodeElement>         codeElement = DteHelper.FindPointElement(listElement, _currentCodePoint);

                foreach (var projectItem in listItem)
                {
                    foreach (var codeClass in DteHelper.GetClassFromFile(projectItem.FileCodeModel))
                    {//重构元素
                        DteHelper.RefactorElement(this.CurrentCodeElement, codeElement, codeClass);
                    }
                }
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// 当前光标处是属性
        /// </summary>
        /// <returns></returns>
        public bool IsPropertyOfCurrenActivePoint()
        {
            TextPoint textPoint = this.GetCurrentActivePoint();
            List <CodeDomCodeElement <CodeElement> > listElement = FetchCodeElementByPoint(_dte.ActiveDocument.ProjectItem.FileCodeModel, textPoint);
            CodeDomCodeElement <CodeElement>         codeElement = FindPointElement(listElement, textPoint);

            if (null != codeElement && codeElement.CodeElement is CodeProperty)
            {
                return(true);
            }
            return(false);
        }
コード例 #3
0
 /// <summary>
 /// 删除代码元素
 /// </summary>
 /// <param name="codeElement">要删除的元素</param>
 /// <param name="codeClass">操作的类</param>
 public void DeleteCodeElement(CodeDomCodeElement <CodeElement> codeElement, CodeClass codeClass)
 {
     foreach (CodeElement ce in codeClass.Members)
     {
         if (ce.Kind == codeElement.Kind && ce.Name == codeElement.Name)
         {//仅比较类型,名称,不比较声明,修饰
             try
             {
                 codeClass.RemoveMember(ce);
             }
             catch
             {
             }
         }
     }
 }
コード例 #4
0
        /// <summary>
        /// 当前光标处是方法
        /// </summary>
        /// <returns></returns>
        public bool IsMethodOfCurrenActivePoint()
        {
            TextPoint textPoint = this.GetCurrentActivePoint();
            List <CodeDomCodeElement <CodeElement> > listElement = FetchCodeElementByPoint(_dte.ActiveDocument.ProjectItem.FileCodeModel, textPoint);
            CodeDomCodeElement <CodeElement>         codeElement = FindPointElement(listElement, textPoint);

            if (null != codeElement && codeElement.CodeElement is CodeFunction)
            {
                if (textPoint.Line == codeElement.StartPoint.Line)
                {
                    //在方法的定义行
                    return(true);
                }
            }
            return(false);
        }
コード例 #5
0
        /// <summary>
        /// 重构元素
        /// </summary>
        /// <param name="oldElement">老元素</param>
        /// <param name="newElement">新元素</param>
        /// <param name="codeClass">操作的类</param>
        public void RefactorElement(CodeDomCodeElement <CodeElement> oldElement, CodeDomCodeElement <CodeElement> newElement, CodeClass codeClass)
        {
            if (newElement.Kind == oldElement.Kind)
            {
                foreach (CodeElement ce in codeClass.Members)
                {
                    if (ce.Kind == oldElement.Kind && ce.Name == oldElement.Name)
                    {
                        switch (oldElement.Kind)
                        {
                        case vsCMElement.vsCMElementFunction:
                            this.RefactorMethod((CodeFunction)ce, (CodeFunction)newElement.CodeElement);    //重构方法
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
        }
コード例 #6
0
ファイル: DTEHelper.cs プロジェクト: Nacro8/xiaobier
 /// <summary>
 /// 重构元素
 /// </summary>
 /// <param name="oldElement">老元素</param>
 /// <param name="newElement">新元素</param>
 /// <param name="codeClass">操作的类</param>
 public void RefactorElement(CodeDomCodeElement<CodeElement> oldElement, CodeDomCodeElement<CodeElement> newElement, CodeClass codeClass)
 {
     if (newElement.Kind == oldElement.Kind)
     {
         foreach (CodeElement ce in codeClass.Members)
         {
             if (ce.Kind == oldElement.Kind && ce.Name == oldElement.Name)
             {
                 switch (oldElement.Kind)
                 {
                     case vsCMElement.vsCMElementFunction:
                         this.RefactorMethod((CodeFunction)ce, (CodeFunction)newElement.CodeElement);//重构方法
                         break;
                     default:
                         break;
                 }
             }
         }
     }
 }
コード例 #7
0
ファイル: DTEHelper.cs プロジェクト: Nacro8/xiaobier
 /// <summary>
 /// 删除代码元素
 /// </summary>
 /// <param name="codeElement">要删除的元素</param>
 /// <param name="codeClass">操作的类</param>
 public void DeleteCodeElement(CodeDomCodeElement<CodeElement> codeElement, CodeClass codeClass)
 {
     foreach (CodeElement ce in codeClass.Members)
     {
         if (ce.Kind == codeElement.Kind && ce.Name == codeElement.Name)
         {//仅比较类型,名称,不比较声明,修饰
             try
             {
                 codeClass.RemoveMember(ce);
             }
             catch
             {
             }
         }
     }
 }