Author: toshok
Date: 2007-12-07 14:25:15 -0500 (Fri, 07 Dec 2007)
New Revision: 90958

Added:
   trunk/mono-tools/gui-compare/ChangeLog
Modified:
   trunk/mono-tools/gui-compare/CecilMetadata.cs
   trunk/mono-tools/gui-compare/CompareContext.cs
   trunk/mono-tools/gui-compare/CompareWindow.cs
   trunk/mono-tools/gui-compare/MasterMetadata.cs
   trunk/mono-tools/gui-compare/Masterinfo.cs
   trunk/mono-tools/gui-compare/Metadata.cs
Log:
2007-12-07  Chris Toshok  <[EMAIL PROTECTED]>

        * Metadata.cs (CompClass): add GetNestedClass() method.

        * Masterinfo.cs (XMLClass): make nested public.

        * CompareWindow.cs (PerformCompare): abstract out what was in the
        body of SetAssemblyPath, so we can restart a comparison whenever
        we want -- when a new masterinfo is available, when the .dll has
        changed, etc.

        * CompareContext.cs (CompareThread): comment out call to
        DumpComparison.
        (CompareClassLists): abstract out the body of CompareClasses so it
        can be reused for nested classes as well as toplevel.  Call
        CompareClassLists recursively to handle nested classes.  Also, fix
        an &&/|| thinko.
        (CompareTypes): just call CompareClassLists.
        (CompareMethods): start implementation.
        (AddExtraMethod, AddMissingMethod): implement.

        * MasterMetadata.cs (MasterClass.GetMethods,
        MasterClass.GetConstructors): don't throw NIE.  instead return an
        empty list.  this causes all methods to show up as extra, but it
        keeps us from crashing.
        (MasterClass.GetNestedClasses): implement.

        * CecilMetadata.cs (CecilClass.GetConstructors): return empty
        list, don't throw NIE.
        (CecilClass.GetNestedClasses): implement.



Modified: trunk/mono-tools/gui-compare/CecilMetadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/CecilMetadata.cs       2007-12-07 18:48:44 UTC 
(rev 90957)
+++ trunk/mono-tools/gui-compare/CecilMetadata.cs       2007-12-07 19:25:15 UTC 
(rev 90958)
@@ -105,9 +105,21 @@
 
                public override List<CompMethod> GetConstructors ()
                {
-                       return null;
+                       return new List<CompMethod>();
                }
 
+               public override List<CompClass> GetNestedClasses()
+               {
+                       List<CompClass> rv = new List<CompClass>();
+                       foreach (TypeDefinition td in type_def.NestedTypes) {
+                               rv.Add (new CecilClass (td));
+                       }
+
+                       rv.Sort (delegate (CompClass x, CompClass y) { return 
String.Compare (x.Name, y.Name); });
+
+                       return rv;
+               }
+
                TypeDefinition type_def;
        }
 

Added: trunk/mono-tools/gui-compare/ChangeLog
===================================================================
--- trunk/mono-tools/gui-compare/ChangeLog      2007-12-07 18:48:44 UTC (rev 
90957)
+++ trunk/mono-tools/gui-compare/ChangeLog      2007-12-07 19:25:15 UTC (rev 
90958)
@@ -0,0 +1,30 @@
+2007-12-07  Chris Toshok  <[EMAIL PROTECTED]>
+
+       * Metadata.cs (CompClass): add GetNestedClass() method.
+
+       * Masterinfo.cs (XMLClass): make nested public.
+
+       * CompareWindow.cs (PerformCompare): abstract out what was in the
+       body of SetAssemblyPath, so we can restart a comparison whenever
+       we want -- when a new masterinfo is available, when the .dll has
+       changed, etc.
+
+       * CompareContext.cs (CompareThread): comment out call to
+       DumpComparison.
+       (CompareClassLists): abstract out the body of CompareClasses so it
+       can be reused for nested classes as well as toplevel.  Call
+       CompareClassLists recursively to handle nested classes.  Also, fix
+       an &&/|| thinko.
+       (CompareTypes): just call CompareClassLists.
+       (CompareMethods): start implementation.
+       (AddExtraMethod, AddMissingMethod): implement.
+
+       * MasterMetadata.cs (MasterClass.GetMethods,
+       MasterClass.GetConstructors): don't throw NIE.  instead return an
+       empty list.  this causes all methods to show up as extra, but it
+       keeps us from crashing.
+       (MasterClass.GetNestedClasses): implement.
+
+       * CecilMetadata.cs (CecilClass.GetConstructors): return empty
+       list, don't throw NIE.
+       (CecilClass.GetNestedClasses): implement.

