Example #1
0
        public static void AddCodeSite(this CodeFunction codeFunction)
        {
            if (codeFunction.HasExpressionBody())
            {//展开表达式主体为程序块主体,不做逆向处理
                var addReturn = !(codeFunction.Type.TypeKind == vsCMTypeRef.vsCMTypeRefVoid ||
                                  codeFunction.Parent is CodeProperty codeProperty && codeFunction.EqualsOffset(codeProperty.Setter));
                if (codeFunction.HasBody())
                {
                    var epFind = codeFunction.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
                    var epEEnd = codeFunction.GetEndPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
                    epFind.FindPattern("=>", (int)vsFindOptions.vsFindOptionsBackwards);
                    epFind.Delete(2);
                    epFind.Insert("{get{");
                    if (addReturn)
                    {
                        epFind.Insert("return ");
                    }
                    epEEnd.CharRight();
                    epEEnd.Insert("}}");
                }
                else
                {
                    var epFind = codeFunction.GetStartPoint().CreateEditPoint();
                    var epEEnd = codeFunction.GetEndPoint().CreateEditPoint();
                    epFind.FindPattern("=>");
                    epFind.Delete(2);
                    epFind.Insert("{");
                    if (addReturn)
                    {
                        epFind.Insert("return ");
                    }
                    epEEnd.Insert("}");
                }
            }
            if (codeFunction.ExistsCodeSite())
            {
                codeFunction.DeleteCodeSite();
            }
            EditPoint epStart = codeFunction.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
            EditPoint epEnd   = codeFunction.GetEndPoint(vsCMPart.vsCMPartBody).CreateEditPoint();

            if (epStart.Line == epEnd.Line)
            {
                epEnd.Insert(Environment.NewLine);
            }
            epStart.Insert(codeFunction.CSEnterText());
            if (Properties.Settings.Default.IncludeCatch)
            {
                epEnd.Insert(codeFunction.CSCatchText());
            }
            epEnd.Insert(codeFunction.CSExitText());

            //格式化指定范围内的文本
            codeFunction.StartPoint.CreateEditPoint().SmartFormat(codeFunction.EndPoint.CreateEditPoint());
        }
Example #2
0
 public CodeElementViewModel(CodeElement codeElement)
 {
     CodeElement = codeElement;
     Name        = Guid.NewGuid().ToString();
     if (CodeElement == null)
     {
         return;
     }
     Name = CodeElement.Name;
     if (CodeElement.Kind == vsCMElement.vsCMElementProperty && CodeElement is CodeProperty codeProperty)
     {
         if (codeProperty.Getter != null)
         {
             LoadChild((CodeElement)codeProperty.Getter);
         }
         if (codeProperty.Setter != null)
         {
             LoadChild((CodeElement)codeProperty.Setter);
         }
     }
     else if (CodeElement.Children != null)
     {
         LoadChildren(CodeElement.Children);
     }
     if (IsCodeFunction)
     {
         if (CodeFunction.MustImplement || !(CodeFunction.HasBody() || CodeFunction.HasExpressionBody()))
         {
             CodeElement = null;
             return;//跳过抽象方法和没有主体的方法
         }
         Name           = CodeFunction.GetSetName() ?? Name;
         ExistsCodeSite = CodeFunction.ExistsCodeSite();
         //IsChecked = ExistsCodeSite;
     }
 }