From b379b0230f91bf38faa6d3fd26a1b3da631cad68 Mon Sep 17 00:00:00 2001 From: walon Date: Tue, 15 Apr 2025 11:08:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Rename=20TypeDef?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Rename/SymbolRename.cs | 55 ++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index 1f41aeb..ac2832b 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Runtime.InteropServices; using UnityEditor.SceneManagement; using UnityEngine; +using UnityEngine.Assertions; namespace Obfuz { @@ -143,17 +144,51 @@ namespace Obfuz Debug.Log("Rename Modules end"); } + + class RefTypeDefMetas + { + public readonly List typeRefs = new List(); + + public readonly List customAttributes = new List(); + } + + private void BuildRefTypeDefMetasMap(Dictionary refTypeDefMetasMap) + { + //foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) + //{ + // RenameTypeRefInCustomAttribute(ass.module, mod, type, oldFullName); + //} + + foreach (ObfuzAssemblyInfo ass in _ctx.assemblies) + { + foreach (TypeRef typeRef in ass.module.GetTypeRefs()) + { + TypeDef typeDef = typeRef.ResolveThrow(); + if (!refTypeDefMetasMap.TryGetValue(typeDef, out var typeDefMetas)) + { + typeDefMetas = new RefTypeDefMetas(); + refTypeDefMetasMap.Add(typeDef, typeDefMetas); + } + typeDefMetas.typeRefs.Add(typeRef); + } + } + } + private void RenameTypes() { Debug.Log("RenameTypes begin"); + + var refTypeDefMetasMap = new Dictionary(); + BuildRefTypeDefMetasMap(refTypeDefMetasMap); _ctx.assemblyCache.EnableTypeDefCache = false; + foreach (ObfuzAssemblyInfo ass in _ctx.assemblies) { foreach (TypeDef type in ass.module.GetTypes()) { if (_renamePolicy.NeedRename(type)) { - Rename(type); + Rename(type, refTypeDefMetasMap.TryGetValue(type, out var typeDefMetas) ? typeDefMetas : null); } else { @@ -326,7 +361,7 @@ namespace Obfuz } } - private void Rename(TypeDef type) + private void Rename(TypeDef type, RefTypeDefMetas refTypeDefMeta) { string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name); string oldFullName = type.FullName; @@ -352,24 +387,18 @@ namespace Obfuz RenameTypeRefInCustomAttribute(ass.module, mod, type, oldFullName); } - foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) + if (refTypeDefMeta != null) { - foreach (TypeRef typeRef in ass.module.GetTypeRefs()) + foreach (TypeRef typeRef in refTypeDefMeta.typeRefs) { - if (typeRef.FullName != oldFullName) - { - continue; - } - if (typeRef.DefinitionAssembly.Name != moduleName) - { - continue; - } + Assert.AreEqual(typeRef.FullName, oldFullName); + Assert.IsTrue(typeRef.DefinitionAssembly.Name == moduleName); if (!string.IsNullOrEmpty(oldNamespace)) { typeRef.Namespace = newNamespace; } typeRef.Name = newName; - Debug.Log($"rename assembly:{ass.module.Name} reference {oldFullName} => {typeRef.FullName}"); + Debug.Log($"rename assembly:{typeRef.Module.Name} reference {oldFullName} => {typeRef.FullName}"); } } type.Name = newName;