[mono-api-html] New interface members are only breaking if the interface existed.
authorRolf Bjarne Kvinge <rolf@xamarin.com>
Thu, 28 Jan 2016 14:55:33 +0000 (15:55 +0100)
committerRolf Bjarne Kvinge <rolf@xamarin.com>
Thu, 28 Jan 2016 14:55:58 +0000 (15:55 +0100)
mcs/tools/corcompare/mono-api-html/AssemblyComparer.cs
mcs/tools/corcompare/mono-api-html/ClassComparer.cs
mcs/tools/corcompare/mono-api-html/Comparer.cs
mcs/tools/corcompare/mono-api-html/MemberComparer.cs
mcs/tools/corcompare/mono-api-html/NamespaceComparer.cs

index ff5326d9c8b083d253fc422c48db45e90a1ca2b3..adbd862eb923bcba7c67f3a792b30862d6c78234 100644 (file)
@@ -57,7 +57,7 @@ namespace Xamarin.ApiDiff {
                        State.Assembly = current.GetAttribute ("name");
                }
 
-               public override void Added (XElement target)
+               public override void Added (XElement target, bool wasParentAdded)
                {
                        // one assembly per xml file
                }
index 1e19ab4b38efbc79a5a3d20ec1ee5d8fd5105bbf..a3399fbef04e5b731cfeb8277176f2a0705752e5 100644 (file)
@@ -67,7 +67,7 @@ namespace Xamarin.ApiDiff {
                        Compare (s.Elements ("class"), t.Elements ("class"));
                }
 
-               public override void Added (XElement target)
+               public override void Added (XElement target, bool wasParentAdded)
                {
                        string name = target.Attribute ("name").Value;
                        if (State.IgnoreNew.Any (re => re.IsMatch (name)))
@@ -151,7 +151,7 @@ namespace Xamarin.ApiDiff {
                        if (t != null) {
                                Indent ().WriteLine ("\t// constructors");
                                foreach (var ctor in t.Elements ("constructor"))
-                                       ccomparer.Added (ctor);
+                                       ccomparer.Added (ctor, true);
                        }
 
                        t = target.Element ("fields");
@@ -161,28 +161,28 @@ namespace Xamarin.ApiDiff {
                                else
                                        SetContext (target);
                                foreach (var field in t.Elements ("field"))
-                                       fcomparer.Added (field);
+                                       fcomparer.Added (field, true);
                        }
 
                        t = target.Element ("properties");
                        if (t != null) {
                                Indent ().WriteLine ("\t// properties");
                                foreach (var property in t.Elements ("property"))
-                                       pcomparer.Added (property);
+                                       pcomparer.Added (property, true);
                        }
 
                        t = target.Element ("events");
                        if (t != null) {
                                Indent ().WriteLine ("\t// events");
                                foreach (var evnt in t.Elements ("event"))
-                                       ecomparer.Added (evnt);
+                                       ecomparer.Added (evnt, true);
                        }
 
                        t = target.Element ("methods");
                        if (t != null) {
                                Indent ().WriteLine ("\t// methods");
                                foreach (var method in t.Elements ("method"))
-                                       mcomparer.Added (method);
+                                       mcomparer.Added (method, true);
                        }
 
                        t = target.Element ("classes");
index 8c692a03a9a47c2d3feab700bf81997ff3cc692e..4210b9b95fbbd367742923889c93dd94d307c853 100644 (file)
@@ -48,7 +48,7 @@ namespace Xamarin.ApiDiff {
                        return State.Output;
                }
 
-               public abstract void Added (XElement target);
+               public abstract void Added (XElement target, bool wasParentAdded);
                public abstract void Modified (XElement source, XElement target, ApiChanges changes);
                public abstract void Removed (XElement source);
 
@@ -90,7 +90,7 @@ namespace Xamarin.ApiDiff {
                        if (target != null) {
                                foreach (var item in target) {
                                        SetContext (item);
-                                       Added (item);
+                                       Added (item, false);
                                }
                        }
                }
index 4d703dc0618fb0d0e4d5824b3abfe029eb1c32bd..d12d86625c2ea7a0af1b5d4bbb8067bd32ed04e1 100644 (file)
@@ -129,7 +129,7 @@ namespace Xamarin.ApiDiff {
                                        BeforeAdding (elements);
                                        a = true;
                                }
-                               Added (item);
+                               Added (item, false);
                        }
                        if (a)
                                AfterAdding ();
@@ -204,14 +204,14 @@ namespace Xamarin.ApiDiff {
                        Output.WriteLine ("<pre>");
                }
 
-               public override void Added (XElement target)
+               public override void Added (XElement target, bool wasParentAdded)
                {
                        var o = GetObsoleteMessage (target);
                        if (!first && (o.Length > 0))
                                Output.WriteLine ();
                        Indent ();
-                       bool isInterface = IsInInterface (target);
-                       Output.Write ("\t<span class='added added-{0} {1}' {2}>", ElementName, isInterface ? "breaking" : string.Empty, isInterface ? "data-is-breaking" : "data-is-non-breaking");
+                       bool isInterfaceBreakingChange = !wasParentAdded && IsInInterface (target);
+                       Output.Write ("\t<span class='added added-{0} {1}' {2}>", ElementName, isInterfaceBreakingChange ? "breaking" : string.Empty, isInterfaceBreakingChange ? "data-is-breaking" : "data-is-non-breaking");
                        Output.Write ("{0}{1}", o, GetDescription (target));
                        Output.WriteLine ("</span>");
                        first = false;
index 746166e0a642042f2916655984610e9fa01fcba2..063e34ecbf7f5c74ccdef96f6f283ba3d996f889 100644 (file)
@@ -55,7 +55,7 @@ namespace Xamarin.ApiDiff {
                        State.Namespace = current.Attribute ("name").Value;
                }
 
-               public override void Added (XElement target)
+               public override void Added (XElement target, bool wasParentAdded)
                {
                        string name = target.Attribute ("name").Value;
                        if (State.IgnoreNew.Any (re => re.IsMatch (name)))
@@ -66,7 +66,7 @@ namespace Xamarin.ApiDiff {
                        Output.WriteLine ();
                        // list all new types
                        foreach (var addedType in target.Element ("classes").Elements ("class"))
-                               comparer.Added (addedType);
+                               comparer.Added (addedType, true);
                        Output.WriteLine ("</div> <!-- end namespace {0} -->", name);
                        Output.WriteLine ();
                }