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); }
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); } } } }