diff --git a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj
index c9c9705..b606e5e 100644
--- a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj
+++ b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj
@@ -4,7 +4,7 @@
latest
true
- 0.2.5
+ 0.2.6
git
https://github.com/NuclearPowered/Reactor.OxygenFilter
LGPL-3.0-or-later
diff --git a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs
index cb09524..e15fb8a 100644
--- a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs
+++ b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs
@@ -229,7 +229,8 @@ namespace Reactor.OxygenFilter.MSBuild
}
// get same method from obfuscated assembly
- MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated);
+ var signature = deobfuscatedCall.GetSignature(t => GetObfuscated(t) ?? t.FullName);
+ MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated && x.GetSignature() == signature);
// obfuscate generics
if (deobfuscatedCallReference is GenericInstanceMethod generic)
diff --git a/Reactor.OxygenFilter/Extensions.cs b/Reactor.OxygenFilter/Extensions.cs
index 33dfcca..284366c 100644
--- a/Reactor.OxygenFilter/Extensions.cs
+++ b/Reactor.OxygenFilter/Extensions.cs
@@ -1,3 +1,4 @@
+using System;
using System.Linq;
using System.Text;
using Mono.Cecil;
@@ -11,11 +12,29 @@ namespace Reactor.OxygenFilter
return text.Length == 11 && text.All(char.IsUpper);
}
- public static string GetSignature(this MethodDefinition methodDefinition)
+ public static string GetSignature(this MethodDefinition methodDefinition, Func map = null)
{
+ map ??= provider => provider.FullName;
+
+ string MapIfResolved(TypeReference typeReference)
+ {
+ TypeDefinition resolved = null;
+
+ try
+ {
+ resolved = typeReference.Resolve();
+ }
+ catch
+ {
+ // ignored
+ }
+
+ return resolved != null ? map(resolved) : typeReference.FullName;
+ }
+
var sb = new StringBuilder();
- sb.Append(methodDefinition.ReturnType.FullName);
+ sb.Append(MapIfResolved(methodDefinition.ReturnType));
sb.Append(" ");
sb.Append("(");
@@ -31,7 +50,7 @@ namespace Reactor.OxygenFilter
if (parameterType is SentinelType)
sb.Append("...,");
- sb.Append(parameterType.FullName);
+ sb.Append(MapIfResolved(parameterType));
}
}