public static IEnumerable <IPackageReference> GetPackageReferences(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement)
        {
            var packageReferences = packageReferencesItemGroupXElement.GetPackageReferenceXElements()
                                    .Select(xElement => new PackageReferenceXElement(xElement));

            return(packageReferences);
        }
        public static IEnumerable <XElement> GetPackageReferenceXElementsWhereName(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement, string name)
        {
            var xPackageReferences = packageReferencesItemGroupXElement.GetPackageReferenceXElements()
                                     .Where(xElement => xElement.Attribute(ProjectFileXmlElementName.Include).Value == name);

            return(xPackageReferences);
        }
        public static PackageReferencesItemGroupXElement AddPackageReferencesItemGroupXElement(this ProjectXElement projectXElement)
        {
            var xItemGroupXElement = projectXElement.AddItemGroupXElement();

            var packageReferencesItemGroupXElement = PackageReferencesItemGroupXElement.New(xItemGroupXElement);

            return(packageReferencesItemGroupXElement);
        }
        // I don't want to create <ItemGroup> elements with no child elements.
        //  Maybe this is a final formatting thing before serialization? 1) Ensure XText nodes sandwich all <Project> element children, 2) Ensure that all empty <ItemGroup> elements are removed.
        //  YES! But, I will also do my best to prevent adding empty <ItemGroup> elements. Doing so at the ProjectXElement extensions level of abstraction might be the wrong level, but .

        // Is there an <ItemGroup> element with a <PackageReference> child?
        // Yes? Use return that <ItemGroup> as a PackageReferencesItemGroupXElement.
        // No? Create

        public static bool HasPackageReferencesItemGroupElement(this ProjectXElement projectXElement, out PackageReferencesItemGroupXElement packageReferencesItemGroupXElement)
        {
            var hasItemGroupElement = projectXElement.HasItemGroupElementWithChildSingleOrDefault(ProjectFileXmlElementName.PackageReference, out var itemGroupElement);

            packageReferencesItemGroupXElement = hasItemGroupElement ? PackageReferencesItemGroupXElement.New(itemGroupElement) : default;

            return(hasItemGroupElement);
        }
        /// <summary>
        /// Note, no need for package version string since you can't have mulitple versions of the same package.
        /// </summary>
        public static bool HasPackageReference(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement, string name, out IPackageReference packageReference)
        {
            packageReference = packageReferencesItemGroupXElement.GetPackageReferenceXElementsWhereName(name)
                               .Select(xElement => PackageReferenceXElement.From(xElement))
                               .SingleOrDefault();

            var hasPackageReference = PackageReferenceHelper.WasFound(packageReference);

            return(hasPackageReference);
        }
        public static bool RemovePackageReference(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement, IPackageReference packageReference)
        {
            var xPackageReference = packageReferencesItemGroupXElement.GetPackageReferenceXElementsWhereName(packageReference.Name)
                                    .SingleOrDefault();

            var wasFound = XElementHelper.WasFound(xPackageReference);

            if (wasFound)
            {
                xPackageReference.Remove();
            }

            return(wasFound);
        }
        public static bool HasPackageReference(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement, string name)
        {
            var hasPackageReference = packageReferencesItemGroupXElement.HasPackageReference(name, out _);

            return(hasPackageReference);
        }
        public static IPackageReference AddPackageReference(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement, string name, string versionString)
        {
            var projectReference = PackageReferenceXElement.New(packageReferencesItemGroupXElement, name, versionString);

            return(projectReference);
        }
        public static IEnumerable <XElement> GetPackageReferenceXElements(this PackageReferencesItemGroupXElement packageReferencesItemGroupXElement)
        {
            var packageReferenceXElements = packageReferencesItemGroupXElement.Value.Elements(ProjectFileXmlElementName.PackageReference);

            return(packageReferenceXElements);
        }
        public static PackageReferenceXElement New(PackageReferencesItemGroupXElement parent, string name, string versionString)
        {
            var packageReference = PackageReferenceXElement.New(parent.Value, name, versionString);

            return(packageReference);
        }
        public static PackageReferencesItemGroupXElement AsPackageReferencesItemGroup(this XElement xElement)
        {
            var packageReferenceItemGroup = new PackageReferencesItemGroupXElement(xElement);

            return(packageReferenceItemGroup);
        }
        public static PackageReferencesItemGroupXElement New(XElement value)
        {
            var packageReferencesItemGroupXElement = new PackageReferencesItemGroupXElement(value);

            return(packageReferencesItemGroupXElement);
        }