/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IAssemblySymbolExtensions.cs
70 строк
2 KB
Tomáš Matoušek
More improvements to source packages (#78587)
16 май 2025, 01:46
Не верифицирован
16 май 2025, 01:46
015a854
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable enable #pragma warning disable RS1024 // Use 'SymbolEqualityComparer' when comparing symbols (https://github.com/dotnet/roslyn/issues/78583) using System.Collections.Generic; namespace Microsoft.CodeAnalysis.Shared.Extensions; internal static class IAssemblySymbolExtensions { private const string AttributeSuffix = "Attribute"; public static bool ContainsNamespaceName( this List<IAssemblySymbol> assemblies, string namespaceName) { // PERF: Expansion of "assemblies.Any(a => a.NamespaceNames.Contains(namespaceName))" // to avoid allocating a lambda. foreach (var a in assemblies) { if (a.NamespaceNames.Contains(namespaceName)) { return true; } } return false; } public static bool ContainsTypeName(this List<IAssemblySymbol> assemblies, string typeName, bool tryWithAttributeSuffix = false) { if (!tryWithAttributeSuffix) { // PERF: Expansion of "assemblies.Any(a => a.TypeNames.Contains(typeName))" // to avoid allocating a lambda. foreach (var a in assemblies) { if (a.TypeNames.Contains(typeName)) { return true; } } } else { var attributeName = typeName + AttributeSuffix; foreach (var a in assemblies) { var typeNames = a.TypeNames; if (typeNames.Contains(typeName) || typeNames.Contains(attributeName)) { return true; } } } return false; } public static bool IsSameAssemblyOrHasFriendAccessTo(this IAssemblySymbol assembly, IAssemblySymbol toAssembly) { return Equals(assembly, toAssembly) || (assembly.IsInteractive && toAssembly.IsInteractive) || toAssembly.GivesAccessTo(assembly); } }