[mono-api-info] Take into account parameters when sorting properties.
authorRolf Bjarne Kvinge <rolf@xamarin.com>
Thu, 19 Nov 2015 09:00:20 +0000 (10:00 +0100)
committerRolf Bjarne Kvinge <rolf@xamarin.com>
Thu, 19 Nov 2015 09:28:38 +0000 (10:28 +0100)
mcs/tools/corcompare/mono-api-info.cs

index 5a21d52f1134e133c1ef8792f9ddf7f6fe9b225e..42f28d979c2e3b449a78b473b365c1c92420327b 100644 (file)
@@ -483,7 +483,7 @@ namespace CorCompare
 
                                PropertyDefinition[] properties = GetProperties (type);
                                if (properties.Length > 0) {
-                                       Array.Sort (properties, MemberReferenceComparer.Default);
+                                       Array.Sort (properties, PropertyDefinitionComparer.Default);
                                        members.Add (new PropertyData (document, nclass, properties));
                                }
 
@@ -1395,6 +1395,29 @@ namespace CorCompare
                }
        }
 
+       class PropertyDefinitionComparer : IComparer<PropertyDefinition>
+       {
+               public static PropertyDefinitionComparer Default = new PropertyDefinitionComparer ();
+
+               public int Compare (PropertyDefinition ma, PropertyDefinition mb)
+               {
+                       int res = String.Compare (ma.Name, mb.Name);
+                       if (res != 0)
+                               return res;
+
+                       if (!ma.HasParameters && !mb.HasParameters)
+                               return 0;
+
+                       if (!ma.HasParameters)
+                               return -1;
+
+                       if (!mb.HasParameters)
+                               return 1;
+
+                       return MethodDefinitionComparer.Compare (ma.Parameters, mb.Parameters);
+               }
+       }
+
        class MethodDefinitionComparer : IComparer
        {
                public static MethodDefinitionComparer Default = new MethodDefinitionComparer ();
@@ -1416,9 +1439,12 @@ namespace CorCompare
                        if (!mb.HasParameters)
                                return 1;
 
-                       IList<ParameterDefinition> pia = ma.Parameters ;
-                       IList<ParameterDefinition> pib = mb.Parameters;
-                       res = pia.Count - pib.Count;
+                       return Compare (ma.Parameters, mb.Parameters);
+               }
+
+               public static int Compare (IList<ParameterDefinition> pia, IList<ParameterDefinition> pib)
+               {
+                       var res = pia.Count - pib.Count;
                        if (res != 0)
                                return res;