Пример #1
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;

            case "ImportGroup": ob = new MSBuildImportGroup(); break;

            case "Import": ob = new MSBuildImport(); break;

            case "Target": ob = new MSBuildTarget(); break;

            case "Choose": ob = new MSBuildChoose(); break;

            case "ProjectExtensions": ob = new MSBuildProjectExtensions(); break;

            default: ob = new MSBuildXmlElement(); break;
            }
            if (ob != null)
            {
                ob.ParentNode = this;
                ob.Read(reader);
                ChildNodes = ChildNodes.Add(ob);
            }
            else
            {
                base.ReadChildElement(reader);
            }
        }
Пример #2
0
        internal void ResetIndent(bool closeInNewLine, MSBuildProject project, MSBuildObject parent, MSBuildNode previousSibling)
        {
            StartInnerWhitespace = StartWhitespace = EndWhitespace = EndInnerWhitespace = null;

            if (previousSibling != null)
            {
                StartWhitespace = previousSibling.StartWhitespace;
                if (closeInNewLine)
                {
                    EndInnerWhitespace = StartWhitespace;
                }
            }
            else if (parent != null)
            {
                if (parent.StartInnerWhitespace == null)
                {
                    parent.StartInnerWhitespace = project.TextFormat.NewLine;
                    parent.EndInnerWhitespace   = parent.StartWhitespace;
                }
                object parentStartWhitespace = (parent != project) ? parent.StartWhitespace : "";
                StartWhitespace = parentStartWhitespace + "  ";
                if (closeInNewLine)
                {
                    EndInnerWhitespace = StartWhitespace;
                }
            }
            EndWhitespace = project.TextFormat.NewLine;
            if (closeInNewLine)
            {
                StartInnerWhitespace = project.TextFormat.NewLine;
            }

            ResetChildrenIndent();
        }
Пример #3
0
        public MSBuildItemGroup AddNewItemGroup()
        {
            AssertCanModify();
            var group = new MSBuildItemGroup();

            MSBuildObject refNode   = null;
            var           lastGroup = ItemGroups.LastOrDefault();

            if (lastGroup != null)
            {
                refNode = lastGroup;
            }
            else
            {
                var g = PropertyGroups.LastOrDefault();
                if (g != null)
                {
                    refNode = g;
                }
            }

            group.ParentNode = this;
            if (refNode != null)
            {
                ChildNodes = ChildNodes.Insert(ChildNodes.IndexOf(refNode) + 1, group);
            }
            else
            {
                ChildNodes = ChildNodes.Add(group);
            }

            group.ResetIndent(true);
            NotifyChanged();
            return(group);
        }
Пример #4
0
        public MSBuildPropertyGroup AddNewPropertyGroup(bool insertAtEnd = true, MSBuildObject beforeObject = null)
        {
            var group = new MSBuildPropertyGroup();

            AddPropertyGroup(group, insertAtEnd);
            return(group);
        }
Пример #5
0
 public void Remove(MSBuildObject ob)
 {
     AssertCanModify();
     if (ob.ParentObject == this)
     {
         ob.RemoveIndent();
         ChildNodes = ChildNodes.Remove(ob);
     }
 }
Пример #6
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;

            case "ImportGroup": ob = new MSBuildImportGroup(); break;

            case "Choose": ob = new MSBuildChoose(); break;

            default: ob = new MSBuildXmlElement(); break;
            }
            ob.ParentNode = this;
            ob.Read(reader);
            ChildNodes = ChildNodes.Add(ob);
        }
Пример #7
0
        public MSBuildImport AddNewImport(string name, string condition = null, MSBuildObject beforeObject = null)
        {
            AssertCanModify();
            var import = new MSBuildImport {
                Project   = name,
                Condition = condition
            };

            int index = -1;

            if (beforeObject != null)
            {
                index = ChildNodes.IndexOf(beforeObject);
            }
            else
            {
                index = ChildNodes.FindLastIndex(ob => ob is MSBuildImport);
                if (index != -1)
                {
                    index++;
                }
            }

            import.ParentNode = this;

            if (index != -1)
            {
                ChildNodes = ChildNodes.Insert(index, import);
            }
            else
            {
                ChildNodes = ChildNodes.Add(import);
            }

            import.ResetIndent(false);
            NotifyChanged();
            return(import);
        }
Пример #8
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;
            }
            if (ob != null)
            {
                ob.ParentNode = this;
                ob.Read(reader);
                ChildNodes = ChildNodes.Add(ob);
                return;
            }

            var task = new MSBuildTask();

            task.ParentNode = this;
            task.Read(reader);
            ChildNodes = ChildNodes.Add(task);
        }
