/// <summary> /// /// </summary> /// <param name="interfaceBuilder"></param> /// <param name="builder"></param> /// <param name="block"></param> internal GenericUserInterfaceBlockBuilder(IGenericInterfaceBuilder interfaceBuilder, CrocoTypeDescriptionBuilder builder, UserInterfaceBlock block) { InterfaceBuilder = interfaceBuilder; DocsBuilder = builder; Block = block; DescribedType = DocsBuilder.GetTypeDescriptionResult(typeof(TProp)); }
/// <summary> /// Создать из типа /// </summary> /// <param name="type"></param> /// <param name="valueJson"></param> /// <param name="opts"></param> /// <returns></returns> private GenerateGenericUserInterfaceModel CreateFromType(Type type, string valueJson = null, GenericInterfaceOptions opts = null) { var desc = TypeDescriptionBuilder.GetTypeDescriptionResult(type); var main = desc.GetMainTypeDescription(); if (!main.IsClass) { throw new InvalidOperationException(ExceptionTexts.NonComplexTypesAreNotSupported); } var typeChecker = new CrocoClassDescriptionChecker(); if (typeChecker.IsRecursiveType(desc)) { throw new InvalidOperationException(ExceptionTexts.RecursiveTypesAreNotSupported); } if (typeChecker.HasMultiDimensionalArrays(desc)) { throw new InvalidOperationException(ExceptionTexts.ClassesWithMultiDimensionalArrayPropertiesAreNotSupported); } if (opts == null) { opts = GenericInterfaceOptions.Default(); } var prefix = string.Empty; var blocks = GenericUserInterfaceModelBuilderExtensions.GetBlocks(prefix, desc.GetMainTypeDescription(), desc, opts); return(new GenerateGenericUserInterfaceModel { TypeDescription = desc, Interface = new GenericInterfaceModel { Prefix = prefix, Blocks = blocks }, ValueJson = valueJson }); }