Skip to content

Commit 4e90cb5

Browse files
authored
Merge branch 'main' into fix/base-types
2 parents eb6e3c4 + 9cea8d0 commit 4e90cb5

2 files changed

Lines changed: 36 additions & 25 deletions

File tree

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
namespace BitMono.Core.Analyzing;
22

3-
[SuppressMessage("ReSharper", "ConvertIfStatementToSwitchStatement")]
43
public class SpecificNamespaceCriticalAnalyzer : ICriticalAnalyzer<IMetadataMember>
54
{
65
private readonly ObfuscationSettings _obfuscationSettings;
@@ -10,35 +9,32 @@ public SpecificNamespaceCriticalAnalyzer(IOptions<ObfuscationSettings> obfuscati
109
_obfuscationSettings = obfuscation.Value;
1110
}
1211

13-
public bool NotCriticalToMakeChanges(IMetadataMember member)
12+
private static string? GetNamespace(IMetadataMember member)
1413
{
15-
if (_obfuscationSettings.SpecificNamespacesObfuscationOnly == false)
14+
if (member is TypeDefinition type)
1615
{
17-
return true;
16+
return type.Namespace?.Value;
1817
}
19-
20-
var specificNamespaces = _obfuscationSettings.SpecificNamespaces!;
21-
if (member is TypeDefinition type && type.HasNamespace())
18+
if (member is MethodDefinition method)
2219
{
23-
if (specificNamespaces.Any(s => s.Equals(type.Namespace?.Value)) == false)
24-
{
25-
return false;
26-
}
20+
return method.DeclaringType?.Namespace?.Value;
2721
}
28-
if (member is MethodDefinition method && method.DeclaringType?.HasNamespace() == true)
22+
if (member is FieldDefinition field)
2923
{
30-
if (specificNamespaces.Any(s => s.Equals(method.DeclaringType.Namespace?.Value)) == false)
31-
{
32-
return false;
33-
}
24+
return field.DeclaringType?.Namespace?.Value;
3425
}
35-
if (member is FieldDefinition field && field.DeclaringType?.HasNamespace() == true)
26+
return null;
27+
}
28+
29+
public bool NotCriticalToMakeChanges(IMetadataMember member)
30+
{
31+
if (!_obfuscationSettings.SpecificNamespacesObfuscationOnly)
3632
{
37-
if (specificNamespaces.Any(s => s.Equals(field.DeclaringType.Namespace?.Value)) == false)
38-
{
39-
return false;
40-
}
33+
return true;
4134
}
42-
return true;
35+
36+
string[] specificNamespaces = _obfuscationSettings.SpecificNamespaces!;
37+
string ns = GetNamespace(member) ?? string.Empty;
38+
return Array.IndexOf(specificNamespaces, ns) != -1;
4339
}
4440
}

src/BitMono.Core/Renaming/Renamer.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,52 @@ public string RenameUnsafely()
2828
var randomStringThree = strings[_randomNext(0, strings.Length - 1)];
2929
return $"{randomStringTwo} {randomStringOne}.{randomStringThree}";
3030
}
31+
32+
private bool ShouldRenameType(TypeDefinition? typeDefinition)
33+
{
34+
return typeDefinition == null || (_nameCriticalAnalyzer.NotCriticalToMakeChanges(typeDefinition) && !typeDefinition.IsExplicitLayout);
35+
}
36+
3137
public void Rename(IMetadataMember member)
3238
{
3339
if (member is TypeDefinition type)
3440
{
35-
if (_nameCriticalAnalyzer.NotCriticalToMakeChanges(type))
41+
if (ShouldRenameType(type) && ShouldRenameType(type.DeclaringType))
3642
{
3743
type.Name = RenameUnsafely();
3844
}
3945
}
4046
if (member is MethodDefinition method)
4147
{
42-
if (_nameCriticalAnalyzer.NotCriticalToMakeChanges(method))
48+
if (_nameCriticalAnalyzer.NotCriticalToMakeChanges(method) && ShouldRenameType(method.DeclaringType))
4349
{
4450
method.Name = RenameUnsafely();
4551
}
4652
}
4753
if (member is FieldDefinition field)
54+
{
55+
if (!field.IsCompilerGenerated() && ShouldRenameType(field.DeclaringType))
4856
{
4957
field.Name = RenameUnsafely();
58+
}
5059
}
5160
if (member is ParameterDefinition parameter)
61+
{
62+
if (!parameter.IsCompilerGenerated())
5263
{
5364
parameter.Name = RenameUnsafely();
65+
}
5466
}
5567
}
68+
5669
public void Rename(params IMetadataMember[] members)
5770
{
5871
for (var i = 0; i < members.Length; i++)
5972
{
6073
Rename(members[i]);
6174
}
6275
}
76+
6377
public void RemoveNamespace(IMetadataMember member)
6478
{
6579
if (member is TypeDefinition type)
@@ -87,8 +101,9 @@ public void RemoveNamespace(IMetadataMember member)
87101
}
88102
}
89103
}
104+
90105
public void RemoveNamespace(params IMetadataMember[] members)
91106
{
92107
members.ForEach(RemoveNamespace);
93108
}
94-
}
109+
}

0 commit comments

Comments
 (0)