private EntityIndexData[] CreateEntityIndexData(ICachedNamedTypeSymbol cachedNamedTypeSymbol, IEnumerable <MemberData> memberData)
        {
            var hasMultiple = memberData
                              .Count(i => i.memberFieldSymbol.GetAttributes()
                                     .HasAttribute(nameof(AbstractEntityIndexAttribute), canInherit: true)) > 1;

            return(memberData
                   .Where(i => i.memberFieldSymbol.GetAttributes()
                          .HasAttribute(nameof(AbstractEntityIndexAttribute), canInherit: true))
                   .Select(
                       info =>
            {
                var data = new EntityIndexData();
                var attribute = info.memberFieldSymbol.GetAttributes()
                                .GetAttributes(nameof(AbstractEntityIndexAttribute), canInherit: true)
                                .Single();

                data.SetEntityIndexType(GetEntityIndexType(attribute));
                data.IsCustom(false);
                data.SetEntityIndexName(cachedNamedTypeSymbol.FullTypeName.ToComponentName());
                data.SetKeyType(info.compilableTypeString);
                data.SetComponentType(cachedNamedTypeSymbol.FullTypeName);
                data.SetMemberName(info.name);
                data.SetHasMultiple(hasMultiple);
                data.SetContextNames(_contextsComponentDataProvider.GetContextNamesOrDefault(cachedNamedTypeSymbol));

                return data;
            })
                   .ToArray());
        }
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var attrs = cachedNamedTypeSymbol.GetAttributes(nameof(EventAttribute)).ToArray();

            if (attrs.Any())
            {
                data.IsEvent(true);
                var eventData = attrs
                                .Select(attr =>
                {
                    var args = attr.ConstructorArguments;
                    return(new EventData(
                               (EventTarget)args[0].Value,
                               (EventType)args[1].Value,
                               (int)args[2].Value));
                })
                                .ToArray();

                data.SetEventData(eventData);
            }
            else
            {
                data.IsEvent(false);
            }
        }
