예제 #1
0
        /// <summary>
        /// Function that should evaluate <see cref="UserType.Members"/> property.
        /// </summary>
        protected override IEnumerable <UserTypeMember> GetMembers()
        {
            UserTypeMember[] members = SpecializedRepresentative.Members;

            for (int i = 0; i < members.Length; i++)
            {
                if (members[i] is ConstantUserTypeMember originalConstant)
                {
                    // Verify that value of this constant is the same in all specializations
                    bool same = true;

                    foreach (SpecializedTemplateUserType specialization in Specializations)
                    {
                        UserTypeMember m = specialization.Members.FirstOrDefault(mm => mm.Name == originalConstant.Name);

                        if (m == null)
                        {
                            continue;
                        }

                        if (!(m is ConstantUserTypeMember constant) || originalConstant.Value.ToString() != constant.Value.ToString())
                        {
                            same = false;
                            break;
                        }
                    }

                    // If constant is not the same in all specializations, it needs to be read from the code type.
                    if (!same)
                    {
                        yield return new DataFieldUserTypeMember()
                               {
                                   AccessLevel = originalConstant.AccessLevel,
                                   Symbol      = originalConstant.Symbol,
                                   Name        = originalConstant.Name,
                                   Type        = originalConstant.Type,
                                   UserType    = originalConstant.UserType,
                               }
                    }
                    ;
                    else
                    {
                        yield return(members[i]);
                    }
                }
                else
                {
                    yield return(members[i]);
                }
            }
        }
예제 #2
0
        public void CreateSimpleType()
        {
            var typeName = ObjectName.Parse("APP.type1");
            var members  = new UserTypeMember[] {
                new UserTypeMember("id", PrimitiveTypes.Integer()),
                new UserTypeMember("name", PrimitiveTypes.VarChar())
            };

            var statement = new CreateTypeStatement(typeName, members);

            SerializeAndAssert(statement, (serialized, deserialized) => {
                Assert.IsNotNull(deserialized);
                Assert.IsNotNull(deserialized.TypeName);
                Assert.AreEqual(typeName, deserialized.TypeName);
                Assert.IsNotNull(deserialized.Members);
                Assert.IsNotEmpty(deserialized.Members);
                Assert.AreEqual(2, deserialized.Members.Length);
            });
        }