Example #1
0
        private ModelDefinition(INamedTypeSymbol symbol, AttributeData crmEntityAttribute) : base(symbol)
        {
            ParentModel = GetModelDefinition(symbol.BaseType);

            var entityDefinitionSymbol = (INamedTypeSymbol)crmEntityAttribute.ConstructorArguments.Single().Value;

            EntityDefinition = EntityDefinition.GetEntityDefinition(entityDefinitionSymbol);

            foreach (var memberName in symbol.MemberNames)
            {
                var members = symbol.GetMembers(memberName);

                if (!members.OfType <IPropertySymbol>().Any())
                {
                    continue;
                }

                var property = members.OfType <IPropertySymbol>().First();

                if (ModelAttributeDefinition.TryGetDefinition(this, property, out var modelAttributeDefinition))
                {
                    _attributes.Add(modelAttributeDefinition);
                }
            }

            foreach (var interfaceSymbol in symbol.Interfaces)
            {
                foreach (var memberName in interfaceSymbol.MemberNames)
                {
                    var members = interfaceSymbol.GetMembers(memberName);

                    if (!members.OfType <IPropertySymbol>().Any())
                    {
                        continue;
                    }

                    var property = members.OfType <IPropertySymbol>().First();

                    if (ModelAttributeDefinition.TryGetDefinition(this, property, out var modelAttributeDefinition))
                    {
                        _attributes.Add(modelAttributeDefinition);
                    }
                }
            }
        }