From d7d35813e83be2e5d997fc782a746937a80196a6 Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Mon, 25 Nov 2019 12:45:39 +0100 Subject: [PATCH 1/2] Reproduce base class having method with different arguments --- .../Method_modifiers.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/PublicApiGeneratorTests/Method_modifiers.cs b/src/PublicApiGeneratorTests/Method_modifiers.cs index 09141a5..bcc6ea8 100644 --- a/src/PublicApiGeneratorTests/Method_modifiers.cs +++ b/src/PublicApiGeneratorTests/Method_modifiers.cs @@ -299,6 +299,20 @@ public class ClassWithPublicMethodHiding : PublicApiGeneratorTests.Examples.Clas }"); } + [Fact] + public void Should_not_output_new_when_base_differs_in_parameters() + { + AssertPublicApi( + @"namespace PublicApiGeneratorTests.Examples +{ + public class ClassWithBaseMethodConstraint : PublicApiGeneratorTests.Examples.ClassWithBaseMethod + { + public ClassWithBaseMethodConstraint() { } + public void SomeMethod(PublicApiGeneratorTests.Examples.ClassWithBaseMethodConstraint input1, PublicApiGeneratorTests.Examples.ClassWithBaseMethodConstraint input2) { } + } +}"); + } + [Fact] public void Should_output_unsafe_modifier() { @@ -547,6 +561,20 @@ public new ClassWithMethodExtensions Extend(string parameter) return this; } } + + public class ClassWithBaseMethod + { + public void SomeMethod(ClassWithBaseMethod input1, ClassWithBaseMethod input2) + { + } + } + + public class ClassWithBaseMethodConstraint: ClassWithBaseMethod + { + public void SomeMethod(ClassWithBaseMethodConstraint input1, ClassWithBaseMethodConstraint input2) + { + } + } } // ReSharper restore ClassWithVirtualMembersNeverInherited.Global // ReSharper restore RedundantOverridenMember From 02c13f7342bb70560671a2b53abf763489d15bbf Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Mon, 25 Nov 2019 12:46:16 +0100 Subject: [PATCH 2/2] Fix parameter comparison --- src/PublicApiGenerator/MethodNameBuilder.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/PublicApiGenerator/MethodNameBuilder.cs b/src/PublicApiGenerator/MethodNameBuilder.cs index c94d9d6..3701616 100644 --- a/src/PublicApiGenerator/MethodNameBuilder.cs +++ b/src/PublicApiGenerator/MethodNameBuilder.cs @@ -1,5 +1,7 @@ using System; using System.CodeDom; +using System.Collections.Generic; +using System.Linq; using Mono.Cecil; namespace PublicApiGenerator @@ -18,10 +20,24 @@ public static class MethodNameBuilder var isNew = methodDefinition.IsNew(typeDef => typeDef?.Methods, e => e.Name.Equals(methodDefinition.Name, StringComparison.Ordinal) && - e.Parameters.Count == methodDefinition.Parameters.Count); + e.Parameters.Count == methodDefinition.Parameters.Count && + e.Parameters.SequenceEqual(methodDefinition.Parameters, new ParameterTypeComparer())); return ModifierMarkerNameBuilder.Build(methodDefinition, attributes, isNew, name, CodeNormalizer.MethodModifierMarkerTemplate); } + + class ParameterTypeComparer : IEqualityComparer + { + public bool Equals(ParameterDefinition x, ParameterDefinition y) + { + return x?.ParameterType == y?.ParameterType; + } + + public int GetHashCode(ParameterDefinition obj) + { + return obj.GetHashCode(); + } + } } }