From: Marek Safar Date: Thu, 11 Aug 2016 16:05:51 +0000 (+0200) Subject: [corcompare] Use only C# known parameter type attributes for methods signatures X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=c37bbef8f0acae10a6df43c805459cb2b3d2ad51;p=mono.git [corcompare] Use only C# known parameter type attributes for methods signatures --- diff --git a/mcs/tools/corcompare/mono-api-info.cs b/mcs/tools/corcompare/mono-api-info.cs index dd48a6f05b1..0e665fe7f5b 100644 --- a/mcs/tools/corcompare/mono-api-info.cs +++ b/mcs/tools/corcompare/mono-api-info.cs @@ -761,8 +761,8 @@ namespace CorCompare method.Name = "~" + name; } - // TODO: Better check - if (t != type && list.Any (l => l.DeclaringType != method.DeclaringType && l.Name == method.Name && l.Parameters.Count == method.Parameters.Count)) + if (t != type && list.Any (l => l.DeclaringType != method.DeclaringType && l.Name == method.Name && l.Parameters.Count == method.Parameters.Count && + l.Parameters.SequenceEqual (method.Parameters, new ParameterComparer ()))) continue; list.Add (method); @@ -771,7 +771,7 @@ namespace CorCompare if (!fullAPI) break; - if (!t.IsInterface || t.IsEnum) + if (t.IsInterface || t.IsEnum) break; if (t.BaseType == null || t.BaseType.FullName == "System.Object") @@ -784,6 +784,19 @@ namespace CorCompare return list.ToArray (); } + sealed class ParameterComparer : IEqualityComparer + { + public bool Equals (ParameterDefinition x, ParameterDefinition y) + { + return x.ParameterType.Name == y.ParameterType.Name; + } + + public int GetHashCode (ParameterDefinition obj) + { + return obj.ParameterType.Name.GetHashCode (); + } + } + static bool IsFinalizer (MethodDefinition method) { if (method.Name != "Finalize") @@ -1518,15 +1531,13 @@ namespace CorCompare ParameterDefinition info = infos [i]; - string modifier; - if ((info.Attributes & ParameterAttributes.In) != 0) - modifier = "in"; - else if ((info.Attributes & ParameterAttributes.Out) != 0) - modifier = "out"; - else - modifier = string.Empty; + if (info.ParameterType.IsByReference) { + string modifier; + if ((info.Attributes & (ParameterAttributes.Out | ParameterAttributes.In)) == ParameterAttributes.Out) + modifier = "out"; + else + modifier = "ref"; - if (modifier.Length > 0) { signature.Append (modifier); signature.Append (" "); } diff --git a/mcs/tools/corcompare/mono-api-info.csproj b/mcs/tools/corcompare/mono-api-info.csproj index 6d926858c97..bb93b0e0619 100644 --- a/mcs/tools/corcompare/mono-api-info.csproj +++ b/mcs/tools/corcompare/mono-api-info.csproj @@ -1,37 +1,15 @@  - + Debug AnyCPU - 8.0.30703 - 2.0 - {6446D5E1-8F4E-4692-8EF3-B1D4CA290ECF} + {804E854F-E8F5-4E2B-807A-4FAF4BE99C03} Exe mono_api_info mono-api-info - v4.0 - 512 - - - - - 3.5 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - + v4.5 + 8.0.30703 + 2.0 true @@ -55,6 +33,9 @@ + + ..\..\class\lib\net_4_x\Mono.Cecil.dll + @@ -65,18 +46,6 @@ Options.cs - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - - - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - - \ No newline at end of file