From 22ea63abaab6c1d7e4f6586bec14a5d019b047c2 Mon Sep 17 00:00:00 2001 From: CreateAndInject Date: Wed, 12 Jul 2023 05:29:33 +0800 Subject: [PATCH] Improve Importer TryToUseTypeDefs --- src/DotNet/Importer.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/DotNet/Importer.cs b/src/DotNet/Importer.cs index aa0f02b8f..44094e6db 100644 --- a/src/DotNet/Importer.cs +++ b/src/DotNet/Importer.cs @@ -261,12 +261,15 @@ TypeSig ImportAsTypeSig(Type type, Type declaringType, bool? treatAsGenericInst } } - ITypeDefOrRef TryResolve(TypeRef tr) { + ITypeDefOrRef TryResolve(ITypeDefOrRef type) { + if (type is TypeDef td) + return td; + var tr = type as TypeRef; if (!TryToUseTypeDefs || tr is null) return tr; if (!IsThisModule(tr)) return tr; - var td = tr.Resolve(); + td = tr.Resolve(); if (td is null || td.Module != module) return tr; return td; @@ -358,11 +361,13 @@ static bool Equals(IAssembly a, IAssembly b) { ITypeDefOrRef CreateTypeRef(Type type) => TryResolve(mapper?.Map(type) ?? CreateTypeRef2(type)); - TypeRef CreateTypeRef2(Type type) { + ITypeDefOrRef CreateTypeRef2(Type type) { + if (TryToUseTypeDefs && IsThisModule(type.Module) && module.ResolveToken(type.MetadataToken) is TypeDef td) + return td; if (!type.IsNested) return module.UpdateRowId(new TypeRefUser(module, type.Namespace ?? string.Empty, ReflectionExtensions.Unescape(type.Name) ?? string.Empty, CreateScopeReference(type))); type.GetTypeNamespaceAndName_TypeDefOrRef(out var @namespace, out var name); - return module.UpdateRowId(new TypeRefUser(module, @namespace ?? string.Empty, name ?? string.Empty, CreateTypeRef2(type.DeclaringType))); + return module.UpdateRowId(new TypeRefUser(module, @namespace ?? string.Empty, name ?? string.Empty, (TypeRef)CreateTypeRef2(type.DeclaringType))); } IResolutionScope CreateScopeReference(Type type) {