From ab4b9492caeeac96168abe45f21fb0053753a6ba Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 27 Jul 2016 20:54:30 +0900 Subject: [PATCH] FixNameCollisions: do not rename non-private fields; handle explicit interface implementations. --- .../CSharp/Transforms/FixNameCollisions.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs b/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs index 076c700de..845a79bb1 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs @@ -37,16 +37,19 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms { var renamedSymbols = new Dictionary(); foreach (var typeDecl in rootNode.DescendantsAndSelf.OfType()) { - var memberNames = typeDecl.Members.Select(m => m.Name).ToHashSet(); + var memberNames = typeDecl.Members.Select(m => { + var type = m.GetChildByRole(EntityDeclaration.PrivateImplementationTypeRole); + return type.IsNull ? m.Name : type + "." + m.Name; + }).ToHashSet(); // memberNames does not include fields or non-custom events because those // don't have a single name, but a list of VariableInitializers. foreach (var fieldDecl in typeDecl.Members.OfType()) { if (fieldDecl.Variables.Count != 1) continue; string oldName = fieldDecl.Variables.Single().Name; - if (memberNames.Contains(oldName)) { + ISymbol symbol = fieldDecl.GetSymbol(); + if (memberNames.Contains(oldName) && ((IField)symbol).IsPrivate) { string newName = PickNewName(memberNames, oldName); - ISymbol symbol = fieldDecl.GetSymbol(); if (symbol != null) { fieldDecl.Variables.Single().Name = newName; renamedSymbols[symbol] = newName;