diff --git a/Editor/Obfuscator.cs b/Editor/Obfuscator.cs index ca5656b..253c141 100644 --- a/Editor/Obfuscator.cs +++ b/Editor/Obfuscator.cs @@ -40,7 +40,7 @@ namespace Obfuz _assemblyCache = new AssemblyCache(new PathAssemblyResolver(options.AssemblySearchDirs.ToArray())); _obfuscateRuleConfig = new ObfuscateRuleConfig(); _obfuscateRuleConfig.LoadXmls(options.ObfuscationRuleFiles); - _renamePolicy = new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig); + _renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig)); //_nameMaker = new TestNameMaker(); _nameMaker = NameMakerFactory.CreateNameMakerBaseASCIICharSet(); diff --git a/Editor/Rename/CacheRenamePolicy.cs b/Editor/Rename/CacheRenamePolicy.cs new file mode 100644 index 0000000..a54ce2b --- /dev/null +++ b/Editor/Rename/CacheRenamePolicy.cs @@ -0,0 +1,88 @@ +using dnlib.DotNet; +using System.Collections.Generic; +using System.Linq; + +namespace Obfuz.Rename +{ + public class CacheRenamePolicy : RenamePolicyBase + { + private readonly IRenamePolicy _underlyingPolicy; + + private readonly Dictionary _computeCache = new Dictionary(); + + public CacheRenamePolicy(IRenamePolicy underlyingPolicy) + { + _underlyingPolicy = underlyingPolicy; + } + + public override bool NeedRename(ModuleDefMD mod) + { + if (!_computeCache.TryGetValue(mod, out var value)) + { + value = _underlyingPolicy.NeedRename(mod); + _computeCache.Add(mod, value); + } + return value; + } + + public override bool NeedRename(TypeDef typeDef) + { + if (!_computeCache.TryGetValue(typeDef, out var value)) + { + value = _underlyingPolicy.NeedRename(typeDef); + _computeCache[typeDef] = value; + } + return value; + } + + public override bool NeedRename(MethodDef methodDef) + { + if (!_computeCache.TryGetValue(methodDef, out var value)) + { + value = _underlyingPolicy.NeedRename(methodDef); + _computeCache[methodDef] = value; + } + return value; + } + + public override bool NeedRename(FieldDef fieldDef) + { + if (!_computeCache.TryGetValue(fieldDef, out var value)) + { + value = _underlyingPolicy.NeedRename(fieldDef); + _computeCache[fieldDef] = value; + } + return value; + } + + public override bool NeedRename(PropertyDef propertyDef) + { + if (!_computeCache.TryGetValue(propertyDef, out var value)) + { + value = _underlyingPolicy.NeedRename(propertyDef); + _computeCache[propertyDef] = value; + } + return value; + } + + public override bool NeedRename(EventDef eventDef) + { + if (!_computeCache.TryGetValue(eventDef, out var value)) + { + value = _underlyingPolicy.NeedRename(eventDef); + _computeCache[eventDef] = value; + } + return value; + } + + public override bool NeedRename(ParamDef paramDef) + { + if (!_computeCache.TryGetValue(paramDef, out var value)) + { + value = _underlyingPolicy.NeedRename(paramDef); + _computeCache[paramDef] = value; + } + return value; + } + } +} diff --git a/Editor/Rename/CombineRenamePolicy.cs b/Editor/Rename/CombineRenamePolicy.cs index ddbde8d..2151e29 100644 --- a/Editor/Rename/CombineRenamePolicy.cs +++ b/Editor/Rename/CombineRenamePolicy.cs @@ -6,6 +6,7 @@ namespace Obfuz.Rename public class CombineRenamePolicy : IRenamePolicy { private readonly IRenamePolicy[] _policies; + public CombineRenamePolicy(params IRenamePolicy[] policies) { _policies = policies;