优化Rename TypeDef
parent
6d150ac278
commit
b379b0230f
|
@ -8,6 +8,7 @@ using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using UnityEditor.SceneManagement;
|
using UnityEditor.SceneManagement;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Assertions;
|
||||||
|
|
||||||
namespace Obfuz
|
namespace Obfuz
|
||||||
{
|
{
|
||||||
|
@ -143,17 +144,51 @@ namespace Obfuz
|
||||||
Debug.Log("Rename Modules end");
|
Debug.Log("Rename Modules end");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class RefTypeDefMetas
|
||||||
|
{
|
||||||
|
public readonly List<TypeRef> typeRefs = new List<TypeRef>();
|
||||||
|
|
||||||
|
public readonly List<CustomAttribute> customAttributes = new List<CustomAttribute>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildRefTypeDefMetasMap(Dictionary<TypeDef, RefTypeDefMetas> 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()
|
private void RenameTypes()
|
||||||
{
|
{
|
||||||
Debug.Log("RenameTypes begin");
|
Debug.Log("RenameTypes begin");
|
||||||
|
|
||||||
|
var refTypeDefMetasMap = new Dictionary<TypeDef, RefTypeDefMetas>();
|
||||||
|
BuildRefTypeDefMetasMap(refTypeDefMetasMap);
|
||||||
_ctx.assemblyCache.EnableTypeDefCache = false;
|
_ctx.assemblyCache.EnableTypeDefCache = false;
|
||||||
|
|
||||||
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
|
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
|
||||||
{
|
{
|
||||||
foreach (TypeDef type in ass.module.GetTypes())
|
foreach (TypeDef type in ass.module.GetTypes())
|
||||||
{
|
{
|
||||||
if (_renamePolicy.NeedRename(type))
|
if (_renamePolicy.NeedRename(type))
|
||||||
{
|
{
|
||||||
Rename(type);
|
Rename(type, refTypeDefMetasMap.TryGetValue(type, out var typeDefMetas) ? typeDefMetas : null);
|
||||||
}
|
}
|
||||||
else
|
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 moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name);
|
||||||
string oldFullName = type.FullName;
|
string oldFullName = type.FullName;
|
||||||
|
@ -352,24 +387,18 @@ namespace Obfuz
|
||||||
RenameTypeRefInCustomAttribute(ass.module, mod, type, oldFullName);
|
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)
|
Assert.AreEqual(typeRef.FullName, oldFullName);
|
||||||
{
|
Assert.IsTrue(typeRef.DefinitionAssembly.Name == moduleName);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (typeRef.DefinitionAssembly.Name != moduleName)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(oldNamespace))
|
if (!string.IsNullOrEmpty(oldNamespace))
|
||||||
{
|
{
|
||||||
typeRef.Namespace = newNamespace;
|
typeRef.Namespace = newNamespace;
|
||||||
}
|
}
|
||||||
typeRef.Name = newName;
|
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;
|
type.Name = newName;
|
||||||
|
|
Loading…
Reference in New Issue