| File: Linker\ModuleDefinitionExtensions.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 System.Diagnostics.CodeAnalysis; using Mono.Cecil; #nullable enable namespace Mono.Linker { internal static class ModuleDefinitionExtensions { public static bool IsCrossgened(this ModuleDefinition module) { return (module.Attributes & ModuleAttributes.ILOnly) == 0 && (module.Attributes & ModuleAttributes.ILLibrary) != 0; } public static bool GetMatchingExportedType(this ModuleDefinition module, TypeDefinition typeDefinition, ITryResolveMetadata context, [NotNullWhen(true)] out ExportedType? exportedType) { exportedType = null; if (!module.HasExportedTypes) return false; foreach (var et in module.ExportedTypes) { if (context.TryResolve(et) == typeDefinition) { exportedType = et; return true; } } return false; } public static TypeDefinition? ResolveType(this ModuleDefinition module, string typeFullName, ITryResolveMetadata resolver) { var type = module.GetType(typeFullName); if (type != null) return type; if (!module.HasExportedTypes) return null; // When resolving a forwarded type from a string, typeFullName should be a simple type name. int idx = typeFullName.LastIndexOf('.'); (string typeNamespace, string typeName) = idx > 0 ? (typeFullName.Substring(0, idx), typeFullName.Substring(idx + 1)) : (string.Empty, typeFullName); TypeReference typeReference = new TypeReference(typeNamespace, typeName, module, module); return resolver.TryResolve(typeReference); } } }