public SchemaTypeBuilder(SchemaDocument document, ModuleBuilder moduleBuilder, SchemaBasicReaderBuilder basicBuilder) { Document = document; BasicTypeDescriptions = basicBuilder; CompoundTypes = document.Compounds .ToDictionary(kvp => kvp.Value, kvp => BuildCompoundType(moduleBuilder, kvp.Value)); NiObjectTypes = document.NiObjects .ToDictionary(kvp => kvp.Value, kvp => BuildNiObjectType(moduleBuilder, kvp.Value)); EnumTypes = document.Enums .ToDictionary(kvp => kvp.Value, kvp => BuildEnumType(moduleBuilder, kvp.Value, document)); BitFieldTypes = document.Bitfields .ToDictionary(kvp => kvp.Value, kvp => BuildBitfieldType(moduleBuilder, kvp.Value)); BitflagsTypes = document.Bitflags .ToDictionary(kvp => kvp.Value, kvp => BuildBitflagType(moduleBuilder, kvp.Value, document)); BuiltTypesByName = new List <(string, TypeBuilder)>() .Concat(CompoundTypes.Select(kvp => (kvp.Key.Name, kvp.Value))) .Concat(NiObjectTypes.Select(kvp => (kvp.Key.Name, kvp.Value))) .Concat(BitFieldTypes.Select(kvp => (kvp.Key.Name, kvp.Value))) .ToDictionary(pair => pair.Item1, pair => pair.Item2); BuiltEnumsByName = new List <(string, EnumBuilder)>() .Concat(EnumTypes.Select(kvp => (kvp.Key.Name, kvp.Value))) .Concat(BitflagsTypes.Select(kvp => (kvp.Key.Name, kvp.Value))) .ToDictionary(pair => pair.Item1, pair => pair.Item2); SchemaTypesByName = new List <(string, Type)>() .Concat(BasicTypeDescriptions.BasicDescriptions.Select(kvp => (kvp.Key.Name, kvp.Value.UnderlyingType))) .Concat(BuiltTypesByName.Select(kvp => (kvp.Key, kvp.Value as Type))) .Concat(BuiltEnumsByName.Select(kvp => (kvp.Key, kvp.Value as Type))) .ToDictionary(pair => pair.Item1, pair => pair.Item2); TemplateTypeByName = CompoundTypes .ToDictionary(c => c.Key.Name, c => BuildTemplateType(c.Value, c.Key)); }