X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Ftools%2Fcorcompare%2Fmono-api-diff.cs;h=322e4c883b7ddc56ac39c62c9c19695b2180587c;hb=bb60f239b79517b207e3e572e6db4c32e48b4fb7;hp=2a44722c9524913d84dc3c268c8055f25e7e25bc;hpb=9d94ef745654af93546b585ab66b3f2638defdcb;p=mono.git diff --git a/mcs/tools/corcompare/mono-api-diff.cs b/mcs/tools/corcompare/mono-api-diff.cs index 2a44722c952..322e4c883b7 100644 --- a/mcs/tools/corcompare/mono-api-diff.cs +++ b/mcs/tools/corcompare/mono-api-diff.cs @@ -4,10 +4,13 @@ // // Authors: // Gonzalo Paniagua Javier (gonzalo@ximian.com) -// Marek Safar (marek.safar@gmail.com) +// Marek Safar (marek.safar@gmail.com) // -// (C) 2003 Novell, Inc (http://www.novell.com) +// Maintainer: +// C.J. Adams-Collier (cjac@colliertech.org) // +// (C) 2003 Novell, Inc (http://www.novell.com) +// (C) 2009,2010 Collier Technologies (http://www.colliertech.org) using System; using System.Collections; @@ -22,8 +25,10 @@ namespace Mono.AssemblyCompare { static int Main (string [] args) { - if (args.Length != 2) + if (args.Length != 2) { + Console.WriteLine ("Usage: mono mono-api-diff.exe "); return 1; + } XMLAssembly ms = CreateXMLAssembly (args [0]); XMLAssembly mono = CreateXMLAssembly (args [1]); @@ -178,6 +183,15 @@ namespace Mono.AssemblyCompare return (object []) list.ToArray (type); } + public static bool IsMeaninglessAttribute (string s) + { + if (s == null) + return false; + if (s == "System.Runtime.CompilerServices.CompilerGeneratedAttribute") + return true; + return false; + } + public static bool IsMonoTODOAttribute (string s) { if (s == null) @@ -281,14 +295,14 @@ namespace Mono.AssemblyCompare public bool HaveWarnings { get { return haveWarnings; } } - + public Counters Counters { get { return counters; } } - + public abstract void CompareTo (XmlDocument doc, XmlNode parent, object other); } - + abstract class XMLNameGroup : XMLData { protected XmlNode group; @@ -516,7 +530,7 @@ namespace Mono.AssemblyCompare this.document = doc; XmlNode parent = doc.CreateElement ("assemblies", null); doc.AppendChild (parent); - + CompareTo (doc, parent, other); XmlNode decl = doc.CreateXmlDeclaration ("1.0", null, null); @@ -646,7 +660,7 @@ namespace Mono.AssemblyCompare XMLEvents events; XMLMethods methods; XMLClass [] nested; - + public override void LoadData (XmlNode node) { if (node == null) @@ -680,7 +694,7 @@ namespace Mono.AssemblyCompare // Console.Error.WriteLine ("Empty class {0} {1}", name, type); return; } - + if (child.Name == "attributes") { attributes = new XMLAttributes (); attributes.LoadData (child); @@ -729,6 +743,12 @@ namespace Mono.AssemblyCompare child = child.NextSibling; } + if (child != null && child.Name == "generic-parameters") { + // HACK: ignore this tag as it doesn't seem to + // add any value when checking for differences + return; + } + if (child == null) return; @@ -887,6 +907,7 @@ namespace Mono.AssemblyCompare node = document.CreateElement ("class", null); newNodes.Add (node); AddAttribute (node, "name", c.Name); + AddAttribute (node, "type", c.Type); AddExtra (node); counters.Extra++; counters.ExtraTotal++; @@ -969,9 +990,12 @@ namespace Mono.AssemblyCompare XMLParameter oparm = (XMLParameter) other; + if (name != oparm.name) + AddWarning (parent, "Parameter name is wrong: {0} != {1}", name, oparm.name); + if (type != oparm.type) AddWarning (parent, "Parameter type is wrong: {0} != {1}", type, oparm.type); - + if (attrib != oparm.attrib) AddWarning (parent, "Parameter attributes wrong: {0} != {1}", attrib, oparm.attrib); @@ -1077,7 +1101,7 @@ namespace Mono.AssemblyCompare if (de.Value.Equals (other_value)) continue; - AddWarning (parent, "Property '{0}' is '{1}' and should be '{2}'", + AddWarning (parent, "Property '{0}' is '{1}' and should be '{2}'", de.Key, de.Value, other_value == null ? "null" : other_value); } } @@ -1114,7 +1138,7 @@ namespace Mono.AssemblyCompare return false; } - return true; + return !IsMeaninglessAttribute (value); } protected override void CompareToInner (string name, XmlNode node, XMLNameGroup other) @@ -1132,7 +1156,7 @@ namespace Mono.AssemblyCompare { string key = null; - // if multiple attributes with the same name (type) exist, then we + // if multiple attributes with the same name (type) exist, then we // cannot be sure which attributes correspond, so we must use the // name of the attribute (type) and the name/value of its properties // as key @@ -1151,7 +1175,7 @@ namespace Mono.AssemblyCompare } } - // sort properties by name, as order of properties in XML is + // sort properties by name, as order of properties in XML is // undefined keyParts.Sort (); @@ -1270,7 +1294,7 @@ namespace Mono.AssemblyCompare XmlAttribute xatt = node.Attributes ["attrib"]; if (xatt != null) access [name] = xatt.Value; - + XmlNode orig = node; node = node.FirstChild; @@ -1340,7 +1364,7 @@ namespace Mono.AssemblyCompare return null; } } - + class XMLFields : XMLMember { Hashtable fieldTypes; @@ -1543,9 +1567,11 @@ namespace Mono.AssemblyCompare public override string GetNodeKey (string name, XmlNode node) { XmlAttributeCollection atts = node.Attributes; - return String.Format ("{0}:{1}:{2}", atts ["name"].Value, - atts ["ptype"].Value, - atts ["params"].Value); + return String.Format ("{0}:{1}:{2}", + (atts["name"] != null ? atts["name"].Value : ""), + (atts["ptype"] != null ? atts["ptype"].Value : ""), + (atts["params"] != null ? atts["params"].Value : "") + ); } public override string GroupName { @@ -1560,6 +1586,7 @@ namespace Mono.AssemblyCompare class XMLEvents : XMLMember { Hashtable eventTypes; + Hashtable nameToMethod = new Hashtable (); protected override void LoadExtraData (string name, XmlNode node) { @@ -1571,6 +1598,19 @@ namespace Mono.AssemblyCompare eventTypes [name] = xatt.Value; } + XmlNode child = node.FirstChild; + while (child != null) { + if (child != null && child.Name == "methods") { + XMLMethods m = new XMLMethods (); + XmlNode parent = child.ParentNode; + string key = GetNodeKey (name, parent); + m.LoadData (child); + nameToMethod [key] = m; + break; + } + child = child.NextSibling; + } + base.LoadExtraData (name, node); } @@ -1593,6 +1633,16 @@ namespace Mono.AssemblyCompare if (etype != oetype) AddWarning (parent, "Event type is {0} and should be {1}", oetype, etype); + + XMLMethods m = nameToMethod [name] as XMLMethods; + XMLMethods om = evt.nameToMethod [name] as XMLMethods; + if (m != null || om != null) { + if (m == null) + m = new XMLMethods (); + + m.CompareTo (document, parent, om); + counters.AddPartialToPartial (m.Counters); + } } finally { AddCountersAttributes (parent); copy.AddPartialToPartial (counters); @@ -1769,7 +1819,7 @@ namespace Mono.AssemblyCompare if ((ma & MethodAttributes.RequireSecObject) != 0) ma = (MethodAttributes) (att - (int) MethodAttributes.RequireSecObject); - // we don't care if the implementation is forwarded through PInvoke + // we don't care if the implementation is forwarded through PInvoke if ((ma & MethodAttributes.PinvokeImpl) != 0) ma = (MethodAttributes) (att - (int) MethodAttributes.PinvokeImpl);