/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Test/Core/Metadata/AggregatedMetadataReader.cs
45 строк
2 KB
Tomas Matousek
Move
23 окт 2020, 21:06
23 окт 2020, 21:06
d49cd2b
Код
Авторство
О чём код?
// 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 disable using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Reflection.Metadata; using System.Reflection.Metadata.Ecma335; namespace Roslyn.Test.MetadataUtilities { public sealed class AggregatedMetadataReader { private readonly MetadataAggregator _aggregator; public readonly MetadataReader Last; public ImmutableArray<MetadataReader> Readers { get; } public AggregatedMetadataReader(params MetadataReader[] readers) : this((IEnumerable<MetadataReader>)readers) { } public AggregatedMetadataReader(IEnumerable<MetadataReader> readers) { Readers = ImmutableArray.CreateRange(readers); Last = Readers.Last(); _aggregator = new MetadataAggregator(readers.First(), readers.Skip(1).ToArray()); } private TEntity GetValue<TEntity>(Handle handle, Func<MetadataReader, Handle, TEntity> getter) { var genHandle = _aggregator.GetGenerationHandle(handle, out var generation); return getter(Readers[generation], genHandle); } public IEnumerable<AssemblyReference> GetAssemblyReferences() => Readers.SelectMany(r => r.AssemblyReferences.Select(h => r.GetAssemblyReference(h))); public string GetString(StringHandle handle) => GetValue(handle, (r, h) => r.GetString((StringHandle)h)); } }