Modified: trunk/mono-tools/gui-compare/CompareContext.cs
===================================================================
--- trunk/mono-tools/gui-compare/CompareContext.cs      2007-12-07 18:48:44 UTC 
(rev 90957)
+++ trunk/mono-tools/gui-compare/CompareContext.cs      2007-12-07 19:25:15 UTC 
(rev 90958)
@@ -64,7 +64,7 @@
 
                        FinishedOnGuiThread ();
 
-                       DumpComparison (comparison, 0);
+                       //                      DumpComparison (comparison, 0);
                }
 
                char StatusToChar (ComparisonStatus r)
@@ -97,7 +97,7 @@
 
                        int m = 0, a = 0;
 
-                       while (m < master_namespaces.Count && a < 
assembly_namespaces.Count) {
+                       while (m < master_namespaces.Count || a < 
assembly_namespaces.Count) {
                                if (m == master_namespaces.Count) {
                                        AddExtraNamespace (parent, 
assembly_namespaces[a]);
                                        a++;
@@ -135,20 +135,17 @@
                        }
                }
 
-               void CompareTypes (NamespaceComparison parent,
-                                  CompNamespace master_namespace, 
CompNamespace assembly_namespace)
+               void CompareClassLists (ComparisonNode parent,
+                                       List<CompClass> master_types, 
List<CompClass> assembly_types)
                {
-                       List<CompClass> assembly_types = 
assembly_namespace.GetClasses();
-                       List<CompClass> master_types = 
master_namespace.GetClasses();
-
                        int m = 0, a = 0;
-                       while (m < master_types.Count && a < 
assembly_types.Count) {
-                               if (m == master_types.Count) {
+                       while (m < master_types.Count || a < 
assembly_types.Count) {
+                               if (master_types == null || m == 
master_types.Count) {
                                        AddExtraClass (parent, 
assembly_types[a]);
                                        a++;
                                        continue;
                                }
-                               else if (a == assembly_types.Count) {
+                               else if (assembly_types == null || a == 
assembly_types.Count) {
                                        AddMissingClass (parent, 
master_types[m]);
                                        m++;
                                        continue;
@@ -162,7 +159,10 @@
                                        ClassComparison comparison = new 
ClassComparison (master_types[m].Name);
                                        parent.AddChild (comparison);
                                        CompareMethods (comparison, 
master_types[m], assembly_types[a]);
-                                       //CompareMembers (comparison, 
master_types[m], assembly_namespace [assembly_types[a]]);
+                                       // XXX more comparison stuff here
+                                       CompareClassLists (comparison,
+                                                          
master_types[m].GetNestedClasses(),
+                                                          
assembly_types[a].GetNestedClasses());
                                        m++;
                                        a++;
                                }
@@ -179,41 +179,40 @@
                        }
                }
 
+               void CompareTypes (NamespaceComparison parent,
+                                  CompNamespace master_namespace, 
CompNamespace assembly_namespace)
+               {
+                       CompareClassLists (parent,
+                                          master_namespace.GetClasses(), 
assembly_namespace.GetClasses());
+               }
+
                void CompareMethods (ComparisonNode parent,
                                     CompClass master_class, CompClass 
assembly_class)
                {
-#if false
-                       MethodDefinition[] assembly_methods = new 
MethodDefinition [assembly_class.Methods.Count];
-                       ((ICollection)assembly_class.Methods).CopyTo 
(assembly_methods, 0);
-                       Array.Sort (assembly_methods, new 
MethodDefinitionComparer());
+                       List<CompMethod> assembly_methods = 
assembly_class.GetMethods();
+                       List<CompMethod> master_methods = 
master_class.GetMethods();
 
-                       XMLMethods [] master_methods = new XMLMethods 
[master_class.methods.Length];
-                       master_class.methods.CopyTo (master_methods, 0);
-                       Array.Sort (master_methods, new XMLMethodComparer());
-
                        int m = 0, a = 0;
-                       while (m < master_methods.Length && a < 
assembly_methods.Length) {
-                               if (m == master_methods.Length) {
+                       while (m < master_methods.Count || a < 
assembly_methods.Count) {
+                               if (m == master_methods.Count) {
                                        AddExtraMethod (parent, 
assembly_methods[a]);
                                        a++;
                                        continue;
                                }
-                               else if (a == assembly_methods.Length) {
+                               else if (a == assembly_methods.Count) {
                                        AddMissingMethod (parent, 
master_methods[m]);
                                        m++;
                                        continue;
                                }
 
-                               int c = String.Compare (master_methods[m].name, 
assembly_methods[a].Name);
+                               int c = String.Compare (master_methods[m].Name, 
assembly_methods[a].Name);
 
                                if (c == 0) {
                                        /* the names match, further 
investigation is required */
-                                       Console.WriteLine ("method {0} is in 
both, doing more comparisons", master_methods[m].name);
-                                       MethodComparison comparison = new 
MethodComparison (master_methods[m].name);
+                                       Console.WriteLine ("method {0} is in 
both, doing more comparisons", master_methods[m].Name);
+                                       MethodComparison comparison = new 
MethodComparison (master_methods[m].Name);
                                        parent.AddChild (comparison);
-
-                                       // XXX compare attributes
-
+                                       //CompareParameters (comparison, 
master_methods[m], assembly_namespace [assembly_methods[a]]);
                                        m++;
                                        a++;
                                }
@@ -228,7 +227,6 @@
                                        a++;
                                }
                        }
-#endif
                }
 
                void AddExtraNamespace (ComparisonNode parent, CompNamespace ns)
@@ -237,7 +235,6 @@
                        parent.AddChild (namespace_node);
                        namespace_node.status = ComparisonStatus.Extra;
 
-                       Console.WriteLine ("extra namespace: {0}", ns.Name);
                        List<CompClass> classes = ns.GetClasses();
                        foreach (CompClass cls in classes)
                                AddExtraClass (namespace_node, cls);
@@ -249,8 +246,6 @@
                        parent.AddChild (namespace_node);
                        namespace_node.status = ComparisonStatus.Missing;
 
-                       Console.WriteLine ("missing namespace: {0}", ns.Name);
-
                        List<CompClass> classes = ns.GetClasses();
                        foreach (CompClass cls in classes)
                                AddMissingClass (namespace_node, cls);
@@ -270,14 +265,18 @@
                        comparison.status = ComparisonStatus.Missing;
                }
 
-               void AddExtraMethod (ComparisonNode parent, MethodDefinition 
assembly_method)
+               void AddExtraMethod (ComparisonNode parent, CompMethod extra)
                {
-//                     Console.WriteLine ("extra method: {0}", 
assembly_method.Name);
+                       ComparisonNode method_node = new MethodComparison 
(extra.Name);
+                       parent.AddChild (method_node);
+                       method_node.status = ComparisonStatus.Extra;
                }
 
-               void AddMissingMethod (ComparisonNode parent, XMLMethods 
master_method)
+               void AddMissingMethod (ComparisonNode parent, CompMethod 
missing)
                {
-//                     Console.WriteLine ("missing method: {0}", 
master_method.name);
+                       ComparisonNode method_node = new MethodComparison 
(missing.Name);
+                       parent.AddChild (method_node);
+                       method_node.status = ComparisonStatus.Missing;
                }
 
                void LoadMasterinfo ()

Modified: trunk/mono-tools/gui-compare/CompareWindow.cs
===================================================================
--- trunk/mono-tools/gui-compare/CompareWindow.cs       2007-12-07 18:48:44 UTC 
(rev 90957)
+++ trunk/mono-tools/gui-compare/CompareWindow.cs       2007-12-07 19:25:15 UTC 
(rev 90958)
@@ -97,14 +97,20 @@
 
                public void SetAssemblyPath (string path)
                {
-                       string masterinfoPath = IOPath.Combine 
(masterinfoDirectory, IOPath.GetFileName (IOPath.ChangeExtension (path, 
"xml")));
+                       assemblyPath = path;
+                       PerformCompare ();
+               }
 
+               public void PerformCompare ()
+               {
+                       string masterinfoPath = IOPath.Combine 
(masterinfoDirectory, IOPath.GetFileName (IOPath.ChangeExtension (assemblyPath, 
"xml")));
+
                        // clear our existing content
                        if (context != null)
                                context.StopCompare ();
 
                        // now generate new content asynchronously
-                       context = new CompareContext (masterinfoPath, path);
+                       context = new CompareContext (masterinfoPath, 
assemblyPath);
                        context.ProgressChanged += delegate (object sender, 
CompareProgressChangedEventArgs e) {
                                /* update our progress bar */
                                status.Pop (0);
@@ -126,7 +132,7 @@
                        context.Finished += delegate (object sender, EventArgs 
e) {
                                status.Pop (0);
                                status.Push (0, String.Format ("Comparison 
completed at {0}", DateTime.Now));
-                               Title = IOPath.GetFileName (path);
+                               Title = IOPath.GetFileName (assemblyPath);
                                PopulateTreeFromComparison (context.Comparison);
                                progressbar.Fraction = 0.0;
                        };
@@ -184,6 +190,7 @@
                                PopulateTreeFromComparison (citer, n);
                }
 
+               string assemblyPath;
                CompareContext context;
                Gtk.VBox vbox;
                Gtk.TreeView tree;

Modified: trunk/mono-tools/gui-compare/MasterMetadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/MasterMetadata.cs      2007-12-07 18:48:44 UTC 
(rev 90957)
+++ trunk/mono-tools/gui-compare/MasterMetadata.cs      2007-12-07 19:25:15 UTC 
(rev 90958)
@@ -53,16 +53,32 @@
                public MasterClass (XMLClass cls)
                        : base (cls.name)
                {
+                       xml_cls = cls;
                }
 
                public override List<CompMethod> GetMethods()
                {
-                       throw new NotImplementedException ();
+                       return new List<CompMethod>();
                }
 
                public override List<CompMethod> GetConstructors()
                {
-                       throw new NotImplementedException ();
+                       return new List<CompMethod>();
                }
+
+               public override List<CompClass> GetNestedClasses()
+               {
+                       List<CompClass> rv = new List<CompClass>();
+                       if (xml_cls.nested != null) {
+                               foreach (XMLClass nested in xml_cls.nested)
+                                       rv.Add (new MasterClass (nested));
+
+                               rv.Sort (delegate (CompClass x, CompClass y) { 
return String.Compare (x.Name, y.Name); });
+                       }
+
+                       return rv;
+               }
+
+               XMLClass xml_cls;
        }
 }

Modified: trunk/mono-tools/gui-compare/Masterinfo.cs
===================================================================
--- trunk/mono-tools/gui-compare/Masterinfo.cs  2007-12-07 18:48:44 UTC (rev 
90957)
+++ trunk/mono-tools/gui-compare/Masterinfo.cs  2007-12-07 19:25:15 UTC (rev 
90958)
@@ -643,7 +643,7 @@
                XMLProperties properties;
                XMLEvents events;
                public XMLMethods methods;
-               XMLClass [] nested;
+               public XMLClass [] nested;
                
                public override void LoadData (XmlNode node)
                {

Modified: trunk/mono-tools/gui-compare/Metadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/Metadata.cs    2007-12-07 18:48:44 UTC (rev 
90957)
+++ trunk/mono-tools/gui-compare/Metadata.cs    2007-12-07 19:25:15 UTC (rev 
90958)
@@ -61,6 +61,8 @@
 //             public abstract List<CompProperty> GetProperties();
 //             public abstract List<CompField>    GetFields();
 //             public abstract List<CompEvent>    GetEvents();
+
+               public abstract List<CompClass>  GetNestedClasses();
        }
 
        public abstract class CompMethod : CompAttributeContainer {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to