internal static bool TryGetDefinition(ModelDefinition modelDefinition, IPropertySymbol property, out ModelAttributeDefinition modelAttributeDefinition)
        {
            var attributes = property.GetAttributes();

            if (attributes.All(a => a.AttributeClass.Name != "CrmMappingAttribute" && a.AttributeClass.Name != "ExtendBindingModelAttribute"))
            {
                modelAttributeDefinition = null;
                return(false);
            }

            modelAttributeDefinition = new ModelAttributeDefinition(modelDefinition, property, attributes);
            return(true);
        }
Example #2
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);
                    }
                }
            }
        }