Skip to content

Commit 89819b8

Browse files
authored
Merge fc1b6ae into f0d6304
2 parents f0d6304 + fc1b6ae commit 89819b8

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

Confuser.Renamer/BAML/BAMLAnalyzer.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,18 @@ void AddTypeSigReference(TypeSig typeSig, INameReference<IDnlibDef> reference) {
253253
foreach (ITypeDefOrRef type in typeSig.FindTypeRefs()) {
254254
TypeDef typeDef = type.ResolveTypeDefThrow();
255255
if (context.Modules.Contains((ModuleDefMD)typeDef.Module)) {
256-
service.ReduceRenameMode(typeDef, RenameMode.Letters);
257-
if (type is TypeRef)
258-
service.AddReference(typeDef, new TypeRefReference((TypeRef)type, typeDef));
259-
service.AddReference(typeDef, reference);
256+
AddDefReference(typeDef, reference);
257+
if (type is TypeRef typeRef)
258+
service.AddReference(typeDef, new TypeRefReference(typeRef, typeDef));
260259
}
261260
}
262261
}
263262

263+
void AddDefReference<T>(T def, INameReference<T> reference) where T : IDnlibDef {
264+
service.ReduceRenameMode(def, RenameMode.Letters);
265+
service.AddReference(def, reference);
266+
}
267+
264268
void ProcessBAMLElement(BamlElement root, BamlElement elem) {
265269
ProcessElementHeader(elem);
266270
ProcessElementBody(root, elem);
@@ -459,15 +463,13 @@ void ProcessConverter(PropertyWithConverterRecord rec, TypeDef type) {
459463
if (property != null) {
460464
var reference = new BAMLConverterMemberReference(xmlnsCtx, sig, property, rec);
461465
AddTypeSigReference(sig, reference);
462-
service.ReduceRenameMode(property, RenameMode.Letters);
463-
service.AddReference(property, reference);
466+
AddDefReference(property, reference);
464467
}
465468
FieldDef field = typeDef.FindField(cmdName);
466469
if (field != null) {
467470
var reference = new BAMLConverterMemberReference(xmlnsCtx, sig, field, rec);
468471
AddTypeSigReference(sig, reference);
469-
service.ReduceRenameMode(field, RenameMode.Letters);
470-
service.AddReference(field, reference);
472+
AddDefReference(field, reference);
471473
}
472474
if (property == null && field == null)
473475
context.Logger.WarnFormat("Could not resolve command '{0}' in '{1}'.", cmd, CurrentBAMLName);
@@ -609,11 +611,17 @@ void AnalyzePropertyPathProperty(PropertyPathPartUpdater part) {
609611
var typeName = part.GetTypeName();
610612
var propertyName = part.GetPropertyName();
611613
if (!string.IsNullOrWhiteSpace(typeName)) {
612-
var sig = ResolveType(typeName, out var prefix);
613-
if (sig != null && context.Modules.Contains((ModuleDefMD) sig.ToBasicTypeDefOrRef().ResolveTypeDefThrow().Module)) {
614-
var reference = new BAMLPathTypeReference(xmlnsCtx, sig, part);
614+
var sig = ResolveType(typeName, out _);
615+
var basicTypeDef = sig?.ToBasicTypeDefOrRef().ResolveTypeDef();
616+
if (!(basicTypeDef is null) && context.Modules.Contains(basicTypeDef.Module as ModuleDefMD)) {
617+
var propDef = basicTypeDef.FindPropertyCheckBaseType(propertyName);
618+
var reference = new BAMLPathTypeReference(xmlnsCtx, sig, propDef, part);
615619
AddTypeSigReference(sig, reference);
616-
return;
620+
621+
if (!(propDef is null)) {
622+
AddDefReference(propDef, reference);
623+
return; // Return to avoid blocking renaming of the property.
624+
}
617625
}
618626
}
619627

Confuser.Renamer/References/BAMLPathTypeReference.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
using dnlib.DotNet;
88

99
namespace Confuser.Renamer.References {
10-
internal sealed class BAMLPathTypeReference : INameReference<TypeDef> {
10+
internal sealed class BAMLPathTypeReference : INameReference<TypeDef>, INameReference<PropertyDef> {
1111
PropertyPathPartUpdater? PropertyInfo { get; }
1212
PropertyPathIndexUpdater? IndexerInfo { get; }
1313
private readonly TypeSig sig;
14+
readonly PropertyDef prop;
1415
private readonly BAMLAnalyzer.XmlNsContext xmlnsCtx;
1516

1617
public bool ShouldCancelRename => false;
@@ -26,8 +27,10 @@ private BAMLPathTypeReference(BAMLAnalyzer.XmlNsContext xmlnsCtx, TypeSig sig) {
2627
public BAMLPathTypeReference(BAMLAnalyzer.XmlNsContext xmlnsCtx, TypeSig sig, PropertyPathIndexUpdater indexerInfo) : this(xmlnsCtx, sig) =>
2728
IndexerInfo = indexerInfo;
2829

29-
public BAMLPathTypeReference(BAMLAnalyzer.XmlNsContext xmlnsCtx, TypeSig sig, PropertyPathPartUpdater propertyInfo) : this(xmlnsCtx, sig) =>
30+
public BAMLPathTypeReference(BAMLAnalyzer.XmlNsContext xmlnsCtx, TypeSig sig, PropertyDef property, PropertyPathPartUpdater propertyInfo) : this(xmlnsCtx, sig) {
3031
PropertyInfo = propertyInfo;
32+
prop = property;
33+
}
3134

3235
public bool UpdateNameReference(ConfuserContext context, INameService service) {
3336
string name = sig.ReflectionName;
@@ -43,7 +46,7 @@ public bool UpdateNameReference(ConfuserContext context, INameService service) {
4346
else {
4447
Debug.Assert(PropertyInfo != null, nameof(PropertyInfo) + " != null");
4548
var info = PropertyInfo.Value;
46-
var propertyName = info.GetPropertyName();
49+
var propertyName = prop?.Name ?? info.GetPropertyName();
4750
var newName = string.Format(CultureInfo.InvariantCulture, "({0}.{1})", name, propertyName);
4851
if (string.Equals(info.Name, newName, StringComparison.Ordinal)) return false;
4952
info.Name = newName;

0 commit comments

Comments
 (0)