public static CodeTypeDeclaration CreateDtoDeclaration( SemanticModel model, NamespaceName namespaceName, DtoDeclaration declaration) { return(CreateTypeWithValueSemantics( ValueObjectSpecification.CreateClass( namespaceName, declaration.Name, declaration.Properties.ToArray(), new BaseTypes(new TypeName[0]), true, true), model.KnownTypes)); }
public static CodeTypeDeclaration CreateCommandDeclaration( SemanticModel model, NamespaceName namespaceName, CommandDeclaration declaration, CommandConventions conventions) { var type = CreateTypeWithValueSemantics( ValueObjectSpecification.CreateClass( namespaceName, declaration.Name, declaration.Properties.ToArray(), conventions.BaseTypes, true, false), model.KnownTypes); return(type); }
public static CodeTypeDeclaration CreateValueTypeDeclaration( SemanticModel model, NamespaceName namespaceName, ValueTypeDeclaration declaration) { var result = CreateTypeWithValueSemantics( ValueObjectSpecification.CreateStruct( namespaceName, declaration.Name, declaration.Properties.ToArray(), new BaseTypes(new TypeName[0]), false), model.KnownTypes); if (declaration.Properties.Count() == 1) { AddDebuggerDisplayAttribute(declaration, result); } AddToString(declaration, result); return(result); }
protected static CodeTypeDeclaration CreateTypeWithValueSemantics(ValueObjectSpecification specification, IEnumerable <KnownType> knownTypes) { var knownTypesList = knownTypes.ToList(); var result = new CodeTypeDeclaration(specification.Name) { IsStruct = specification.IsValueType, IsPartial = true, IsClass = !specification.IsValueType, TypeAttributes = TypeAttributes.Public }; if (specification.IsSealed) { result.TypeAttributes |= TypeAttributes.Sealed; } if (specification.IsDataContract) { result.CustomAttributes.Add(CreateDataContractAttribute(specification.Name)); } result.CustomAttributes.Add(CreateAttribute(typeof(SerializableAttribute))); var readOnlyProperties = ReadOnlyProperties( specification.Properties, specification.IsDataContract, specification.Namespace, knownTypesList).ToList(); foreach (var baseType in specification.BaseTypes.TypeNames) { result.BaseTypes.Add(baseType.Name); } result.BaseTypes.AddRange(CreateImplementsIEquatableOf(specification.Name)); result.Members.AddRange(CreateConstructorAssigningBackingFieldsFor(readOnlyProperties)); result.Members.AddRange(CreateReadOnlyProperties(readOnlyProperties)); result.Members.AddRange(CreateEqualityOperatorOverloading(specification.Name, specification.IsValueType)); result.Members.AddRange(CreateGetHashCode(specification.Properties, specification.Namespace, knownTypesList)); result.Members.AddRange(CreateEqualsOverloadingUsingEqualityOperator(specification.Name, specification.IsValueType, specification.Properties)); return(result); }