Author: toshok
Date: 2007-12-11 23:07:08 -0500 (Tue, 11 Dec 2007)
New Revision: 91138

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/Comparison.cs
   trunk/mono-tools/gui-compare/MasterMetadata.cs
   trunk/mono-tools/gui-compare/Masterinfo.cs
   trunk/mono-tools/gui-compare/Metadata.cs
Log:
lots of work refactoring and cleaning things up

Modified: trunk/mono-tools/gui-compare/CecilMetadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/CecilMetadata.cs       2007-12-12 03:17:20 UTC 
(rev 91137)
+++ trunk/mono-tools/gui-compare/CecilMetadata.cs       2007-12-12 04:07:08 UTC 
(rev 91138)
@@ -3,14 +3,102 @@
 using System.Text;
 using System.Threading;
 using System.Xml;
+using System.IO;
 using Mono.Cecil;
 using Gtk;
 
 namespace GuiCompare {
 
+       static class Utils {
+               public static void PopulateMemberLists (TypeDefinition fromDef,
+                                                       List<CompNamed> 
interface_list,
+                                                       List<CompNamed> 
constructor_list,
+                                                       List<CompNamed> 
method_list,
+                                                       List<CompNamed> 
property_list,
+                                                       List<CompNamed> 
field_list,
+                                                       List<CompNamed> 
event_list)
+               {
+                       if (interface_list != null) {
+                               foreach (TypeReference ifc in 
fromDef.Interfaces) {
+                                       interface_list.Add (new CecilInterface 
(ifc, true));
+                               }
+                       }
+                       if (constructor_list != null) {
+                               foreach (MethodDefinition md in 
fromDef.Constructors) {
+                                       if (md.IsPrivate || md.IsAssembly)
+                                               continue;
+                                       constructor_list.Add (new CecilMethod 
(md));
+                               }
+                       }
+                       if (method_list != null) {
+                               foreach (MethodDefinition md in 
fromDef.Methods) {
+                                       if (md.IsSpecialName)
+                                               continue;
+                                       if (md.IsPrivate || md.IsAssembly)
+                                               continue;
+                                       method_list.Add (new CecilMethod (md));
+                               }
+                       }
+                       if (property_list != null) {
+#if notyet
+                               foreach (PropertyDefinition pd in 
fromDef.Properties) {
+                                       if (pd.IsPrivate || pd.IsAssembly)
+                                               property_list.Add (new 
CecilProperty (pd));
+                               }
+#endif
+                       }
+                       if (field_list != null) {
+                               foreach (FieldDefinition fd in fromDef.Fields) {
+                                       if (fd.IsPrivate || fd.IsAssembly)
+                                               continue;
+                                       field_list.Add (new CecilField (fd));
+                               }
+                       }
+                       if (event_list != null) {
+#if notyet
+                               foreach (EventDefinition ed in fromDef.Events) {
+                                       if (ed.IsPrivate || ed.IsAssembly)
+                                               event_list.Add (new CecilEvent 
(ed));
+                               }
+#endif
+                       }
+               }
+
+               public static void PopulateTypeLists (TypeDefinition fromDef,
+                                                     List<CompNamed> 
class_list,
+                                                     List<CompNamed> enum_list,
+                                                     List<CompNamed> 
delegate_list,
+                                                     List<CompNamed> 
interface_list,
+                                                     List<CompNamed> 
struct_list)
+               {
+                       foreach (TypeDefinition type_def in 
fromDef.NestedTypes) {
+                               if (type_def.IsNotPublic)
+                                       continue;
+                               if (type_def.IsValueType) {
+                                       if (type_def.IsEnum) {
+                                               enum_list.Add (new CecilEnum 
(type_def));
+                                       }
+                                       else {
+                                               struct_list.Add (new CecilClass 
(type_def, CompType.Struct));
+                                       }
+                               }
+                               else if (type_def.IsInterface) {
+                                       interface_list.Add (new CecilInterface 
(type_def, false));
+                               }
+                               else if (type_def.BaseType.FullName == 
"System.MulticastDelegate"
+                                        || type_def.BaseType.FullName == 
"System.Delegate") {
+                                       delegate_list.Add (new CecilDelegate 
(type_def));
+                               }
+                               else {
+                                       class_list.Add (new CecilClass 
(type_def, CompType.Class));
+                               }
+                       }
+               }
+       }
+
        public class CecilAssembly : CompAssembly {
                public CecilAssembly (string path)
-                       : base (path)
+                       : base (Path.GetFileName (path))
                {
                        Dictionary<string, Dictionary <string, TypeDefinition>> 
namespaces
                                = new Dictionary<string, Dictionary <string, 
TypeDefinition>> ();
@@ -37,15 +125,13 @@
                                namespaces[t.Namespace][t.Name] = t;
                        }
 
-                       namespace_list = new List<CompNamespace>();
+                       namespace_list = new List<CompNamed>();
                        foreach (string ns_name in namespaces.Keys) {
                                namespace_list.Add (new CecilNamespace 
(ns_name, namespaces[ns_name]));
                        }
-
-                       namespace_list.Sort (delegate (CompNamespace x, 
CompNamespace y) { return String.Compare (x.Name, y.Name); });
                }
 
-               public override List<CompNamespace> GetNamespaces()
+               public override List<CompNamed> GetNamespaces()
                {
                        return namespace_list;
                }
@@ -61,127 +147,298 @@
                                
                }
 
