private Contracts.IGeneratedItem CreateEntityFromContract(Type type, Common.ItemType itemType) { type.CheckArgument(nameof(type)); var baseItfc = GetPersistenceBaseContract(type); var contractHelper = new ContractHelper(type); var result = new Models.GeneratedItem(Common.UnitType.Logic, itemType) { FullName = CreateEntityFullNameFromInterface(type), FileExtension = StaticLiterals.CSharpFileExtension, }; result.SubFilePath = $"{result.FullName}{result.FileExtension}"; CreateEntityAttributes(type, result.Source); result.Add($"partial class {contractHelper.EntityName} : {type.FullName}"); result.Add("{"); result.AddRange(CreatePartialStaticConstrutor(contractHelper.EntityName)); result.AddRange(CreatePartialConstrutor("public", contractHelper.EntityName)); foreach (var item in ContractHelper.GetEntityProperties(type).Where(p => CanCreateProperty(type, p.Name))) { var codeLines = new List <string>(CreateProperty(item)); AfterCreateProperty(type, item, codeLines); result.AddRange(codeLines); } result.AddRange(CreateCopyProperties(type)); result.AddRange(CreateEquals(type)); result.AddRange(CreateGetHashCode(type)); result.AddRange(CreateFactoryMethods(type, baseItfc != null)); result.Add("}"); result.EnvelopeWithANamespace(CreateNameSpace(type), "using System;"); result.FormatCSharpCode(); return(result); }
private Contracts.IGeneratedItem CreateDelegateProperties(Type type, Type delegateType, string delegateObjectName, Common.UnitType unitType, Common.ItemType itemType) { type.CheckArgument(nameof(type)); delegateType.CheckArgument(nameof(delegateType)); var modelName = CreateModelNameFromInterface(type); var typeProperties = ContractHelper.GetAllProperties(delegateType); var result = new Models.GeneratedItem(unitType, itemType) { FullName = CreateModelFullNameFromInterface(type), FileExtension = StaticLiterals.CSharpFileExtension, }; result.SubFilePath = $"{result.FullName}{result.FileExtension}"; CreateModelAttributes(type, result.Source); result.Add($"public partial class {modelName}"); result.Add("{"); foreach (var item in ContractHelper.FilterPropertiesForGeneration(typeProperties)) { var propertyType = GetPropertyType(item); if (item.CanRead || item.CanWrite) { CreateModelPropertyAttributes(delegateType, item, result.Source); result.Add($"public {propertyType} {item.Name}"); result.Add("{"); if (item.CanRead) { result.Add($"get => {delegateObjectName}.{item.Name};"); } if (item.CanWrite) { result.Add($"set => {delegateObjectName}.{item.Name} = value;"); } result.Add("}"); } } result.Add("}"); result.EnvelopeWithANamespace(CreateModelsNamespace(type), "using System;"); result.FormatCSharpCode(); return(result); }
private Contracts.IGeneratedItem CreateModelFromContract(Type type, Common.UnitType unitType, Common.ItemType itemType) { type.CheckArgument(nameof(type)); var modelName = CreateModelNameFromInterface(type); var typeProperties = ContractHelper.GetAllProperties(type); var interfaces = GetInterfaces(type); var result = new Models.GeneratedItem(unitType, itemType) { FullName = CreateModelFullNameFromInterface(type), FileExtension = StaticLiterals.CSharpFileExtension, }; result.SubFilePath = $"{result.FullName}{result.FileExtension}"; CreateModelAttributes(type, result.Source); result.Add($"public partial class {modelName} : {type.FullName}"); result.Add("{"); result.AddRange(CreatePartialStaticConstrutor(modelName)); result.AddRange(CreatePartialConstrutor("public", modelName)); foreach (var item in ContractHelper.FilterPropertiesForGeneration(typeProperties)) { CreateModelPropertyAttributes(type, item, result.Source); result.AddRange(CreateProperty(item)); } result.AddRange(CreateCopyProperties(type)); foreach (var item in interfaces.Where(e => ContractHelper.HasCopyable(e))) { result.AddRange(CreateCopyProperties(item)); } result.AddRange(CreateFactoryMethods(type, false)); result.Add("}"); result.EnvelopeWithANamespace(CreateModelsNamespace(type), "using System;"); result.FormatCSharpCode(); return(result); }