Skip to content

Commit f01a010

Browse files
authored
Merge def577c into 45b3f02
2 parents 45b3f02 + def577c commit f01a010

File tree

13 files changed

+168
-5
lines changed

13 files changed

+168
-5
lines changed

Confuser.Renamer/Analyzers/VTableAnalyzer.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ static void CreateSiblingReference<T>(T basePropDef, ref T discoveredBaseMemberD
117117
if (discoveredBaseMemberDef is null)
118118
discoveredBaseMemberDef = basePropDef;
119119
else {
120-
var references = service.GetReferences(discoveredBaseMemberDef).OfType<MemberSiblingReference>().ToArray();
120+
var references = service.GetReferences(discoveredBaseMemberDef)
121+
.OfType<MemberSiblingReference>()
122+
.ToArray();
121123
if (references.Length > 0) {
122124
discoveredBaseMemberDef = (T)references[0].OldestSiblingDef;
123125
foreach (var siblingRef in references.Skip(1)) {
@@ -126,6 +128,9 @@ static void CreateSiblingReference<T>(T basePropDef, ref T discoveredBaseMemberD
126128
}
127129
}
128130

131+
// Check if the discovered base type is the current type. If so, nothing needs to be done.
132+
if (ReferenceEquals(basePropDef, discoveredBaseMemberDef)) return;
133+
129134
service.AddReference(basePropDef, new MemberSiblingReference(basePropDef, discoveredBaseMemberDef));
130135
UpdateOldestSiblingReference(discoveredBaseMemberDef, basePropDef, service);
131136
}

Confuser2.sln

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignatureMismatch2Helper",
9292
EndProject
9393
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignatureMismatch2.Test", "Tests\SignatureMismatch2.Test\SignatureMismatch2.Test.csproj", "{87BEF4D7-813E-48BA-96FE-E3A24BF2DC34}"
9494
EndProject
95-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncorrectRedirectToGac", "Tests\IncorrectRedirectToGac\IncorrectRedirectToGac.csproj", "{9B823D93-BF1B-407B-A4CD-231347F656AD}"
95+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IncorrectRedirectToGac", "Tests\IncorrectRedirectToGac\IncorrectRedirectToGac.csproj", "{9B823D93-BF1B-407B-A4CD-231347F656AD}"
9696
EndProject
97-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncorrectRedirectToGac.Test", "Tests\IncorrectRedirectToGac.Test\IncorrectRedirectToGac.Test.csproj", "{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2}"
97+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IncorrectRedirectToGac.Test", "Tests\IncorrectRedirectToGac.Test\IncorrectRedirectToGac.Test.csproj", "{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2}"
98+
EndProject
99+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "252_ComplexInterfaceRenaming", "Tests\252_ComplexInterfaceRenaming\252_ComplexInterfaceRenaming.csproj", "{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D}"
100+
EndProject
101+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "252_ComplexInterfaceRenaming.Test", "Tests\252_ComplexInterfaceRenaming.Test\252_ComplexInterfaceRenaming.Test.csproj", "{C10599E3-5A79-484F-940B-E4B61F256466}"
98102
EndProject
99103
Global
100104
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -258,6 +262,14 @@ Global
258262
{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
259263
{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
260264
{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2}.Release|Any CPU.Build.0 = Release|Any CPU
265+
{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
266+
{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
267+
{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
268+
{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D}.Release|Any CPU.Build.0 = Release|Any CPU
269+
{C10599E3-5A79-484F-940B-E4B61F256466}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
270+
{C10599E3-5A79-484F-940B-E4B61F256466}.Debug|Any CPU.Build.0 = Debug|Any CPU
271+
{C10599E3-5A79-484F-940B-E4B61F256466}.Release|Any CPU.ActiveCfg = Release|Any CPU
272+
{C10599E3-5A79-484F-940B-E4B61F256466}.Release|Any CPU.Build.0 = Release|Any CPU
261273
EndGlobalSection
262274
GlobalSection(SolutionProperties) = preSolution
263275
HideSolutionNode = FALSE
@@ -268,12 +280,12 @@ Global
268280
{73226E13-1701-424E-A4F2-3E4D575A1DD0} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
269281
{6A2BA6F7-3399-4890-9453-2D5BE8EEBBA9} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
270282
{3F5558BD-7B94-4CB0-A46C-A7252B5BCA17} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
283+
{E7F99164-F00F-4B2A-86A9-8EB5F659F34C} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
284+
{DEED6795-9EC9-4B2C-95E0-9E465DA61755} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
271285
{BA9D2748-1342-41A3-87F2-343E82D99813} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
272286
{30B8883F-A0A2-4256-ADCF-A790525D3696} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
273287
{211A4598-B46E-4CD3-BA5A-1EC259D4DB5A} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
274288
{6C8ECB51-EECE-49C3-89EC-CB0AAECCFF7E} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
275-
{E7F99164-F00F-4B2A-86A9-8EB5F659F34C} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
276-
{DEED6795-9EC9-4B2C-95E0-9E465DA61755} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
277289
{4B2CE997-8157-40B4-B42F-51CE33954AAC} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
278290
{40C6A1BB-69AA-4869-81EE-41917D0B009A} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
279291
{A1F54816-3FBA-4A71-9D26-D31C6BE9CF01} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
@@ -294,6 +306,8 @@ Global
294306
{87BEF4D7-813E-48BA-96FE-E3A24BF2DC34} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
295307
{9B823D93-BF1B-407B-A4CD-231347F656AD} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
296308
{B7FF0EE8-6C68-46C6-AADB-58C0E3309FB2} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
309+
{F233D36D-B64A-4F14-A9F9-B8557C2D4F5D} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
310+
{C10599E3-5A79-484F-940B-E4B61F256466} = {356BDB31-853E-43BB-8F9A-D8AC08F69EBB}
297311
EndGlobalSection
298312
GlobalSection(ExtensibilityGlobals) = postSolution
299313
SolutionGuid = {0D937D9E-E04B-4A68-B639-D4260473A388}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net461</TargetFramework>
5+
<RootNamespace>ComplexInterfaceRenaming.Test</RootNamespace>
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<ProjectReference Include="..\Confuser.UnitTest\Confuser.UnitTest.csproj" />
11+
<ProjectReference Include="..\252_ComplexInterfaceRenaming\252_ComplexInterfaceRenaming.csproj" />
12+
</ItemGroup>
13+
14+
</Project>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Confuser.Core;
5+
using Confuser.Core.Project;
6+
using Confuser.Renamer;
7+
using Confuser.UnitTest;
8+
using Xunit;
9+
using Xunit.Abstractions;
10+
11+
namespace ComplexInterfaceRenaming.Test {
12+
public class RenameComplexInterfaceTest : TestBase {
13+
public RenameComplexInterfaceTest(ITestOutputHelper outputHelper) : base(outputHelper) { }
14+
15+
[Theory]
16+
[MemberData(nameof(RenameDynamicTypeData))]
17+
[Trait("Category", "Protection")]
18+
[Trait("Protection", "rename")]
19+
[Trait("Issue", "https://github.com/mkaring/ConfuserEx/issues/161")]
20+
public async Task RenameComplexInterfaces(string renameMode, bool flatten) =>
21+
await Run(
22+
"252_ComplexInterfaceRenaming.exe",
23+
new[] {
24+
"Operator: I'm a operator.",
25+
"Operator(IOperator): I'm a operator.",
26+
"Operator(IName): I'm a operator.",
27+
"Manager: I'm a manager!",
28+
"Manager(IWorker): I'm a manager!",
29+
"Manager(IOperator): I'm a manager!",
30+
"Manager(IName): I'm a manager!",
31+
"Working: abc"
32+
},
33+
new SettingItem<Protection>("rename") {
34+
{ "mode", renameMode },
35+
{ "flatten", flatten.ToString() }
36+
},
37+
$"_{renameMode}_{flatten}"
38+
);
39+
40+
public static IEnumerable<object[]> RenameDynamicTypeData() {
41+
foreach (var renameMode in new[] { nameof(RenameMode.Unicode), nameof(RenameMode.ASCII), nameof(RenameMode.Letters), nameof(RenameMode.Debug), nameof(RenameMode.Retain) })
42+
foreach (var flatten in new[] { true, false })
43+
yield return new object[] { renameMode, flatten };
44+
}
45+
}
46+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net461</TargetFramework>
6+
<RootNamespace>ComplexInterfaceRenaming</RootNamespace>
7+
<StartupObject>ComplexInterfaceRenaming.Program</StartupObject>
8+
</PropertyGroup>
9+
10+
</Project>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace ComplexInterfaceRenaming {
2+
public interface IC {
3+
void C(string x);
4+
}
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace ComplexInterfaceRenaming {
2+
public interface IName {
3+
string Name { get; }
4+
}
5+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace ComplexInterfaceRenaming {
2+
public interface IOperator {
3+
string Name { get; }
4+
void Operate();
5+
}
6+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace ComplexInterfaceRenaming
2+
{
3+
public interface IWorker : IName, IC {}
4+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
3+
namespace ComplexInterfaceRenaming {
4+
internal sealed class Manager : Worker, IWorker, IOperator
5+
{
6+
public string Name => "I'm a manager!";
7+
8+
public void Operate() => throw new NotImplementedException();
9+
}
10+
}

0 commit comments

Comments
 (0)