-               List<CompNamespace> namespace_list;
+               List<CompNamed> namespace_list;
        }
 
        public class CecilNamespace : CompNamespace {
-               public CecilNamespace (string name, Dictionary<string, 
TypeDefinition> class_mapping)
+               public CecilNamespace (string name, Dictionary<string, 
TypeDefinition> type_mapping)
                        : base (name)
                {
-                       class_list = new List<CompClass>();
-//                     enum_list = new List<CompEnum>();
-//                     delegate_list = new List<CompDelegate>();
-                       interface_list = new List<CompInterface>();
-                       struct_list = new List<CompClass>();
+                       class_list = new List<CompNamed>();
+                       enum_list = new List<CompNamed>();
+                       delegate_list = new List<CompNamed>();
+                       interface_list = new List<CompNamed>();
+                       struct_list = new List<CompNamed>();
 
-                       foreach (string cls_name in class_mapping.Keys) {
-                               TypeDefinition type_def = 
class_mapping[cls_name];
+                       foreach (string type_name in type_mapping.Keys) {
+                               TypeDefinition type_def = 
type_mapping[type_name];
                                if (type_def.IsNotPublic)
                                        continue;
                                if (type_def.IsValueType) {
                                        if (type_def.IsEnum) {
-                                               Console.WriteLine ("enum -> 
{0}", type_def.FullName);
+                                               enum_list.Add (new CecilEnum 
(type_def));
                                        }
                                        else {
-                                               struct_list.Add (new CecilClass 
(class_mapping[cls_name]));
+                                               struct_list.Add (new CecilClass 
(type_def, CompType.Struct));
                                        }
                                }
                                else if (type_def.IsInterface) {
-                                       interface_list.Add (new CecilInterface 
(class_mapping[cls_name]));
+                                       interface_list.Add (new CecilInterface 
(type_def, false));
                                }
+                               else if (type_def.BaseType.FullName == 
"System.MulticastDelegate"
+                                        || type_def.BaseType.FullName == 
"System.Delegate") {
+                                       delegate_list.Add (new CecilDelegate 
(type_def));
+                               }
                                else {
-                                       class_list.Add (new CecilClass 
(class_mapping[cls_name]));
+                                       class_list.Add (new CecilClass 
(type_def, CompType.Class));
                                }
                        }
-
-                       class_list.Sort (delegate (CompClass x, CompClass y) { 
return String.Compare (x.Name, y.Name); });
                }
 
-               public override List<CompClass> GetClasses()
+               public override List<CompNamed> GetNestedClasses()
                {
                        return class_list;
                }
 
-               public override List<CompInterface> GetInterfaces ()
+               public override List<CompNamed> GetNestedInterfaces ()
                {
                        return interface_list;
                }
 
-               public override List<CompClass> GetStructs ()
+               public override List<CompNamed> GetNestedStructs ()
                {
                        return struct_list;
                }
 
-               List<CompClass> class_list;
-               List<CompInterface> interface_list;
-               List<CompClass> struct_list;
+               public override List<CompNamed> GetNestedEnums ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetNestedDelegates ()
+               {
+                       return delegate_list;
+               }
+
+               List<CompNamed> class_list;
+               List<CompNamed> interface_list;
+               List<CompNamed> struct_list;
+               List<CompNamed> delegate_list;
+               List<CompNamed> enum_list;
        }
 
        public class CecilInterface : CompInterface {
-               public CecilInterface (TypeReference type_ref)
-                       : base (type_ref.FullName)
+               public CecilInterface (TypeReference type_ref, bool full_name)
+                       : base (full_name ? type_ref.FullName : type_ref.Name)
                {
                        this.type_ref = type_ref;
                }
 
+               public override List<CompNamed> GetInterfaces ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetMethods ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetConstructors ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetProperties()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetFields()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetEvents()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
                TypeReference type_ref;
        }
 
-       public class CecilClass : CompClass {
-               public CecilClass (TypeDefinition type_def)
+       public class CecilDelegate : CompDelegate {
+               public CecilDelegate (TypeDefinition type_def)
                        : base (type_def.Name)
                {
                        this.type_def = type_def;
                }
 
-               public override List<CompInterface> GetInterfaces ()
+               TypeDefinition type_def;
+       }
+
+       public class CecilEnum : CompEnum {
+               public CecilEnum (TypeDefinition type_def)
+                       : base (type_def.Name)
                {
-                       List<CompInterface> rv = new List<CompInterface>();
+                       this.type_def = type_def;
 
-                       foreach (TypeReference md in type_def.Interfaces) {
-                               rv.Add (new CecilInterface (md));
-                       }
+                       fields = new List<CompNamed>();
 
-                       rv.Sort (delegate (CompInterface x, CompInterface y) { 
return String.Compare (x.Name, y.Name); });
+                       Utils.PopulateMemberLists (type_def,
+                                                  null,
+                                                  null,
+                                                  null,
+                                                  null,
+                                                  fields,
+                                                  null);
+               }
 
-                       return rv;
+               public override List<CompNamed> GetFields()
+               {
+                       return fields;
                }
 
-               public override List<CompMethod> GetMethods ()
+               public override List<CompNamed> GetAttributes ()
                {
-                       List<CompMethod> rv = new List<CompMethod>();
+                       // XXX
+                       return new List<CompNamed>();
+               }
 
-                       foreach (MethodDefinition md in type_def.Methods) {
-                               if (md.IsSpecialName)
-                                       continue;
-                               rv.Add (new CecilMethod (md));
-                       }
+               TypeDefinition type_def;
+               List<CompNamed> fields;
+       }
 
-                       rv.Sort (delegate (CompMethod x, CompMethod y) { return 
String.Compare (x.Name, y.Name); });
+       public class CecilClass : CompClass {
+               public CecilClass (TypeDefinition type_def, CompType type)
+                       : base (type_def.Name, type)
+               {
+                       this.type_def = type_def;
 
-                       return rv;
+                       nested_classes = new List<CompNamed>();
+                       nested_enums = new List<CompNamed>();
+                       nested_delegates = new List<CompNamed>();
+                       nested_interfaces = new List<CompNamed>();
+                       nested_structs = new List<CompNamed>();
+
+                       Utils.PopulateTypeLists (type_def,
+                                                nested_classes,
+                                                nested_enums,
+                                                nested_delegates,
+                                                nested_interfaces,
+                                                nested_structs);
+
+                       interfaces = new List<CompNamed>();
+                       constructors = new List<CompNamed>();
+                       methods = new List<CompNamed>();
+                       properties = new List<CompNamed>();
+                       fields = new List<CompNamed>();
+                       events = new List<CompNamed>();
+
+                       Utils.PopulateMemberLists (type_def,
+                                                  interfaces,
+                                                  constructors,
+                                                  methods,
+                                                  properties,
+                                                  fields,
+                                                  events);
                }
 
-               public override List<CompMethod> GetConstructors ()
+               public override List<CompNamed> GetInterfaces ()
                {
-                       return new List<CompMethod>();
+                       return interfaces;
                }
 
-               public override List<CompClass> GetNestedClasses()
+               public override List<CompNamed> GetMethods ()
                {
-                       List<CompClass> rv = new List<CompClass>();
-                       foreach (TypeDefinition td in type_def.NestedTypes) {
-                               rv.Add (new CecilClass (td));
-                       }
+                       return methods;
+               }
 
-                       rv.Sort (delegate (CompClass x, CompClass y) { return 
String.Compare (x.Name, y.Name); });
+               public override List<CompNamed> GetConstructors ()
+               {
+                       return constructors;
+               }
 
-                       return rv;
+               public override List<CompNamed> GetProperties()
+               {
+                       return properties;
                }
 
+               public override List<CompNamed> GetFields()
+               {
+                       return fields;
+               }
+
+               public override List<CompNamed> GetEvents()
+               {
+                       return events;
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetNestedClasses()
+               {
+                       return nested_classes;
+               }
+
+               public override List<CompNamed> GetNestedInterfaces ()
+               {
+                       return nested_interfaces;
+               }
+
+               public override List<CompNamed> GetNestedStructs ()
+               {
+                       return nested_structs;
+               }
+
+               public override List<CompNamed> GetNestedEnums ()
+               {
+                       return nested_enums;
+               }
+
+               public override List<CompNamed> GetNestedDelegates ()
+               {
+                       return nested_delegates;
+               }
+
                TypeDefinition type_def;
+               List<CompNamed> nested_classes;
+               List<CompNamed> nested_interfaces;
+               List<CompNamed> nested_structs;
+               List<CompNamed> nested_delegates;
+               List<CompNamed> nested_enums;
+
+               List<CompNamed> interfaces;
+               List<CompNamed> constructors;
+               List<CompNamed> methods;
+               List<CompNamed> properties;
+               List<CompNamed> fields;
+               List<CompNamed> events;
        }
 
+       public class CecilField : CompField {
+               public CecilField (FieldDefinition field_def)
+                       : base (field_def.Name)
+               {
+                       this.field_def = field_def;
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               FieldDefinition field_def;
+       }
+
        public class CecilMethod : CompMethod {
                public CecilMethod (MethodDefinition method_def)
                        : base (MasterinfoFormattedName (method_def))
@@ -189,6 +446,12 @@
                        this.method_def = method_def;
                }
 
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
                static string MasterinfoFormattedName (MethodDefinition 
method_def)
                {
                        StringBuilder sb = new StringBuilder ();

Modified: trunk/mono-tools/gui-compare/CompareContext.cs
===================================================================
--- trunk/mono-tools/gui-compare/CompareContext.cs      2007-12-12 03:17:20 UTC 
(rev 91137)
+++ trunk/mono-tools/gui-compare/CompareContext.cs      2007-12-12 04:07:08 UTC 
(rev 91138)
@@ -58,9 +58,9 @@
 
                        ProgressOnGuiThread (0.0, "Comparing...");
 
-                       comparison = new AssemblyComparison (Path.GetFileName 
(assemblyPath));
+                       comparison = assembly.GetComparisonNode ();
 
-                       CompareNamespaces (comparison);
+                       CompareTypeLists (comparison, 
masterinfo.GetNamespaces(), assembly.GetNamespaces());
 
                        FinishedOnGuiThread ();
 
@@ -90,319 +90,177 @@
                        }
                }
 
-               void CompareNamespaces (ComparisonNode parent)
+               void CompareNestedTypes (ComparisonNode parent, 
ICompTypeContainer master_container, ICompTypeContainer assembly_container)
                {
-                       List<CompNamespace> assembly_namespaces = 
assembly.GetNamespaces();
-                       List<CompNamespace> master_namespaces = 
masterinfo.GetNamespaces();
+                       CompareTypeLists (parent,
+                                         
master_container.GetNestedInterfaces(), 
assembly_container.GetNestedInterfaces());
+                       CompareTypeLists (parent,
+                                         master_container.GetNestedClasses(), 
assembly_container.GetNestedClasses());
+                       CompareTypeLists (parent,
+                                         master_container.GetNestedStructs(), 
assembly_container.GetNestedStructs());
+                       CompareTypeLists (parent,
+                                         master_container.GetNestedEnums(), 
assembly_container.GetNestedEnums());
+                       CompareTypeLists (parent,
+                                         
master_container.GetNestedDelegates(), assembly_container.GetNestedDelegates());
+               }
 
+               void CompareTypeLists (ComparisonNode parent,
+                                      List<CompNamed> master_list,
+                                      List<CompNamed> assembly_list)
+               {
                        int m = 0, a = 0;
 
-                       while (m < master_namespaces.Count || a < 
assembly_namespaces.Count) {
-                               if (m == master_namespaces.Count) {
-                                       AddExtraNamespace (parent, 
assembly_namespaces[a]);
+                       master_list.Sort (CompNamed.Compare);
+                       assembly_list.Sort (CompNamed.Compare);
+
+                       while (m < master_list.Count || a < 
assembly_list.Count) {
+                               if (m == master_list.Count) {
+                                       AddExtra (parent, assembly_list[a]);
                                        a++;
                                        continue;
                                }
-                               else if (a == assembly_namespaces.Count) {
-                                       AddMissingNamespace (parent, 
master_namespaces[m]);
+                               else if (a == assembly_list.Count) {
+                                       AddMissing (parent, master_list[m]);
                                        m++;
                                        continue;
                                }
 
-                               int c = String.Compare 
(master_namespaces[m].Name, assembly_namespaces[a].Name);
+                               int c = String.Compare (master_list[m].Name, 
assembly_list[a].Name);
 
                                if (c == 0) {
-                                       ProgressOnGuiThread (0.0, String.Format 
("Comparing namespace {0}", master_namespaces[m].Name));
+                                       ProgressOnGuiThread (0.0, String.Format 
("Comparing {0} {0}", master_list[m].Type, master_list[m].Name));
 
                                        /* the names match, further 
investigation is required */
-//                                     Console.WriteLine ("namespace {0} is in 
both, doing more comparisons", master_namespaces[m].Name);
-                                       NamespaceComparison comparison = new 
NamespaceComparison (master_namespaces[m].Name);
+//                                     Console.WriteLine ("{0} {1} is in both, 
doing more comparisons", master_list[m].Type, master_list[m].Name);
+                                       ComparisonNode comparison = 
master_list[m].GetComparisonNode();
                                        parent.AddChild (comparison);
-                                       CompareTypes (comparison, 
master_namespaces[m], assembly_namespaces[a]);
-                                       m++;
-                                       a++;
-                               }
-                               else if (c < 0) {
-                                       /* master name is before assembly name, 
master name is missing from assembly */
-                                       AddMissingNamespace (parent, 
master_namespaces[m]);
-                                       m++;
-                               }
-                               else {
-                                       /* master name is after assembly name, 
assembly name is extra */
-                                       AddExtraNamespace (parent, 
assembly_namespaces[a]);
-                                       a++;
-                               }
-                       }
-               }
 
-               void CompareClassLists (ComparisonNode parent,
-                                       List<CompClass> master_types, 
List<CompClass> assembly_types)
-               {
-                       int m = 0, a = 0;
-                       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 (assembly_types == null || a == 
assembly_types.Count) {
-                                       AddMissingClass (parent, 
master_types[m]);
-                                       m++;
-                                       continue;
-                               }
+                                       // compare nested types
+                                       if (master_list[m] is 
ICompTypeContainer && assembly_list[a] is ICompTypeContainer) {
+                                               CompareNestedTypes (comparison,
+                                                                   
(ICompTypeContainer)master_list[m],
+                                                                   
(ICompTypeContainer)assembly_list[a]);
+                                       }
+                                       if (master_list[m] is 
ICompMemberContainer && assembly_list[a] is ICompMemberContainer) {
+                                               CompareMembers (comparison,
+                                                               
(ICompMemberContainer)master_list[m],
+                                                               
(ICompMemberContainer)assembly_list[a]);
+                                       }
 
-                               int c = String.Compare (master_types[m].Name, 
assembly_types[a].Name);
-
-                               if (c == 0) {
-                                       /* the names match, further 
investigation is required */
-                                       ClassComparison comparison = new 
ClassComparison (master_types[m].Name);
-                                       parent.AddChild (comparison);
-                                       CompareInterfaces (comparison, 
master_types[m], assembly_types[a]);
-                                       CompareMethods (comparison, 
master_types[m], assembly_types[a]);
-                                       // XXX more comparison stuff here
-                                       CompareClassLists (comparison,
-                                                          
master_types[m].GetNestedClasses(),
-                                                          
assembly_types[a].GetNestedClasses());
+                                       // XXX compare members
                                        m++;
                                        a++;
                                }
                                else if (c < 0) {
                                        /* master name is before assembly name, 
master name is missing from assembly */
-                                       AddMissingClass (parent, 
master_types[m]);
+                                       AddMissing (parent, master_list[m]);
                                        m++;
                                }
                                else {
                                        /* master name is after assembly name, 
assembly name is extra */
-                                       AddExtraClass (parent, 
assembly_types[a]);
+                                       AddExtra (parent, assembly_list[a]);
                                        a++;
                                }
                        }
                }
 
-               void CompareTypes (NamespaceComparison parent,
-                                  CompNamespace master_namespace, 
CompNamespace assembly_namespace)
+               void CompareMembers (ComparisonNode parent,
+                                    ICompMemberContainer master_container, 
ICompMemberContainer assembly_container)
                {
-                       CompareClassLists (parent,
-                                          master_namespace.GetClasses(), 
assembly_namespace.GetClasses());
-                       CompareStructs (parent,
-                                       master_namespace, assembly_namespace);
+                       CompareMemberLists (parent,
+                                           master_container.GetInterfaces(), 
assembly_container.GetInterfaces());
+                       CompareMemberLists (parent,
+                                           master_container.GetMethods(), 
assembly_container.GetMethods());
+                       CompareMemberLists (parent,
+                                           master_container.GetProperties(), 
assembly_container.GetProperties());
+                       CompareMemberLists (parent,
+                                           master_container.GetFields(), 
assembly_container.GetFields());
                }
 
-               void CompareStructs (ComparisonNode parent,
-                                    CompNamespace master_namespace, 
CompNamespace assembly_namespace)
+               void CompareMemberLists (ComparisonNode parent,
+                                        List<CompNamed> master_list,
+                                        List<CompNamed> assembly_list)
                {
-                       List<CompClass> assembly_structs = 
assembly_namespace.GetStructs();
-                       List<CompClass> master_structs = 
master_namespace.GetStructs();
-
                        int m = 0, a = 0;
-                       while (m < master_structs.Count || a < 
assembly_structs.Count) {
-                               if (m == master_structs.Count) {
-                                       Console.WriteLine ("{0}", 
assembly_namespace.Name);
-                                       AddExtraStruct (parent, 
assembly_structs[a]);
-                                       a++;
-                                       continue;
-                               }
-                               else if (a == assembly_structs.Count) {
-                                       Console.WriteLine ("{0}", 
master_namespace.Name);
-                                       AddMissingStruct (parent, 
master_structs[m]);
-                                       m++;
-                                       continue;
-                               }
 
-                               int c = String.Compare (master_structs[m].Name, 
assembly_structs[a].Name);
+                       master_list.Sort (CompNamed.Compare);
+                       assembly_list.Sort (CompNamed.Compare);
 
-                               if (c == 0) {
-                                       /* the names match, further 
investigation is required */
-                                       Console.WriteLine ("struct {0} is in 
both, doing more comparisons", master_structs[m].Name);
-                                       StructComparison comparison = new 
StructComparison (master_structs[m].Name);
-                                       parent.AddChild (comparison);
-                                       m++;
+                       while (m < master_list.Count || a < 
assembly_list.Count) {
+                               if (m == master_list.Count) {
+                                       AddExtra (parent, assembly_list[a]);
                                        a++;
-                               }
-                               else if (c < 0) {
-                                       Console.WriteLine ("{0}", 
master_namespace.Name);
-                                       /* master name is before assembly name, 
master name is missing from assembly */
-                                       AddMissingStruct (parent, 
master_structs[m]);
-                                       m++;
-                               }
-                               else {
-                                       Console.WriteLine ("{0}", 
assembly_namespace.Name);
-                                       /* master name is after assembly name, 
assembly name is extra */
-                                       AddExtraStruct (parent, 
assembly_structs[a]);
-                                       a++;
-                               }
-                       }
-               }
-
-               void CompareInterfaces (ComparisonNode parent,
-                                       CompClass master_class, CompClass 
assembly_class)
-               {
-                       List<CompInterface> assembly_interfaces = 
assembly_class.GetInterfaces();
-                       List<CompInterface> master_interfaces = 
master_class.GetInterfaces();
-
-                       int m = 0, a = 0;
-                       while (m < master_interfaces.Count || a < 
assembly_interfaces.Count) {
-                               if (m == master_interfaces.Count) {
-                                       Console.WriteLine ("{0}", 
assembly_class.Name);
-                                       AddExtraInterface (parent, 
assembly_interfaces[a]);
-                                       a++;
                                        continue;
                                }
-                               else if (a == assembly_interfaces.Count) {
-                                       Console.WriteLine ("{0}", 
master_class.Name);
-                                       AddMissingInterface (parent, 
master_interfaces[m]);
+                               else if (a == assembly_list.Count) {
+                                       AddMissing (parent, master_list[m]);
                                        m++;
                                        continue;
                                }
 
-                               int c = String.Compare 
(master_interfaces[m].Name, assembly_interfaces[a].Name);
+                               int c = String.Compare (master_list[m].Name, 
assembly_list[a].Name);
 
                                if (c == 0) {
                                        /* the names match, further 
investigation is required */
-                                       Console.WriteLine ("interface {0} is in 
both, doing more comparisons", master_interfaces[m].Name);
-                                       InterfaceComparison comparison = new 
InterfaceComparison (master_interfaces[m].Name);
+//                                     Console.WriteLine ("method {0} is in 
both, doing more comparisons", master_list[m].Name);
+                                       ComparisonNode comparison = 
master_list[m].GetComparisonNode();
                                        parent.AddChild (comparison);
+                                       //CompareParameters (comparison, 
master_list[m], assembly_namespace [assembly_list[a]]);
                                        m++;
                                        a++;
                                }
                                else if (c < 0) {
-                                       Console.WriteLine ("{0}", 
master_class.Name);
                                        /* master name is before assembly name, 
master name is missing from assembly */
-                                       AddMissingInterface (parent, 
master_interfaces[m]);
+                                       AddMissing (parent, master_list[m]);
                                        m++;
                                }
                                else {
-                                       Console.WriteLine ("{0}", 
assembly_class.Name);
                                        /* master name is after assembly name, 
assembly name is extra */
-                                       AddExtraInterface (parent, 
assembly_interfaces[a]);
+                                       AddExtra (parent, assembly_list[a]);
                                        a++;
                                }
                        }
                }
 
-               void CompareMethods (ComparisonNode parent,
-                                    CompClass master_class, CompClass 
assembly_class)
+               void AddExtra (ComparisonNode parent, CompNamed item)
                {
-                       List<CompMethod> assembly_methods = 
assembly_class.GetMethods();
-                       List<CompMethod> master_methods = 
master_class.GetMethods();
+                       ComparisonNode node = item.GetComparisonNode ();
+                       parent.AddChild (node);
+                       node.status = ComparisonStatus.Extra;
 
-                       int m = 0, a = 0;
-                       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.Count) {
-                                       AddMissingMethod (parent, 
master_methods[m]);
-                                       m++;
-                                       continue;
-                               }
-
-                               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);
-                                       parent.AddChild (comparison);
-                                       //CompareParameters (comparison, 
master_methods[m], assembly_namespace [assembly_methods[a]]);
-                                       m++;
-                                       a++;
-                               }
-                               else if (c < 0) {
-                                       /* master name is before assembly name, 
master name is missing from assembly */
-                                       AddMissingMethod (parent, 
master_methods[m]);
-                                       m++;
-                               }
-                               else {
-                                       /* master name is after assembly name, 
assembly name is extra */
-                                       AddExtraMethod (parent, 
assembly_methods[a]);
-                                       a++;
-                               }
+                       if (item is ICompTypeContainer) {
+                               ICompTypeContainer c = (ICompTypeContainer)item;
+                               foreach (CompNamed ifc in c.GetNestedInterfaces 
())
+                                       AddExtra (node, ifc);
+                               foreach (CompNamed cls in c.GetNestedClasses())
+                                       AddExtra (node, cls);
+                               foreach (CompNamed cls in c.GetNestedStructs())
+                                       AddExtra (node, cls);
+                               foreach (CompNamed en in c.GetNestedEnums())
+                                       AddExtra (node, en);
                        }
                }
 
-               void AddExtraNamespace (ComparisonNode parent, CompNamespace ns)
+               void AddMissing (ComparisonNode parent, CompNamed item)
                {
-                       ComparisonNode namespace_node = new NamespaceComparison 
(ns.Name);
-                       parent.AddChild (namespace_node);
-                       namespace_node.status = ComparisonStatus.Extra;
+                       ComparisonNode node = item.GetComparisonNode ();
+                       parent.AddChild (node);
+                       node.status = ComparisonStatus.Missing;
 
-                       List<CompClass> classes = ns.GetClasses();
-                       foreach (CompClass cls in classes)
-                               AddExtraClass (namespace_node, cls);
-               }
+                       if (item is ICompTypeContainer) {
+                               ICompTypeContainer c = (ICompTypeContainer)item;
 
-               void AddMissingNamespace (ComparisonNode parent, CompNamespace 
ns)
-               {
-                       ComparisonNode namespace_node = new NamespaceComparison 
(ns.Name);
-                       parent.AddChild (namespace_node);
-                       namespace_node.status = ComparisonStatus.Missing;
-
-                       List<CompClass> classes = ns.GetClasses();
-                       foreach (CompClass cls in classes)
-                               AddMissingClass (namespace_node, cls);
+                               foreach (CompNamed ifc in c.GetNestedInterfaces 
())
+                                       AddMissing (node, ifc);
+                               foreach (CompNamed cls in c.GetNestedClasses())
+                                       AddMissing (node, cls);
+                               foreach (CompNamed cls in c.GetNestedStructs())
+                                       AddMissing (node, cls);
+                               foreach (CompNamed en in c.GetNestedEnums())
+                                       AddMissing (node, en);
+                       }
                }
 
-               void AddExtraClass (ComparisonNode parent, CompClass cls)
-               {
-                       ClassComparison comparison = new ClassComparison 
(cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Extra;
-               }
-
-               void AddMissingClass (ComparisonNode parent, CompClass cls)
-               {
-                       ClassComparison comparison = new ClassComparison 
(cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Missing;
-               }
-
-               void AddExtraStruct (ComparisonNode parent, CompClass cls)
-               {
-                       StructComparison comparison = new StructComparison 
(cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Extra;
-               }
-
-               void AddMissingStruct (ComparisonNode parent, CompClass cls)
-               {
-                       StructComparison comparison = new StructComparison 
(cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Missing;
-               }
-
-               void AddExtraInterface (ComparisonNode parent, CompInterface 
cls)
-               {
-                       Console.WriteLine ("extra interface {0}", cls.Name);
-                       InterfaceComparison comparison = new 
InterfaceComparison (cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Extra;
-               }
-
-               void AddMissingInterface (ComparisonNode parent, CompInterface 
cls)
-               {
-                       Console.WriteLine ("missing interface {0}", cls.Name);
-                       InterfaceComparison comparison = new 
InterfaceComparison (cls.Name);
-                       parent.AddChild (comparison);
-                       comparison.status = ComparisonStatus.Missing;
-               }
-
-               void AddExtraMethod (ComparisonNode parent, CompMethod extra)
-               {
-                       ComparisonNode method_node = new MethodComparison 
(extra.Name);
-                       parent.AddChild (method_node);
-                       method_node.status = ComparisonStatus.Extra;
-               }
-
-               void AddMissingMethod (ComparisonNode parent, CompMethod 
missing)
-               {
-                       ComparisonNode method_node = new MethodComparison 
(missing.Name);
-                       parent.AddChild (method_node);
-                       method_node.status = ComparisonStatus.Missing;
-               }
-
                void LoadMasterinfo ()
                {
                        masterinfo = new MasterAssembly (masterinfoPath);
@@ -446,7 +304,7 @@
 
                string masterinfoPath;
                string assemblyPath;
-               AssemblyComparison comparison;
+               ComparisonNode comparison;
                Thread t;
        }
 

Modified: trunk/mono-tools/gui-compare/CompareWindow.cs
===================================================================
--- trunk/mono-tools/gui-compare/CompareWindow.cs       2007-12-12 03:17:20 UTC 
(rev 91137)
+++ trunk/mono-tools/gui-compare/CompareWindow.cs       2007-12-12 04:07:08 UTC 
(rev 91138)
@@ -63,6 +63,7 @@
                        // Create a column for the node name
                        Gtk.TreeViewColumn nameColumn = new Gtk.TreeViewColumn 
();
                        nameColumn.Title = "Name";
+                       nameColumn.Resizable = true;
 
                        Gtk.CellRendererText nameCell = new 
Gtk.CellRendererText ();
                        Gtk.CellRendererPixbuf typeCell = new 
Gtk.CellRendererPixbuf ();
@@ -81,6 +82,7 @@
                        // Create a column for the status counts
                        Gtk.TreeViewColumn countsColumn = new 
Gtk.TreeViewColumn ();
                        countsColumn.Title = "Counts";
+                       countsColumn.Resizable = true;
 
                        Gtk.CellRendererPixbuf missingPixbufCell = new 
Gtk.CellRendererPixbuf ();
                        Gtk.CellRendererText missingTextCell = new 
Gtk.CellRendererText ();
@@ -174,16 +176,18 @@
                Gdk.Pixbuf TypePixbufFromComparisonNode (ComparisonNode node)
                {
                        switch (node.type) {
-                       case ComparisonNodeType.Assembly: return assemblyPixbuf;
-                       case ComparisonNodeType.Namespace: return 
namespacePixbuf;
-                       case ComparisonNodeType.Attribute: return 
attributePixbuf;
-                       case ComparisonNodeType.Interface: return 
interfacePixbuf;
-                       case ComparisonNodeType.Class: return classPixbuf;
-                       case ComparisonNodeType.Struct: return structPixbuf;
-                       case ComparisonNodeType.Enum: return enumPixbuf;
-                       case ComparisonNodeType.Method: return methodPixbuf;
-                       case ComparisonNodeType.Property: return propertyPixbuf;
-                       case ComparisonNodeType.Field: return fieldPixbuf;
+                       case CompType.Assembly: return assemblyPixbuf;
+                       case CompType.Namespace: return namespacePixbuf;
+                       case CompType.Attribute: return attributePixbuf;
+                       case CompType.Interface: return interfacePixbuf;
+                       case CompType.Class: return classPixbuf;
+                       case CompType.Struct: return structPixbuf;
+                       case CompType.Delegate: return delegatePixbuf;
+                       case CompType.Enum: return enumPixbuf;
+                       case CompType.Method: return methodPixbuf;
+                       case CompType.Property: return propertyPixbuf;
+                       case CompType.Field: return fieldPixbuf;
+                       case CompType.Event: return eventPixbuf;
                        }
                        return null;
                }

Modified: trunk/mono-tools/gui-compare/Comparison.cs
===================================================================
--- trunk/mono-tools/gui-compare/Comparison.cs  2007-12-12 03:17:20 UTC (rev 
91137)
+++ trunk/mono-tools/gui-compare/Comparison.cs  2007-12-12 04:07:08 UTC (rev 
91138)
@@ -8,19 +8,6 @@
 
 namespace GuiCompare {
 
-       public enum ComparisonNodeType {
-               Assembly,
-               Namespace,
-               Attribute,
-               Interface,
-               Class,
-               Struct,
-               Enum,
-               Method,
-               Property,
-               Field
-       }
-
        public enum ComparisonStatus {
                None,
                Missing,
@@ -30,7 +17,7 @@
        }
 
        public class ComparisonNode {
-               public ComparisonNode (ComparisonNodeType type,
+               public ComparisonNode (CompType type,
                                       string name)
                {
                        this.type = type;
@@ -58,7 +45,7 @@
 
 
                public ComparisonStatus status;
-               public ComparisonNodeType type;
+               public CompType type;
 
                public ComparisonNode parent;
 
@@ -72,68 +59,4 @@
 
                public List<ComparisonNode> children;
        }
-
-       /* represents the result of comparing a masterinfo to a local assembly 
*/
-       public class AssemblyComparison : ComparisonNode {
-               public AssemblyComparison (string name)
-                       : base (ComparisonNodeType.Assembly, name)
-               {
-               }
-       }
-
-       public class NamespaceComparison : ComparisonNode {
-               public NamespaceComparison (string name)
-                       : base (ComparisonNodeType.Namespace, name)
-               {
-               }
-       }
-
-       public class ClassComparison : ComparisonNode {
-               public ClassComparison (string name)
-                       : base (ComparisonNodeType.Class, name)
-               {
-               }
-       }
-
-       public class InterfaceComparison : ComparisonNode {
-               public InterfaceComparison (string name)
-                       : base (ComparisonNodeType.Interface, name)
-               {
-               }
-       }
-
-       public class StructComparison : ComparisonNode {
-               public StructComparison (string name)
-                       : base (ComparisonNodeType.Struct, name)
-               {
-               }
-       }
-
-       public class FieldComparison : ComparisonNode {
-               public FieldComparison (string name)
-                       : base (ComparisonNodeType.Field, name)
-               {
-               }
-       }
-
-       public class MethodComparison : ComparisonNode {
-               public MethodComparison (string name)
-                       : base (ComparisonNodeType.Method, name)
-               {
-               }
-       }
-
-       public class PropertyComparison : ComparisonNode {
-               public PropertyComparison (string name)
-                       : base (ComparisonNodeType.Property, name)
-               {
-               }
-       }
-
-       public class AttributeComparison : ComparisonNode {
-               public AttributeComparison (string name)
-                       : base (ComparisonNodeType.Attribute, name)
-               {
-               }
-       }
 }

Modified: trunk/mono-tools/gui-compare/MasterMetadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/MasterMetadata.cs      2007-12-12 03:17:20 UTC 
(rev 91137)
+++ trunk/mono-tools/gui-compare/MasterMetadata.cs      2007-12-12 04:07:08 UTC 
(rev 91138)
@@ -14,14 +14,12 @@
                        masterinfo = XMLAssembly.CreateFromFile (path);
                }
 
-               public override List<CompNamespace> GetNamespaces ()
+               public override List<CompNamed> GetNamespaces ()
                {
-                       List<CompNamespace> namespaces = new 
List<CompNamespace>();
+                       List<CompNamed> namespaces = new List<CompNamed>();
                        foreach (XMLNamespace ns in masterinfo.namespaces)
                                namespaces.Add (new MasterNamespace (ns));
 
-                       namespaces.Sort(delegate (CompNamespace x, 
CompNamespace y) { return String.Compare (x.Name, y.Name); });
-
                        return namespaces;
                }
 
@@ -33,30 +31,59 @@
                        : base (ns.name)
                {
                        this.ns = ns;
+
+                       delegate_list = new List<CompNamed>();
+                       enum_list = new List<CompNamed>();
+                       class_list = new List<CompNamed>();
+                       struct_list = new List<CompNamed>();
+                       interface_list = new List<CompNamed>();
+
+                       foreach (XMLClass cls in ns.types) {
+                               if (cls.type == "class")
+                                       class_list.Add (new MasterClass (cls, 
CompType.Class));
+                               else if (cls.type == "enum")
+                                       enum_list.Add (new MasterEnum (cls));
+                               else if (cls.type == "delegate")
+                                       delegate_list.Add (new MasterDelegate 
(cls));
+                               else if (cls.type == "interface")
+                                       interface_list.Add (new MasterInterface 
(cls.name));
+                               else if (cls.type == "struct")
+                                       struct_list.Add (new MasterClass (cls, 
CompType.Struct));
+                       }
                }
 
-               public override List<CompClass> GetClasses ()
+               public override List<CompNamed> GetNestedClasses ()
                {
-                       List<CompClass> classes = new List<CompClass>();
-                       foreach (XMLClass cls in ns.types)
-                               classes.Add (new MasterClass (cls));
+                       return class_list;
+               }
 
-                       classes.Sort(delegate (CompClass x, CompClass y) { 
return String.Compare (x.Name, y.Name); });
+               public override List<CompNamed> GetNestedInterfaces ()
+               {
+                       return interface_list;
+               }
 
-                       return classes;
+               public override List<CompNamed> GetNestedStructs ()
+               {
+                       return struct_list;
                }
 
-               public override List<CompInterface> GetInterfaces ()
+               public override List<CompNamed> GetNestedEnums ()
                {
-                       return new List<CompInterface>();
+                       return enum_list;
                }
 
-               public override List<CompClass> GetStructs ()
+               public override List<CompNamed> GetNestedDelegates ()
                {
-                       return new List<CompClass>();
+                       return delegate_list;
                }
 
+
                XMLNamespace ns;
+               List<CompNamed> delegate_list;
+               List<CompNamed> enum_list;
+               List<CompNamed> class_list;
+               List<CompNamed> struct_list;
+               List<CompNamed> interface_list;
        }
 
        public class MasterInterface : CompInterface {
@@ -64,19 +91,94 @@
                        : base (name)
                {
                }
+
+               public override List<CompNamed> GetInterfaces ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetMethods ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetConstructors ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetProperties()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetFields()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetEvents()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
        }
 
-       public class MasterClass : CompClass {
-               public MasterClass (XMLClass cls)
+       public class MasterDelegate : CompDelegate {
+               public MasterDelegate (XMLClass cls)
                        : base (cls.name)
                {
                        xml_cls = cls;
                }
 
-               public override List<CompInterface> GetInterfaces ()
+               XMLClass xml_cls;
+       }
+
+       public class MasterEnum : CompEnum {
+               public MasterEnum (XMLClass cls)
+                       : base (cls.name)
                {
-                       List<CompInterface> rv = new List<CompInterface>();
+                       xml_cls = cls;
+               }
 
+               public override List<CompNamed> GetFields()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+
+               XMLClass xml_cls;
+       }
+
+       public class MasterClass : CompClass {
+               public MasterClass (XMLClass cls, CompType type)
+                       : base (cls.name, type)
+               {
+                       xml_cls = cls;
+               }
+
+               public override List<CompNamed> GetInterfaces ()
+               {
+                       List<CompNamed> rv = new List<CompNamed>();
+
                        if (xml_cls.interfaces != null) {
                                foreach (object i in 
xml_cls.interfaces.keys.Keys) {
                                        rv.Add (new MasterInterface 
((string)xml_cls.interfaces.keys[i]));
@@ -87,38 +189,80 @@
                        return rv;
                }
 
-               public override List<CompMethod> GetMethods()
+               public override List<CompNamed> GetMethods()
                {
-                       List<CompMethod> rv = new List<CompMethod>();
+                       List<CompNamed> rv = new List<CompNamed>();
                        if (xml_cls.methods != null) {
                                foreach (object key in 
xml_cls.methods.keys.Keys) {
                                        rv.Add (new MasterMethod 
((string)xml_cls.methods.keys[key]));
                                }
                        }
 
-                       rv.Sort (delegate (CompMethod x, CompMethod y) { return 
String.Compare (x.Name, y.Name); });
-
                        return rv;
                }
 
-               public override List<CompMethod> GetConstructors()
+               public override List<CompNamed> GetConstructors()
                {
-                       return new List<CompMethod>();
+                       return new List<CompNamed>();
                }
 
-               public override List<CompClass> GetNestedClasses()
+               public override List<CompNamed> GetProperties()
                {
-                       List<CompClass> rv = new List<CompClass>();
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetFields()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetEvents()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetNestedClasses()
+               {
+                       List<CompNamed> rv = new List<CompNamed>();
                        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); });
+                                       rv.Add (new MasterClass (nested, 
CompType.Class));
                        }
 
                        return rv;
                }
 
+               public override List<CompNamed> GetNestedInterfaces ()
+               {
+                       return new List<CompNamed>();;
+               }
+
+               public override List<CompNamed> GetNestedStructs ()
+               {
+                       return new List<CompNamed>();;
+               }
+
+               public override List<CompNamed> GetNestedEnums ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
+               public override List<CompNamed> GetNestedDelegates ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
                XMLClass xml_cls;
        }
 
@@ -128,5 +272,12 @@
                        : base (name)
                {
                }
+
+               public override List<CompNamed> GetAttributes ()
+               {
+                       // XXX
+                       return new List<CompNamed>();
+               }
+
        }
 }

Modified: trunk/mono-tools/gui-compare/Masterinfo.cs
===================================================================
--- trunk/mono-tools/gui-compare/Masterinfo.cs  2007-12-12 03:17:20 UTC (rev 
91137)
+++ trunk/mono-tools/gui-compare/Masterinfo.cs  2007-12-12 04:07:08 UTC (rev 
91138)
@@ -628,7 +628,7 @@
        public class XMLClass : XMLData
        {
                public string name;
-               string type;
+               public string type;
                string baseName;
                bool isSealed;
                bool isSerializable;

Modified: trunk/mono-tools/gui-compare/Metadata.cs
===================================================================
--- trunk/mono-tools/gui-compare/Metadata.cs    2007-12-12 03:17:20 UTC (rev 
91137)
+++ trunk/mono-tools/gui-compare/Metadata.cs    2007-12-12 04:07:08 UTC (rev 
91138)
@@ -9,14 +9,50 @@
 
 namespace GuiCompare {
 
+       public enum CompType {
+               Assembly,
+               Namespace,
+               Attribute,
+               Interface,
+               Class,
+               Struct,
+               Enum,
+               Method,
+               Property,
+               Field,
+               Delegate,
+               Event
+       }
+
+       public interface ICompAttributeContainer
+       {
+               List<CompNamed> GetAttributes ();
+       }
+
+       public interface ICompTypeContainer
+       {
+               List<CompNamed> GetNestedClasses();
+               List<CompNamed> GetNestedInterfaces ();
+               List<CompNamed> GetNestedStructs ();
+               List<CompNamed> GetNestedEnums ();
+               List<CompNamed> GetNestedDelegates ();
+       }
+
+       public interface ICompMemberContainer
+       {
+               List<CompNamed> GetInterfaces ();
+               List<CompNamed> GetConstructors();
+               List<CompNamed> GetMethods();
+               List<CompNamed> GetProperties();
+               List<CompNamed> GetFields();
+               List<CompNamed> GetEvents();
+       }
+
        public abstract class CompNamed {
-               public CompNamed ()
+               public CompNamed (string name, CompType type)
                {
-               }
-
-               public CompNamed (string name)
-               {
                        this.name = name;
+                       this.type = type;
                }
 
                public string Name {
@@ -24,61 +60,145 @@
                        get { return name; }
                }
 
+               public CompType Type {
+                       set { type = value; }
+                       get { return type; }
+               }
+
+               public ComparisonNode GetComparisonNode ()
+               {
+                       return new ComparisonNode (type, name);
+               }
+
+               public static int Compare (CompNamed x, CompNamed y)
+               {
+                       return String.Compare (x.Name, y.Name);
+               }
+
                string name;
+               CompType type;
        }
 
        public abstract class CompAssembly : CompNamed {
                public CompAssembly (string name)
-                       : base (name)
+                       : base (name, CompType.Assembly)
                {
                }
 
-               public abstract List<CompNamespace> GetNamespaces();
+               public abstract List<CompNamed> GetNamespaces();
        }
 
-       public abstract class CompNamespace : CompNamed {
+       public abstract class CompNamespace : CompNamed, ICompTypeContainer {
                public CompNamespace (string name)
-                       : base (name)
+                       : base (name, CompType.Namespace)
                {
                }
 
-               public abstract List<CompClass> GetClasses();
-               public abstract List<CompInterface> GetInterfaces ();
-               public abstract List<CompClass> GetStructs ();
+               // ICompTypeContainer implementation
+               public abstract List<CompNamed> GetNestedClasses();
+               public abstract List<CompNamed> GetNestedInterfaces ();
+               public abstract List<CompNamed> GetNestedStructs ();
+               public abstract List<CompNamed> GetNestedEnums ();
+               public abstract List<CompNamed> GetNestedDelegates ();
        }
 
-       public interface ICompAttributeContainer
-       {
-//             public List<CompAttribute> GetAttributes ();
+       public abstract class CompInterface : CompNamed, 
ICompAttributeContainer, ICompMemberContainer {
+               public CompInterface (string name)
+                       : base (name, CompType.Interface)
+               {
+               }
+
+               public abstract List<CompNamed> GetAttributes ();
+
+               public abstract List<CompNamed> GetInterfaces ();
+               public abstract List<CompNamed> GetConstructors();
+               public abstract List<CompNamed> GetMethods();
+               public abstract List<CompNamed> GetProperties();
+               public abstract List<CompNamed> GetFields();
+               public abstract List<CompNamed> GetEvents();
        }
 
-       public abstract class CompInterface : CompNamed, 
ICompAttributeContainer {
-               public CompInterface (string name)
-                       : base (name)
+       public abstract class CompEnum : CompNamed, ICompAttributeContainer, 
ICompMemberContainer {
+               public CompEnum (string name)
+                       : base (name, CompType.Enum)
                {
                }
+
+               public List<CompNamed> GetInterfaces () { return new 
List<CompNamed>(); }
+               public List<CompNamed> GetConstructors() { return new 
List<CompNamed>(); }
+               public List<CompNamed> GetMethods() { return new 
List<CompNamed>(); }
+               public List<CompNamed> GetProperties() { return new 
List<CompNamed>(); }
+               public List<CompNamed> GetEvents() { return new 
List<CompNamed>(); }
+
+               public abstract List<CompNamed> GetFields();
+
+               public abstract List<CompNamed> GetAttributes ();
        }
 
-       public abstract class CompClass : CompNamed, ICompAttributeContainer {
-               public CompClass (string name)
-                       : base (name)
+       public abstract class CompDelegate : CompNamed {
+               public CompDelegate (string name)
+                       : base (name, CompType.Delegate)
                {
                }
 
-               public abstract List<CompInterface> GetInterfaces ();
-               public abstract List<CompMethod>    GetConstructors();
-               public abstract List<CompMethod>    GetMethods();
-//             public abstract List<CompProperty>  GetProperties();
-//             public abstract List<CompField>     GetFields();
-//             public abstract List<CompEvent>     GetEvents();
+       }
 
-               public abstract List<CompClass>  GetNestedClasses();
+       public abstract class CompClass : CompNamed, ICompAttributeContainer, 
ICompTypeContainer, ICompMemberContainer {
+               public CompClass (string name, CompType type)
+                       : base (name, type)
+               {
+               }
+
+               public abstract List<CompNamed> GetInterfaces();
+               public abstract List<CompNamed> GetConstructors();
+               public abstract List<CompNamed> GetMethods();
+               public abstract List<CompNamed> GetProperties();
+               public abstract List<CompNamed> GetFields();
+               public abstract List<CompNamed> GetEvents();
+
+               public abstract List<CompNamed> GetAttributes ();
+
+               public abstract List<CompNamed> GetNestedClasses();
+               public abstract List<CompNamed> GetNestedInterfaces ();
+               public abstract List<CompNamed> GetNestedStructs ();
+               public abstract List<CompNamed> GetNestedEnums ();
+               public abstract List<CompNamed> GetNestedDelegates ();
        }
 
-       public abstract class CompMethod : CompNamed, ICompAttributeContainer {
+       public abstract class CompMember : CompNamed, ICompAttributeContainer {
+               public CompMember (string name, CompType type)
+                       : base (name, type)
+               {
+               }
+
+               public abstract List<CompNamed> GetAttributes ();
+       }
+
+       public abstract class CompMethod : CompMember {
                public CompMethod (string name)
-                       : base (name)
+                       : base (name, CompType.Method)
                {
                }
        }
+
+       public abstract class CompProperty : CompMember {
+               public CompProperty (string name)
+                       : base (name, CompType.Property)
+               {
+               }
+       }
+
+       public abstract class CompField : CompMember {
+               public CompField (string name)
+                       : base (name, CompType.Field)
+               {
+               }
+       }
+
+       public abstract class CompEvent : CompMember {
+               public CompEvent (string name)
+                       : base (name, CompType.Event)
+               {
+               }
+       }
 }

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

Reply via email to