Exemplo n.º 1
0
        public void SetWithArg_stringToMemberOfType_expected <T>(string toSet, T expected)
        {
            FieldSample <T> sample = new FieldSample <T>();

            MemberAttribute fieldAttr = new MemberAttribute(new NArgAttribute(), GetSingleMemberInfo(sample, "_field"));

            MemberSetter.SetArg(sample, fieldAttr, toSet);

            MemberAttribute propAttr = new MemberAttribute(new NArgAttribute(), GetSingleMemberInfo(sample, "TestProp"));

            MemberSetter.SetArg(sample, propAttr, toSet);

            MemberAttribute methodAttr = new MemberAttribute(new NArgAttribute(), GetSingleMemberInfo(sample, "TestMethod"));

            MemberSetter.SetArg(sample, methodAttr, toSet);

            MemberAttribute methodWithNoArgsAttr = new MemberAttribute(new NArgAttribute(), GetSingleMemberInfo(sample, "TestMethodWithNoArgs"));

            MemberSetter.SetArg(sample, methodWithNoArgsAttr, toSet);

            Assert.That(sample.FieldProp, Is.EqualTo(expected));
            Assert.That(sample.TestProp, Is.EqualTo(expected));
            Assert.That(sample.TestMethodProp, Is.EqualTo(expected));
            Assert.That(sample.HasTestMethodWithNoArgsExecuted, Is.True);
        }
Exemplo n.º 2
0
 public void AddAttribute(MemberAttribute attribute)
 {
     if (!this.HasAttribute(attribute))
     {
         this.Attributes.Add(attribute);
     }
 }