Пример #9
0
        public void AddPropertyGroup(MSBuildPropertyGroup group, bool insertAtEnd = true, MSBuildObject beforeObject = null)
        {
            AssertCanModify();
            if (group.ParentProject != null)
            {
                throw new InvalidOperationException("Group already belongs to a project");
            }

            group.ParentNode = this;

            bool added = false;

            if (beforeObject != null)
            {
                var index = ChildNodes.IndexOf(beforeObject);
                if (index != -1)
                {
                    ChildNodes = ChildNodes.Insert(index, group);
                    added      = true;
                }
            }
            if (!added)
            {
                if (insertAtEnd)
                {
                    var last = ChildNodes.FindLastIndex(g => g is MSBuildPropertyGroup);
                    if (last != -1)
                    {
                        ChildNodes = ChildNodes.Insert(last + 1, group);
                        added      = true;
                    }
                }
                else
                {
                    var first = ChildNodes.FindIndex(g => g is MSBuildPropertyGroup);
                    if (first != -1)
                    {
                        ChildNodes = ChildNodes.Insert(first, group);
                        added      = true;
                    }
                }
                if (!added)
                {
                    var first = ChildNodes.FindIndex(g => g is MSBuildItemGroup);
                    if (first != -1)
                    {
                        ChildNodes = ChildNodes.Insert(first, group);
                    }
                    else
                    {
                        ChildNodes = ChildNodes.Add(group);
                    }
                }
            }

            group.ResetIndent(true);
            NotifyChanged();
        }
Пример #10
0
		internal void ResetIndent (bool closeInNewLine, MSBuildProject project, MSBuildObject parent, MSBuildNode previousSibling)
		{
			StartInnerWhitespace = StartWhitespace = EndWhitespace = EndInnerWhitespace = null;

			if (previousSibling != null) {
				StartWhitespace = previousSibling.StartWhitespace;
				if (closeInNewLine)
					EndInnerWhitespace = StartWhitespace;
			} else if (parent != null) {
				if (parent.StartInnerWhitespace == null) {
					parent.StartInnerWhitespace = project.TextFormat.NewLine;
					parent.EndInnerWhitespace = parent.StartWhitespace;
				}
				object parentStartWhitespace = (parent != project) ? parent.StartWhitespace : "";
				StartWhitespace = parentStartWhitespace + "  ";
				if (closeInNewLine)
					EndInnerWhitespace = StartWhitespace;
			}
			EndWhitespace = project.TextFormat.NewLine;
			if (closeInNewLine)
				StartInnerWhitespace = project.TextFormat.NewLine;

			ResetChildrenIndent ();
		}
Пример #11
0
		public void Remove (MSBuildObject ob)
		{
			AssertCanModify ();
			if (ob.ParentObject == this) {
				ob.RemoveIndent ();
				ChildNodes = ChildNodes.Remove (ob);
				ob.ParentNode = null;
			}
		}
Пример #12
0
		public void AddPropertyGroup (MSBuildPropertyGroup group, bool insertAtEnd = true, MSBuildObject beforeObject = null)
		{
			AssertCanModify ();
			if (group.ParentProject != null)
				throw new InvalidOperationException ("Group already belongs to a project");

			group.ParentNode = this;

			bool added = false;
			if (beforeObject != null) {
				var index = ChildNodes.IndexOf (beforeObject);
				if (index != -1) {
					ChildNodes = ChildNodes.Insert (index, group);
					added = true;
				}
			}
			if (!added) {
				if (insertAtEnd) {
					var last = ChildNodes.FindLastIndex (g => g is MSBuildPropertyGroup);
					if (last != -1) {
						ChildNodes = ChildNodes.Insert (last + 1, group);
						added = true;
					}
				} else {
					var first = ChildNodes.FindIndex (g => g is MSBuildPropertyGroup);
					if (first != -1) {
						ChildNodes = ChildNodes.Insert (first, group);
						added = true;
					}
				}
				if (!added) {
					var first = ChildNodes.FindIndex (g => g is MSBuildItemGroup);
					if (first != -1)
						ChildNodes = ChildNodes.Insert (first, group);
					else
						ChildNodes = ChildNodes.Add (group);
				}
			}

			group.ResetIndent (true);
			NotifyChanged ();
		}
Пример #13
0
		public MSBuildPropertyGroup AddNewPropertyGroup (bool insertAtEnd = true, MSBuildObject beforeObject = null)
		{
			var group = new MSBuildPropertyGroup ();
			AddPropertyGroup (group, insertAtEnd);
			return group;
		}
Пример #14
0
		public MSBuildImport AddNewImport (string name, string condition = null, MSBuildObject beforeObject = null)
		{
			AssertCanModify ();
			var import = new MSBuildImport {
				Project = name,
				Condition = condition
			};

			int index = -1;
			if (beforeObject != null)
				index = ChildNodes.IndexOf (beforeObject);
			else {
				index = ChildNodes.FindLastIndex (ob => ob is MSBuildImport);
				if (index != -1)
					index++;
			}

			import.ParentNode = this;

			if (index != -1)
				ChildNodes = ChildNodes.Insert (index, import);
			else
				ChildNodes = ChildNodes.Add (import);

			import.ResetIndent (false);
			NotifyChanged ();
			return import;
		}