Exemplo n.º 3
0
        public static IEnumerable <MemberData> GetPublicMemberData(this ICachedNamedTypeSymbol cachedNamedTypeSymbol)
        {
            // Get all public fields and create members for each.
            var publicFieldMembers = cachedNamedTypeSymbol.AllPublicMembers
                                     .Where(x =>
                                            x.IsPublic() &&
                                            x.IsKind(SymbolKind.Field) &&
                                            !x.IsStatic)
                                     .Cast <IFieldSymbol>();

            var publicPropertyMembers = cachedNamedTypeSymbol.AllPublicMembers
                                        .Where(x =>
                                               x.IsPublic() &&
                                               x.IsKind(SymbolKind.Property) &&
                                               !x.IsStatic)
                                        .Cast <IPropertySymbol>()
                                        .Where(x => x.GetMethod != null && x.SetMethod != null);

            // Create member data
            var memberData = publicFieldMembers
                             .Select(x => new MemberData(x, x.Type, x.Name))
                             .Concat(publicPropertyMembers.Select(x => new MemberData(
                                                                      x.Type.GetFullTypeName(),
                                                                      x.Name)))
                             .ToArray();

            return(memberData);
        }
        private EntityIndexData CreateCustomEntityIndexData(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
        {
            var data        = new EntityIndexData();
            var attribute   = cachedNamedTypeSymbol.GetAttributes(nameof(CustomEntityIndexAttribute)).Single();
            var contextType = (ITypeSymbol)attribute.ConstructorArguments[0].Value;

            var fullTypeName = cachedNamedTypeSymbol.FullTypeName;

            data.SetEntityIndexType(fullTypeName);
            data.IsCustom(true);
            data.SetEntityIndexName(fullTypeName.RemoveDots());
            data.SetHasMultiple(false);
            data.SetContextNames(
                new[]
            {
                contextType.GetFullTypeName().ShortTypeName().RemoveContextSuffix()
            });

            var getMethods = cachedNamedTypeSymbol
                             .NamedTypeSymbol
                             .GetAllMembers()
                             .Where(method => method.HasAttribute <EntityIndexGetMethodAttribute>())
                             .Select(
                method => new MethodData(
                    method.GetReturnType().GetFullTypeName(),
                    method.Name,
                    method.GetParameters()
                    .Select(p => new MemberData(p.Type.GetFullTypeName(), p.Name))
                    .ToArray()))
                             .ToArray();

            data.SetCustomMethods(getMethods);

            return(data);
        }
Exemplo n.º 5
0
        private bool GetGenerateIndex(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
        {
            var attr = cachedNamedTypeSymbol
                       .GetAttributes(nameof(DontGenerateAttribute))
                       .FirstOrDefault();

            return(attr == null || (bool)attr.ConstructorArguments[0].Value);
        }
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var shouldGenerateComponent = !cachedNamedTypeSymbol.ImplementsInterface <IComponent>();

            data.ShouldGenerateComponent(shouldGenerateComponent);
            if (shouldGenerateComponent)
            {
                data.SetObjectTypeName(cachedNamedTypeSymbol.FullTypeName);
            }
        }
Exemplo n.º 7
0
        private ComponentData CreateDataForComponent(ICachedNamedTypeSymbol namedTypeSymbol)
        {
            var data = new ComponentData();

            foreach (var provider in _dataProviders)
            {
                provider.Provide(namedTypeSymbol, data);
            }

            return(data);
        }
Exemplo n.º 8
0
 private ComponentData[] CreateDataForComponents(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
 {
     return(GetComponentNames(cachedNamedTypeSymbol)
            .Select(
                componentName =>
     {
         var data = CreateDataForComponent(cachedNamedTypeSymbol);
         return data;
     })
            .ToArray());
 }
Exemplo n.º 9
0
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var attributes = cachedNamedTypeSymbol
                             .GetAttributes(nameof(CleanupAttribute))
                             .ToArray();

            if (attributes.Any())
            {
                var cleanupData = attributes
                                  .Select(x => x.ConstructorArguments[0].Value)
                                  .Cast <CleanupMode>()
                                  .ToArray();

                data.SetCleanupData(cleanupData);
            }
        }
Exemplo n.º 10
0
        private ComponentData[] CreateDataForNonComponents(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
        {
            return(GetComponentNames(cachedNamedTypeSymbol)
                   .Select(
                       componentName =>
            {
                var data = CreateDataForComponent(cachedNamedTypeSymbol);
                data.SetTypeName(componentName.AddComponentSuffix());
                data.SetMemberData(
                    new[]
                {
                    new MemberData(cachedNamedTypeSymbol, "value")
                });

                return data;
            })
                   .ToArray());
        }
Exemplo n.º 11
0
        private string[] GetComponentNames(ICachedNamedTypeSymbol namedTypeSymbol)
        {
            // if there are not any
            var componentAttrTypeSymbols = namedTypeSymbol.GetAttributes(nameof(ComponentNameAttribute));

            if (!componentAttrTypeSymbols.Any())
            {
                var componentNames = new[]
                {
                    namedTypeSymbol.TypeName
                };

                return(componentNames);
            }

            return(componentAttrTypeSymbols
                   .SelectMany(x => x.ConstructorArguments)
                   .SelectMany(x => x.Values)
                   .Select(x => x.Value.ToString())
                   .ToArray());
        }
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var isUnique = cachedNamedTypeSymbol.GetAttributes(nameof(UniqueAttribute)).Any();

            data.IsUnique(isUnique);
        }
Exemplo n.º 13
0
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var memberData = cachedNamedTypeSymbol.GetPublicMemberData().ToArray();

            data.SetMemberData(memberData);
        }
Exemplo n.º 14
0
 private bool HasContexts(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
 {
     return(cachedNamedTypeSymbol.NamedTypeSymbol.GetContextNames().Length != 0);
 }
Exemplo n.º 15
0
 public MemberData(ICachedNamedTypeSymbol cachedNamedTypeSymbol, string memberName)
 {
     memberTypeSymbol     = cachedNamedTypeSymbol.NamedTypeSymbol;
     compilableTypeString = cachedNamedTypeSymbol.FullTypeName;
     name = memberName;
 }
Exemplo n.º 16
0
 public string[] GetContextNamesOrDefault(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
 {
     return(GetContextNamesOrDefault(cachedNamedTypeSymbol.NamedTypeSymbol));
 }
Exemplo n.º 17
0
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var contextNames = GetContextNamesOrDefault(cachedNamedTypeSymbol.NamedTypeSymbol);

            data.SetContextNames(contextNames);
        }
Exemplo n.º 18
0
        private string GetFlagPrefix(ICachedNamedTypeSymbol cachedNamedTypeSymbol)
        {
            var attr = cachedNamedTypeSymbol.GetAttributes(nameof(FlagPrefixAttribute)).SingleOrDefault();

            return(attr == null ? "is" : attr.ConstructorArguments[0].Value?.ToString());
        }
Exemplo n.º 19
0
 public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
 {
     data.SetFlagPrefix(GetFlagPrefix(cachedNamedTypeSymbol));
 }
Exemplo n.º 20
0
 public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
 {
     data.SetTypeName(cachedNamedTypeSymbol.FullTypeName);
 }
        public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
        {
            var generate = !cachedNamedTypeSymbol.GetAttributes(nameof(DontGenerateAttribute)).Any();

            data.ShouldGenerateMethods(generate);
        }
Exemplo n.º 22
0
 public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data)
 {
     data.ShouldGenerateIndex(GetGenerateIndex(cachedNamedTypeSymbol));
 }