File: ImmutableArrayOperations.cs
Web Access
Project: src\src\tools\illink\src\ILLink.RoslynAnalyzer\ILLink.RoslynAnalyzer.csproj (ILLink.RoslynAnalyzer)
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
 
using System.Collections.Generic;
using System.Collections.Immutable;
using Microsoft.CodeAnalysis;
 
namespace ILLink.RoslynAnalyzer
{
	sealed class ImmutableArrayOperations
	{
		internal static bool Contains<T, TComp> (ImmutableArray<T> list, T elem, TComp comparer)
					where TComp : IEqualityComparer<T>
		{
			foreach (var e in list) {
				if (comparer.Equals (e, elem)) {
					return true;
				}
			}
			return false;
		}
 
		internal static TSymbol? TryGetSingleSymbol<TSymbol> (ImmutableArray<ISymbol> members) where TSymbol : class, ISymbol
		{
			TSymbol? candidate = null;
			foreach (var m in members) {
				if (m is TSymbol tsym) {
					if (candidate is null) {
						candidate = tsym;
					} else {
						return null;
					}
				}
			}
			return candidate;
		}
 
		internal static void AddIfNotNull<TSymbol> (ImmutableArray<TSymbol>.Builder properties, TSymbol? p) where TSymbol : class, ISymbol
		{
			if (p != null) {
				properties.Add (p);
			}
		}
	}
}