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(); + } + } } } 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