예제 #1
0
        /// <summary>
        /// Find parents for any orphans
        /// </summary>
        /// <returns></returns>
        private static bool FindParents(Hashtable classMappings)
        {
            if (children.Count == 0)
            {
                // No parents to find
                return(false);
            }
            else
            {
                bool found = false;

                foreach (SubclassMapping child in children)
                {
                    if (child.Orphaned)
                    {
                        ClassMapping superclass = (ClassMapping)allMaps[child.SuperClass];
                        if (superclass != null)
                        {
                            ClassMapping subclassMapping =
                                new ClassMapping(child.ClassPackage, child.MappingElement, superclass.ClassName, superclass, child.Clazz,
                                                 child.MultiMap);
                            superclass.AddSubClass(subclassMapping);
                            // NB Can't remove it from the iterator, so record that we've found the parent.
                            child.Orphaned = false;
                            found          = true;
                        }
                    }
                }

                // Tell them if we found any
                return(found);
            }
        }
예제 #2
0
        private static void HandleClass(string classPackage, MappingElement me, Hashtable classMappings,
                                        IEnumerator classElements, MultiMap mm, bool extendz)
        {
            while (classElements.MoveNext())
            {
                Element clazz = (Element)classElements.Current;

                if (!extendz)
                {
                    ClassMapping cmap = new ClassMapping(classPackage, clazz, me, mm);
                    SupportClass.PutElement(classMappings, cmap.FullyQualifiedName, cmap);
                    SupportClass.PutElement(allMaps, cmap.FullyQualifiedName, cmap);
                }
                else
                {
                    string ex = clazz.Attributes["extends"] == null ? null : clazz.Attributes["extends"].Value;
                    if ((object)ex == null)
                    {
                        throw new MappingException("Missing extends attribute on <" + clazz.LocalName + " name=" +
                                                   clazz.Attributes["name"].Value + ">");
                    }

                    int commaIndex = ex.IndexOf(',');
                    if (commaIndex > -1)
                    {
                        //suppress the leading AssemblyName
                        ex = ex.Substring(0, commaIndex).Trim();
                    }

                    ClassMapping superclass = (ClassMapping)allMaps[ex];
                    if (superclass == null)
                    {
                        // Haven't seen the superclass yet, so record this and process at the end
                        SubclassMapping orphan = new SubclassMapping(classPackage, me, ex, clazz, mm);
                        children.Add(orphan);
                    }
                    else
                    {
                        ClassMapping subclassMapping = new ClassMapping(classPackage, me, superclass.ClassName, superclass, clazz, mm);
                        superclass.AddSubClass(subclassMapping);
                        SupportClass.PutElement(allMaps, subclassMapping.FullyQualifiedName, subclassMapping);
                    }
                }
            }
        }