Skip to content

Commit bd2477b

Browse files
authored
Merge e1d32df into b29ff42
2 parents b29ff42 + e1d32df commit bd2477b

File tree

15 files changed

+245
-13
lines changed

15 files changed

+245
-13
lines changed

Confuser.Renamer/Analyzers/VTableAnalyzer.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ public static void Analyze(INameService service, ICollection<ModuleDefMD> module
4040
else if (baseUnderCtrl && !ifaceUnderCtrl || !service.CanRename(slot.Overrides.MethodDef)) {
4141
service.SetCanRename(slot.MethodDef, false);
4242
}
43+
44+
// Now it is possible that the method implementing the interface, belongs to the base class.
45+
// If that happens the methods analyzing the methods will not pick up on this. We'll mark that
46+
// case here.
47+
if (!TypeEqualityComparer.Instance.Equals(slot.MethodDef.DeclaringType, type)) {
48+
SetupOverwriteReferences(service, modules, slot, type);
49+
//CreateOverrideReference(service, slot.MethodDef, slot.Overrides.MethodDef);
50+
}
4351
}
4452
}
4553
}
@@ -103,7 +111,7 @@ public static void Analyze(INameService service, ICollection<ModuleDefMD> module
103111
if (slot.Overrides == null)
104112
continue;
105113

106-
SetupOverwriteReferences(service, modules, slot, method.Module);
114+
SetupOverwriteReferences(service, modules, slot, method.DeclaringType);
107115
}
108116
}
109117
else if (!doesOverridePropertyOrEvent) {
@@ -258,7 +266,8 @@ private static void SetupSignatureReferences(INameService service, ICollection<M
258266
}
259267
}
260268