Exemplo n.º 3
0
        private void InitializeAttributeMapping(MemberAttribute attribute, bool isEnumerableType)
        {
            var column      = attribute as ColumnAttribute;
            var association = attribute as AbstractAssociationAttribute;

            if (attribute.Storage.HasValue())
            {
                storageMember = entity.entityType.GetMember(attribute.Storage.Trim(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault();
                if (storageMember != null && storageMember.MemberType != MemberTypes.Field &&
                    storageMember.MemberType != MemberTypes.Property)
                {
                    storageMember = null;
                }
            }

            isColumn = column != null;
            if (isColumn)
            {
                IntiailizeColumnAttribute(column);
            }

            isRelationship = association != null;

            if (isRelationship)
            {
                InitializeAssociationAttribute(isEnumerableType, association);
            }
        }
Exemplo n.º 4
0
        internal MemberMapping(MemberInfo member, MemberAttribute attribute, EntityMapping entity)
        {
            this.member = member;
            this.entity = entity;

            memberType = member.GetMemberType();
            var isEnumerableType = memberType != Types.String &&
                                   memberType != typeof(byte[]) &&
                                   Types.IEnumerable.IsAssignableFrom(memberType);

            if (attribute == null)
            {
                InitializeConversionMapping(isEnumerableType);
            }
            else
            {
                InitializeAttributeMapping(attribute, isEnumerableType);
            }

            getter = member.GetGetter();
            if (storageMember != null)
            {
                setter = storageMember.GetSetter();
            }
            else
            {
                setter = member.GetSetter();
            }
            if (columnName == null)
            {
                columnName = member.Name;
            }
        }
Exemplo n.º 5
0
        internal MemberMapping(MemberInfo member, MemberAttribute attribute, EntityMapping entity)
        {
            this.member = member;
            this.entity = entity;

            memberType = member.GetMemberType();
            var isEnumerableType = memberType != Types.String
                && memberType != typeof(byte[])
                && Types.IEnumerable.IsAssignableFrom(memberType);

            if (attribute == null)
            {
                InitializeConversionMapping(isEnumerableType);
            }
            else
                InitializeAttributeMapping(attribute, isEnumerableType);

            getter = member.GetGetter();
            if (storageMember != null)
                setter = storageMember.GetSetter();
            else
                setter = member.GetSetter();
            if (columnName == null)
                columnName = member.Name;
        }
Exemplo n.º 6
0
        /// <summary>
        /// 成员信息转换为数据列
        /// </summary>
        /// <param name="type">成员类型</param>
        /// <param name="memberAttribute">SQL成员信息</param>
        /// <returns>数据列</returns>
        internal override Column GetColumn(Type type, MemberAttribute memberAttribute)
        {
            SqlDbType sqlType    = SqlDbType.NVarChar;
            int       size       = memberAttribute.MaxStringLength;
            Type      memberType = memberAttribute.DataType ?? type;

            if (memberType == typeof(string))
            {
                if (size > 0)
                {
                    sqlType = SqlDbType.NVarChar;
                }
                else
                {
                    sqlType = SqlDbType.NText;
                    size    = int.MaxValue;
                }
            }
            else
            {
                sqlType = memberType.formCSharpType(memberAttribute);
                size    = sqlType.getSize(memberAttribute);
            }
            return(new Column
            {
                DbType = sqlType,
                Size = size,
                IsNull = memberAttribute.IsDefaultMember && memberType != typeof(string) ? type.isNull() : memberAttribute.IsNull,
                Remark = memberAttribute.Remark,
                DefaultValue = memberAttribute.DefaultValue,
                UpdateValue = memberAttribute.UpdateValue
            });
        }
Exemplo n.º 7
0
 private static bool HasConflict(MemberAttribute attribute, MemberAttribute checkedAttribute)
 {
     if (attribute.AddonTypes == null || checkedAttribute.AddonTypes == null)
     {
         return(false);
     }
     return(attribute.AddonTypes.Intersect(checkedAttribute.AddonTypes).Any());
 }
Exemplo n.º 8
0
            public Document Add(MemberAttribute attribute, out TextSpan?textSpan)
            {
                Debug.Assert(!attribute.IsChecked && attribute.IsEnabled);
                var result = Mapper.AddMemberAttribute(Symbol, attribute.AttributeClass, KnownTypes.ModelDesignerSpecAttribute).Result;

                textSpan = result.TextSpan;
                return(result.Document);
            }
Exemplo n.º 9
0
            public override void VisitNamedType(INamedTypeSymbol symbol)
            {
                var addonTypes = GetAddonTypes(symbol);

                if (addonTypes != null)
                {
                    _result.Add(MemberAttribute.Create(symbol, addonTypes));
                }
            }
Exemplo n.º 10
0
        public void SetRemainingArg_EmptyStringArrayToIEnumerableOfSring_DoesNotThrow()
        {
            var sample = new FieldSample <int>();

            string[] empty = new string[] { };

            MemberAttribute propAttr = new MemberAttribute(new NArgAttribute(), GetSingleMemberInfo(sample, "FooProp"));

            MemberSetter.SetRemainingArg(sample, propAttr, empty);
        }
Exemplo n.º 11
0
        public static bool HasAttribute(this CodeModule code, string name)
        {
            if (code.CountOfDeclarationLines == 0)
            {
                return(false);
            }
            var moduleAttributes = MemberAttribute.GetAttributes(code.Lines[1, code.CountOfDeclarationLines].Split('\n'));

            return(moduleAttributes.Any(attribute => attribute.Name == name));
        }
Exemplo n.º 12
0
        public bool HasAttribute(MemberAttribute attribute)
        {
            foreach (var value in this.Attributes)
            {
                if (value == attribute)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 13
0
        public static ModelDescriptor.MemberDescriptor ToMemberDescriptor(this MemberAttribute source)
        {
            var ret = new ModelDescriptor.MemberDescriptor
            {
                Length           = source.Size,
                ValueType        = source.Type,
                TargetName       = source.TargetName,
                SourceName       = source.SourceName,
                MemberSourceType = source.Interface == EMemberType.Field ? ModelDescriptor.MemberDescriptor.EMemberSourceType.Field : ModelDescriptor.MemberDescriptor.EMemberSourceType.Property
            };

            return(ret);
        }
Exemplo n.º 14
0
        private IEnumerable <MemberAttribute> GetCheckedMemberAttributes(ISymbol symbol)
        {
            var attributes = symbol.GetAttributes();

            for (int i = 0; i < attributes.Length; i++)
            {
                var attribute = attributes[i];
                var spec      = attribute.GetModelDesignerSpec(Compilation);
                if (spec.HasValue)
                {
                    yield return(MemberAttribute.CreateChecked(attribute, spec.Value.AddonTypes));
                }
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// 成员信息转换为数据列
        /// </summary>
        /// <param name="type">成员类型</param>
        /// <param name="memberAttribute">SQL成员信息</param>
        /// <returns>数据列</returns>
        internal override Column GetColumn(Type type, MemberAttribute memberAttribute)
        {
            SqlDbType sqlType    = SqlDbType.NVarChar;
            int       size       = maxStringSize;
            Type      memberType = memberAttribute.DataType ?? type;

            if (memberType == typeof(string))
            {
                if (memberAttribute.MaxStringLength > 0 && memberAttribute.MaxStringLength <= maxStringSize)
                {
                    if (memberAttribute.IsFixedLength)
                    {
                        sqlType = memberAttribute.IsAscii ? SqlDbType.Char : SqlDbType.NChar;
                    }
                    else
                    {
                        sqlType = memberAttribute.IsAscii ? SqlDbType.VarChar : SqlDbType.NVarChar;
                    }
                    size = memberAttribute.MaxStringLength <= maxStringSize ? memberAttribute.MaxStringLength : maxStringSize;
                }
                else if (!memberAttribute.IsFixedLength && memberAttribute.MaxStringLength == -1)
                {
                    sqlType = memberAttribute.IsAscii ? SqlDbType.VarChar : SqlDbType.NVarChar;
                    size    = memberAttribute.MaxStringLength <= maxStringSize ? memberAttribute.MaxStringLength : maxStringSize;
                }
                else
                {
                    sqlType = memberAttribute.IsAscii ? SqlDbType.Text : SqlDbType.NText;
                    if (size <= 0)
                    {
                        size = int.MaxValue;
                    }
                }
            }
            else
            {
                sqlType = memberType.formCSharpType();
                size    = sqlType.getSize(memberAttribute);
            }
            return(new Column
            {
                DbType = sqlType,
                Size = size,
                IsNull = memberAttribute.IsDefaultMember && memberType != typeof(string) ? type.isNull() : memberAttribute.IsNull,
                Remark = memberAttribute.Remark,
                DefaultValue = memberAttribute.DefaultValue,
                UpdateValue = memberAttribute.UpdateValue
            });
        }
Exemplo n.º 16
0
 public DisabledMemberAttribute(INamedTypeSymbol attributeClass, MemberAttribute confliction)
     : base(null)
 {
     _attributeClass = attributeClass;
     _confliction    = confliction;
 }
Exemplo n.º 17
0
 /// <summary>
 /// 成员信息转换为数据列
 /// </summary>
 /// <param name="type">成员类型</param>
 /// <param name="memberAttribute">SQL成员信息</param>
 /// <returns>数据列</returns>
 internal override Column GetColumn(Type type, MemberAttribute memberAttribute)
 {
     throw new InvalidOperationException();
 }
Exemplo n.º 18
0
 public override MemberAttribute CreateDisabled(MemberAttribute conflict)
 {
     return(new DisabledMemberAttribute(AttributeClass, conflict));
 }
Exemplo n.º 19
0
 internal AttributeMappingMember(MemberInfo member, MemberAttribute attribute, AttributeMappingEntity nested)
 {
     this.member    = member;
     this.attribute = attribute;
     this.nested    = nested;
 }
Exemplo n.º 20
0
        private MappingEntity CreateEntity(Type elementType, string tableId, Type entityType)
        {
            if (tableId == null)
            {
                tableId = this.GetTableId(elementType);
            }

            var members           = new HashSet <string>();
            var mappingMembers    = new List <AttributeMappingMember>();
            int dot               = tableId.IndexOf('.');
            var rootTableId       = dot > 0 ? tableId.Substring(0, dot) : tableId;
            var path              = dot > 0 ? tableId.Substring(dot + 1) : string.Empty;
            var mappingAttributes = this.GetMappingAttributes(rootTableId);
            var tableAttributes   = mappingAttributes.OfType <TableBaseAttribute>()
                                    .OrderBy(ta => ta.Name);
            var tableAttr = tableAttributes.OfType <TableAttribute>().FirstOrDefault();

            if (tableAttr != null && tableAttr.EntityType != null && entityType == elementType)
            {
                entityType = tableAttr.EntityType;
            }

            var memberAttributes = mappingAttributes.OfType <MemberAttribute>()
                                   .Where(ma => ma.Member.StartsWith(path))
                                   .OrderBy(ma => ma.Member);

            foreach (var attr in memberAttributes)
            {
                if (string.IsNullOrEmpty(attr.Member))
                {
                    continue;
                }

                string                 memberName = (path.Length == 0) ? attr.Member : attr.Member.Substring(path.Length + 1);
                MemberInfo             member     = null;
                MemberAttribute        attribute  = null;
                AttributeMappingEntity nested     = null;

                // additional nested mappings
                if (memberName.Contains('.'))
                {
                    string nestedMember = memberName.Substring(0, memberName.IndexOf('.'));
                    if (nestedMember.Contains('.'))
                    {
                        continue; // don't consider deeply nested members yet
                    }

                    if (members.Contains(nestedMember))
                    {
                        continue; // already seen it (ignore additional)
                    }

                    members.Add(nestedMember);
                    member = this.FindMember(entityType, nestedMember);
                    string newTableId = tableId + "." + nestedMember;
                    nested = (AttributeMappingEntity)this.GetEntity(TypeHelper.GetMemberType(member), newTableId);
                }
                else
                {
                    if (members.Contains(memberName))
                    {
                        throw new InvalidOperationException(string.Format("AttributeMapping: more than one mapping attribute specified for member '{0}' on type '{1}'", memberName, entityType.Name));
                    }

                    member    = this.FindMember(entityType, memberName);
                    attribute = attr;
                }

                mappingMembers.Add(new AttributeMappingMember(member, attribute, nested));
            }

            return(new AttributeMappingEntity(elementType, tableId, entityType, tableAttributes, mappingMembers));
        }
Exemplo n.º 21
0
        private void InitializeAttributeMapping(MemberAttribute attribute, bool isEnumerableType)
        {
            var column = attribute as ColumnAttribute;
            var association = attribute as AbstractAssociationAttribute;

            if (attribute.Storage.HasValue())
            {
                storageMember = entity.entityType.GetMember(attribute.Storage.Trim(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault();
                if (storageMember != null && storageMember.MemberType != MemberTypes.Field
                    && storageMember.MemberType != MemberTypes.Property)
                    storageMember = null;
            }

            isColumn = column != null;
            if (isColumn)
                IntiailizeColumnAttribute(column);

            isRelationship = association != null;

            if (isRelationship)
                InitializeAssociationAttribute(isEnumerableType, association);
        }
Exemplo n.º 22
0
 public Document Remove(MemberAttribute attribute)
 {
     Debug.Assert(attribute.IsChecked);
     return(Mapper.RemoveMemberAttributeAsync(attribute.AttributeData).Result);
 }
Exemplo n.º 23
0
        private static MemberAttribute GetDisabled(MemberAttribute attribute, IReadOnlyList <MemberAttribute> checkedAttributes)
        {
            var conflict = checkedAttributes.FirstOrDefault(x => HasConflict(attribute, x));

            return(conflict == null ? null : attribute.CreateDisabled(conflict));
        }
Exemplo n.º 24
0
        private static (MemberAttribute Result, int IndexOfChecked) GetCheckedOrDisabled(MemberAttribute attribute, IReadOnlyList <MemberAttribute> checkedAttributes)
        {
            for (var i = 0; i < checkedAttributes.Count; i++)
            {
                var result = checkedAttributes[i];
                if (result.AttributeClass.Equals(attribute.AttributeClass))
                {
                    return(result, i);
                }
            }

            return(GetDisabled(attribute, checkedAttributes), -1);
        }
Exemplo n.º 25
0
 public virtual MemberAttribute CreateDisabled(MemberAttribute confliction)
 {
     return(null);
 }