@@ -33,11 +33,11 @@ public static void Analyze(INameService service, ICollection<ModuleDefMD> module
3333 // derived type. If the base type/interface is not in our control, we should
3434 // not rename the methods.
3535 bool baseUnderCtrl = modules . Contains ( slot . MethodDef . DeclaringType . Module as ModuleDefMD ) ;
36- bool ifaceUnderCtrl = modules . Contains ( slot . Overrides . MethodDef . DeclaringType . Module as ModuleDefMD ) ;
37- if ( ( ! baseUnderCtrl && ifaceUnderCtrl ) || ! service . CanRename ( slot . MethodDef ) ) {
36+ bool interfaceUnderCtrl = modules . Contains ( slot . Overrides . MethodDef . DeclaringType . Module as ModuleDefMD ) ;
37+ if ( ! baseUnderCtrl && interfaceUnderCtrl || ! service . CanRename ( slot . MethodDef ) ) {
3838 service . SetCanRename ( slot . Overrides . MethodDef , false ) ;
3939 }
40- else if ( baseUnderCtrl && ! ifaceUnderCtrl || ! service . CanRename ( slot . Overrides . MethodDef ) ) {
40+ else if ( ( baseUnderCtrl && ! interfaceUnderCtrl ) || ( ! service . CanRename ( slot . Overrides . MethodDef ) ) ) {
4141 service . SetCanRename ( slot . MethodDef , false ) ;
4242 }
4343
@@ -48,6 +48,17 @@ public static void Analyze(INameService service, ICollection<ModuleDefMD> module
4848 SetupOverwriteReferences ( service , modules , slot , type ) ;
4949 //CreateOverrideReference(service, slot.MethodDef, slot.Overrides.MethodDef);
5050 }
51+
52+ // For the case when method in base type implements an interface method for a derived type
53+ // do not consider method parameters to make method name the same in base type, derived type and interface
54+ var methodDef = slot . MethodDef ;
55+ var typeDef = type . BaseType ? . ResolveTypeDef ( ) ;
56+ var baseMethod = typeDef ? . FindMethod ( methodDef . Name , methodDef . Signature as MethodSig ) ;
57+ if ( baseMethod != null ) {
58+ string unifiedName = service . GetOriginalFullName ( slot . Overrides . MethodDef ) ;
59+ service . SetOriginalName ( slot . MethodDef , unifiedName ) ;
60+ service . SetOriginalName ( baseMethod , unifiedName ) ;
61+ }
5162 }
5263 }
5364 }
@@ -215,7 +226,7 @@ private static IEnumerable<MethodDef> FindBaseDeclarations(INameService service,
215226 unprocessed . Enqueue ( slot . Overrides . MethodDef ) ;
216227 slotsExists = true ;
217228 }
218-
229+
219230 if ( ! slotsExists && method != currentMethod )
220231 yield return currentMethod ;
221232 }
@@ -320,7 +331,7 @@ private static bool IsMatchingOverride(MethodOverride methodOverride, IMethodDef
320331
321332 var targetMethodSig = targetMethod . MethodSig ;
322333 var overrideMethodSig = methodOverride . MethodDeclaration . MethodSig ;
323-
334+
324335 targetMethodSig = ResolveGenericSignature ( targetMethod , targetMethodSig ) ;
325336 overrideMethodSig = ResolveGenericSignature ( methodOverride . MethodDeclaration , overrideMethodSig ) ;
326337
0 commit comments