| File: Linker.Steps\MarkExportedTypesTargetStep.cs | Web Access |
| Project: src\runtime\src\tools\illink\src\linker\Mono.Linker.csproj (illink) |
// 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); } } }