public virtual void GenerateTablesForClasses(IDomainMap sourceDomainMap, IDomainMap targetDomainMap, bool generateMappings, bool onlyForComputed)
 {
     IList propertyMaps = new ArrayList();
     IList allPropertyMaps;
     bool ok = false;
     IList classMaps = sourceDomainMap.GetPersistentClassMaps();
     foreach (IClassMap classMap in classMaps)
     {
         if (!(classMap.SourceClass.Length > 0))
         {
             ISourceMap sourceMap = classMap.GetSourceMap();
             if (onlyForComputed && sourceMap != null && sourceMap.Compute)
             {
                 if (!((classMap.IsAbstract & (classMap.InheritanceType == InheritanceType.None || (classMap.InheritanceType == InheritanceType.ConcreteTableInheritance & !(classMap.GetInheritedClassMap() == null))))))
                 {
                     if (classMap.GetTableMap() == null)
                     {
                         CreateTableForClass(classMap, targetDomainMap, generateMappings);
                     }
                     if (classMap.TypeColumn.Length > 0 || classMap.InheritanceType != InheritanceType.None)
                     {
                         if (classMap.GetTypeColumnMap() == null)
                         {
                             CreateTypeColumnForClass(classMap, targetDomainMap, generateMappings);
                         }
                     }
                 }
             }
         }
     }
     foreach (IClassMap classMap in classMaps)
     {
         if (!(classMap.SourceClass.Length > 0))
         {
             ISourceMap sourceMap = classMap.GetSourceMap();
             if (onlyForComputed && sourceMap != null && sourceMap.Compute)
             {
                 if (!((classMap.IsAbstract & (classMap.InheritanceType == InheritanceType.None || (classMap.InheritanceType == InheritanceType.ConcreteTableInheritance & !(classMap.GetInheritedClassMap() == null))))))
                 {
                     if (classMap.InheritanceType == InheritanceType.None)
                     {
                         propertyMaps = classMap.GetAllPropertyMaps();
                     }
                     else if (classMap.InheritanceType == InheritanceType.SingleTableInheritance || classMap.InheritanceType == InheritanceType.ClassTableInheritance)
                     {
                         propertyMaps = classMap.GetNonInheritedPropertyMaps();
                     }
                     else if (classMap.InheritanceType == InheritanceType.ConcreteTableInheritance)
                     {
                         if (classMap.GetInheritedClassMap() == null)
                         {
                             propertyMaps = classMap.GetAllPropertyMaps();
                         }
                         else
                         {
                             allPropertyMaps = classMap.GetAllPropertyMaps();
                             propertyMaps = new ArrayList();
                             foreach (IPropertyMap addPropertyMap in allPropertyMaps)
                             {
                                 if (!(addPropertyMap.IsIdentity))
                                 {
                                     propertyMaps.Add(addPropertyMap);
                                 }
                             }
                         }
                     }
                     foreach (IPropertyMap propertyMap in propertyMaps)
                     {
                         ISourceMap propSourceMap = propertyMap.GetSourceMap();
                         if (onlyForComputed && propSourceMap != null && propSourceMap.Compute)
                         {
                             if (!(propertyMap.InheritInverseMappings))
                             {
                                 if (propertyMap.Table.Length > 0 || propertyMap.IsCollection || IsOutbrokenByInheritance(propertyMap, classMap))
                                 {
                                     ok = true;
                                     if (propertyMap.IsCollection)
                                     {
                                         if (propertyMap.ReferenceType == ReferenceType.ManyToOne)
                                         {
                                             ok = false;
                                         }
                                     }
                                     if (ok)
                                     {
                                         if (propertyMap.GetTableMap() == null)
                                         {
                                             CreateTableForProperty(propertyMap, targetDomainMap, generateMappings);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     foreach (IClassMap classMap in classMaps)
     {
         if (!(classMap.SourceClass.Length > 0))
         {
             ISourceMap sourceMap = classMap.GetSourceMap();
             if (onlyForComputed && sourceMap != null && sourceMap.Compute)
             {
                 if (!((classMap.IsAbstract & (classMap.InheritanceType == InheritanceType.None || (classMap.InheritanceType == InheritanceType.ConcreteTableInheritance & !(classMap.GetInheritedClassMap() == null))))))
                 {
                     if (classMap.InheritanceType == InheritanceType.None)
                     {
                         propertyMaps = classMap.GetAllPropertyMaps();
                     }
                     else if (classMap.InheritanceType == InheritanceType.SingleTableInheritance || classMap.InheritanceType == InheritanceType.ClassTableInheritance)
                     {
                         propertyMaps = classMap.GetNonInheritedPropertyMaps();
                     }
                     else if (classMap.InheritanceType == InheritanceType.ConcreteTableInheritance)
                     {
                         if (classMap.GetInheritedClassMap() == null)
                         {
                             propertyMaps = classMap.GetAllPropertyMaps();
                         }
                         else
                         {
                             allPropertyMaps = classMap.GetAllPropertyMaps();
                             propertyMaps = new ArrayList();
                             foreach (IPropertyMap addPropertyMap in allPropertyMaps)
                             {
                                 if (!(addPropertyMap.IsIdentity))
                                 {
                                     propertyMaps.Add(addPropertyMap);
                                 }
                             }
                         }
                     }
                     foreach (IPropertyMap propertyMap in propertyMaps)
                     {
                         ISourceMap propSourceMap = propertyMap.GetSourceMap();
                         if (onlyForComputed && propSourceMap != null && propSourceMap.Compute)
                         {
                             if (!(propertyMap.InheritInverseMappings))
                             {
                                 ok = true;
                                 if (propertyMap.IsCollection)
                                 {
                                     if (propertyMap.ReferenceType == ReferenceType.ManyToOne)
                                     {
                                         ok = false;
                                     }
                                 }
                                 if (ok)
                                 {
                                     if (propertyMap.IdColumn.Length > 0 || propertyMap.IsCollection || propertyMap.Table.Length > 0 || IsOutbrokenByInheritance(propertyMap, classMap))
                                     {
                                         if (propertyMap.GetIdColumnMap() == null)
                                         {
                                             CreateIDColumnForProperty(propertyMap, targetDomainMap, generateMappings, classMap);
                                         }
                                     }
                                     if (propertyMap.GetColumnMap() == null)
                                     {
                                         CreateColumnForProperty(propertyMap, targetDomainMap, generateMappings, classMap);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }