|
// 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 ILLink.Shared;
using Mono.Cecil;
namespace Mono.Linker.Steps
{
public static class MarkExportedTypesTarget
{
public static void ProcessAssembly(AssemblyDefinition assembly, LinkContext context)
{
if (!assembly.MainModule.HasExportedTypes)
return;
foreach (var type in assembly.MainModule.ExportedTypes)
InitializeExportedType(type, context, assembly);
}
static void InitializeExportedType(ExportedType exportedType, LinkContext context, AssemblyDefinition assembly)
{
if (!context.Annotations.IsMarked(exportedType))
return;
if (!context.Annotations.TryGetPreservedMembers(exportedType, out TypePreserveMembers members))
return;
TypeDefinition? type = context.TryResolve(exportedType);
if (type == null)
{
if (!context.IgnoreUnresolved)
context.LogError(null, DiagnosticId.ExportedTypeCannotBeResolved, exportedType.Name);
return;
}
context.Annotations.Mark(type, new DependencyInfo(DependencyKind.ExportedType, exportedType), new MessageOrigin(assembly));
context.Annotations.SetMembersPreserve(type, members);
}
}
}
|