261-
private static void SetupOverwriteReferences(INameService service, ICollection<ModuleDefMD> modules, VTableSlot slot, ModuleDef module) {
269+
private static void SetupOverwriteReferences(INameService service, ICollection<ModuleDefMD> modules, VTableSlot slot, TypeDef thisType) {
270+
var module = thisType.Module;
262271
var methodDef = slot.MethodDef;
263272
var baseSlot = slot.Overrides;
264273
var baseMethodDef = baseSlot.MethodDef;
@@ -290,10 +299,15 @@ private static void SetupOverwriteReferences(INameService service, ICollection<M
290299
if (target is MemberRef methodRef)
291300
AddImportReference(service, modules, module, baseMethodDef, methodRef);
292301

293-
if (methodDef.Overrides.Any(impl => IsMatchingOverride(impl, target)))
294-
return;
302+
if (TypeEqualityComparer.Instance.Equals(methodDef.DeclaringType, thisType)) {
303+
if (methodDef.Overrides.Any(impl => IsMatchingOverride(impl, target)))
304+
return;
295305

296-
methodDef.Overrides.Add(new MethodOverride(methodDef, target));
306+
methodDef.Overrides.Add(new MethodOverride(methodDef, target));
307+
}
308+
else if (target is IMemberDef targetDef) {
309+
CreateOverrideReference(service, methodDef, targetDef);
310+
}
297311
}
298312

299313
private static bool IsMatchingOverride(MethodOverride methodOverride, IMethodDefOrRef targetMethod) {

Confuser2.sln

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "244_ClrProtection", "Tests\
111111
EndProject
112112
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "244_ClrProtection.Test", "Tests\244_ClrProtection.Test\244_ClrProtection.Test.csproj", "{3ADB8BB1-AE14-49DA-A7E1-1C0D9BEB76E9}"
113113
EndProject
114+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "306_ComplexClassStructureRename.Lib", "Tests\306_ComplexClassStructureRename.Lib\306_ComplexClassStructureRename.Lib.csproj", "{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}"
115+
EndProject
116+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "306_ComplexClassStructureRename", "Tests\306_ComplexClassStructureRename\306_ComplexClassStructureRename.csproj", "{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}"
117+
EndProject
118+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "306_ComplexClassStructureRename.Test", "Tests\306_ComplexClassStructureRename.Test\306_ComplexClassStructureRename.Test.csproj", "{13431429-2DB6-480F-B73F-CA019FE759E3}"
119+
EndProject
114120
Global
115121
GlobalSection(SolutionConfigurationPlatforms) = preSolution
116122
Debug|Any CPU = Debug|Any CPU
@@ -685,6 +691,42 @@ Global
685691
{3ADB8BB1-AE14-49DA-A7E1-1C0D9BEB76E9}.Release|x64.Build.0 = Release|Any CPU
686692
{3ADB8BB1-AE14-49DA-A7E1-1C0D9BEB76E9}.Release|x86.ActiveCfg = Release|Any CPU
687693
{3ADB8BB1-AE14-49DA-A7E1-1C0D9BEB76E9}.Release|x86.Build.0 = Release|Any CPU
694+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
695+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|Any CPU.Build.0 = Debug|Any CPU
696+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|x64.ActiveCfg = Debug|Any CPU
697+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|x64.Build.0 = Debug|Any CPU
698+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|x86.ActiveCfg = Debug|Any CPU
699+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Debug|x86.Build.0 = Debug|Any CPU
700+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|Any CPU.ActiveCfg = Release|Any CPU
701+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|Any CPU.Build.0 = Release|Any CPU
702+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|x64.ActiveCfg = Release|Any CPU
703+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|x64.Build.0 = Release|Any CPU
704+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|x86.ActiveCfg = Release|Any CPU
705+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35}.Release|x86.Build.0 = Release|Any CPU
706+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
707+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|Any CPU.Build.0 = Debug|Any CPU
708+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|x64.ActiveCfg = Debug|Any CPU
709+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|x64.Build.0 = Debug|Any CPU
710+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|x86.ActiveCfg = Debug|Any CPU
711+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Debug|x86.Build.0 = Debug|Any CPU
712+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|Any CPU.ActiveCfg = Release|Any CPU
713+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|Any CPU.Build.0 = Release|Any CPU
714+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|x64.ActiveCfg = Release|Any CPU
715+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|x64.Build.0 = Release|Any CPU
716+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|x86.ActiveCfg = Release|Any CPU
717+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16}.Release|x86.Build.0 = Release|Any CPU
718+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
719+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
720+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|x64.ActiveCfg = Debug|Any CPU
721+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|x64.Build.0 = Debug|Any CPU
722+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|x86.ActiveCfg = Debug|Any CPU
723+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Debug|x86.Build.0 = Debug|Any CPU
724+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
725+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|Any CPU.Build.0 = Release|Any CPU
726+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|x64.ActiveCfg = Release|Any CPU
727+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|x64.Build.0 = Release|Any CPU
728+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|x86.ActiveCfg = Release|Any CPU
729+
{13431429-2DB6-480F-B73F-CA019FE759E3}.Release|x86.Build.0 = Release|Any CPU
688730
EndGlobalSection
689731
GlobalSection(SolutionProperties) = preSolution
690732
HideSolutionNode = FALSE
@@ -729,6 +771,9 @@ Global
729771
{2C059FE7-C868-4C6D-AFA0-D62BA3C1B2E1} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
730772
{73F11EE8-F565-479E-8366-BD74EE467CE8} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
731773
{3ADB8BB1-AE14-49DA-A7E1-1C0D9BEB76E9} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
774+
{FD93D181-2EC5-4863-8A8F-5F8C84C06B35} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
775+
{1B52A3D9-014C-4CBF-BB98-09080D9A8D16} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
776+
{13431429-2DB6-480F-B73F-CA019FE759E3} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
732777
EndGlobalSection
733778
GlobalSection(ExtensibilityGlobals) = postSolution
734779
SolutionGuid = {0D937D9E-E04B-4A68-B639-D4260473A388}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net461</TargetFramework>
5+
<RootNamespace>ComplexClassStructureRename.Lib</RootNamespace>
6+
</PropertyGroup>
7+
8+
</Project>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace ComplexClassStructureRename.Lib {
2+
public interface ITestEvents {
3+
void FireLog(string message);
4+
}
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace ComplexClassStructureRename.Lib {
2+
internal class InternalBaseClass {
3+
public virtual void FireLog(string message) { }
4+
}
5+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System;
2+
3+
namespace ComplexClassStructureRename.Lib {
4+
internal class InternalClass1 : InternalBaseClass {
5+
public new void FireLog(string message) =>
6+
Console.WriteLine("InternalClass1: " + message);
7+
}
8+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
namespace ComplexClassStructureRename.Lib {
2+
internal class InternalClass2 : InternalBaseClass, ITestEvents { }
3+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace ComplexClassStructureRename.Lib {
2+
internal class MyTest {
3+
readonly InternalClass1 _test1 = new InternalClass1();
4+
readonly InternalClass2 _test2 = new InternalClass2();
5+
6+
public void Test() {
7+
_test1.FireLog("test1 Hello");
8+
_test2.FireLog("test2 Hello");
9+
}
10+
11+
}
12+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Reflection;
2+
3+
namespace ComplexClassStructureRename.Lib {
4+
[Obfuscation(Exclude = false, Feature = "-rename")]
5+
public class PublicClass1 : ITestEvents {
6+
public void FireLog(string message) { }
7+
}
8+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Reflection;
2+
3+
namespace ComplexClassStructureRename.Lib {
4+
[Obfuscation(Exclude = false, Feature = "-rename")]
5+
public class PublicClass2 {
6+
readonly MyTest _test = new MyTest();
7+
8+
public void Test() => _test.Test();
9+
}
10+
}

0 commit comments

Comments
 (0)