示例#1
0
 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));
 }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }