| File: Core\FrameworkSpecificGroup.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; using NuGet.Frameworks; using NuGet.Packaging.Core; using NuGet.Shared; namespace NuGet.Packaging { /// <summary> /// A group of items/files from a nupkg with the same target framework. /// </summary> public class FrameworkSpecificGroup : IEquatable<FrameworkSpecificGroup>, IFrameworkSpecific { private readonly NuGetFramework _targetFramework; private readonly string[] _items; /// <summary> /// Framework specific group /// </summary> /// <param name="targetFramework">group target framework</param> /// <param name="items">group items</param> public FrameworkSpecificGroup(NuGetFramework targetFramework, IEnumerable<string> items) { if (targetFramework == null) { throw new ArgumentNullException(nameof(targetFramework)); } if (items == null) { throw new ArgumentNullException(nameof(items)); } _targetFramework = targetFramework; HasEmptyFolder = items.Any(item => item.EndsWith(PackagingCoreConstants.ForwardSlashEmptyFolder, StringComparison.Ordinal)); // Remove empty folder markers here _items = items.Where(item => !item.EndsWith(PackagingCoreConstants.ForwardSlashEmptyFolder, StringComparison.Ordinal)) .ToArray(); } /// <summary> /// Group target framework /// </summary> public NuGetFramework TargetFramework { get { return _targetFramework; } } /// <summary> /// Item relative paths /// </summary> public IEnumerable<string> Items { get { return _items; } } public bool HasEmptyFolder { get; } public bool Equals(FrameworkSpecificGroup? other) { if (ReferenceEquals(this, other)) { return true; } if (ReferenceEquals(other, null)) { return false; } return GetHashCode() == other.GetHashCode(); } public override bool Equals(object? obj) { var other = obj as FrameworkSpecificGroup; if (other != null) { return Equals(other); } return false; } public override int GetHashCode() { if (ReferenceEquals(this, null)) { return 0; } var combiner = new HashCodeCombiner(); combiner.AddObject(TargetFramework); combiner.AddUnorderedSequence(Items, StringComparer.Ordinal); return combiner.CombinedHash; } } }