private void Build(IModelRoot modelRoot) { var inheritanceTrees = InheritanceTreeCache.Get(modelRoot.TopHierarchyTypes.ToArray()); foreach (var tree in inheritanceTrees) { if (!tree.TreeRebuilded) { tree.RebuildTree(true); } } var mergePaths = InheritanceTree.MergePaths(inheritanceTrees); var dependencyImplementationFlatList = InheritanceTree.GetDependencyImplementationFlatList(mergePaths); foreach (var @interface in dependencyImplementationFlatList) { IPropertiesBuilder propertiesBuilder = PropertiesBuilder.Build(@interface); lock (sync) { propertiesBuilders.Add(@interface, propertiesBuilder); } } // process rest types (e.g. with no inheritance defined) foreach (var @interface in modelRoot.PersistentTypes.Except(dependencyImplementationFlatList)) { IPropertiesBuilder propertiesBuilder = PropertiesBuilder.Build(@interface); lock (sync) { propertiesBuilders.Add(@interface, propertiesBuilder); } } }
public static PropertiesBuilder Build(IPersistentType persistentType) { PropertiesBuilder builder = new PropertiesBuilder(persistentType); builder.Prepare(); return(builder); }