Esempio n. 1
0
        EntityIndexData createCustomEntityIndexData(Type type)
        {
            var data = new EntityIndexData();

            var attribute = (CustomEntityIndexAttribute)type.GetCustomAttributes(typeof(CustomEntityIndexAttribute), false)[0];

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

            var getMethods = type
                             .GetMethods(BindingFlags.Public | BindingFlags.Instance)
                             .Where(method => Attribute.IsDefined(method, typeof(EntityIndexGetMethodAttribute)))
                             .Select(method => new MethodData(
                                         method.ReturnType.ToCompilableString(),
                                         method.Name,
                                         method.GetParameters()
                                         .Select(p => new MemberData(p.ParameterType.ToCompilableString(), p.Name))
                                         .ToArray()
                                         )).ToArray();

            data.SetCustomMethods(getMethods);

            return(data);
        }
 string generateCustomMethods(EntityIndexData data)
 {
     return(ADD_CUSTOMINDEX_TEMPLATE
            .Replace("${context}", data.GetContextNames()[0].LowercaseFirst())
            .Replace("${Name}", data.GetEntityIndexName())
            .Replace("${IndexType}", data.GetEntityIndexType()));
 }
Esempio n. 3
0
        private EntityIndexData                 createCustomEntityIndexData(INamedTypeSymbol type)
        {
            var data = new EntityIndexData();

            var attribute = type.GetAttributes(  ).First(attr => attr.AttributeClass.ToString(  ) == typeof(CustomEntityIndexAttribute).FullName);
            var attrArg0  = attribute.ConstructorArguments[0].Value as INamedTypeSymbol;                                // FIXME: get string contextName

            data.SetEntityIndexType(type.ToString(  ));
            data.IsCustom(true);
            data.SetEntityIndexName(type.ToString(  ).RemoveDots(  ));
            data.SetHasMultiple(false);
            data.SetContextNames(new[] { attrArg0.Name.ShortTypeName(  ).RemoveContextSuffix(  ) });

            var getMethods = type
                             .GetMembers(  )
                             .Where(m => m.Kind == SymbolKind.Method &&
                                    m is IMethodSymbol &&
                                    m.DeclaredAccessibility == Accessibility.Public &&
                                    m.HasAttribute(typeof(EntityIndexGetMethodAttribute)))
                             .Select(m => new MethodData(
                                         (m as IMethodSymbol).ReturnType.ToDisplayString(  ),
                                         (m as IMethodSymbol).Name,
                                         (m as IMethodSymbol).Parameters
                                         .Select(p => new MemberData(p.Type.ToString(  ), p.Name))
                                         .ToArray( )))
                             .ToArray();

            data.SetCustomMethods(getMethods);

            return(data);
        }
        private string GenerateGetMethod(EntityIndexData data, string contextName)
        {
            var template = "";

            if (data.GetEntityIndexType() == "JCMG.EntitasRedux.EntityIndex")
            {
                template = GET_INDEX_TEMPLATE;
            }
            else if (data.GetEntityIndexType() == "JCMG.EntitasRedux.PrimaryEntityIndex")
            {
                template = GET_PRIMARY_INDEX_TEMPLATE;
            }
            else
            {
                return(GetCustomMethods(data));
            }

            return(template
                   .Replace("${ContextName}", contextName)
                   .Replace(
                       "${IndexName}", data.GetMemberEntityIndexName())
                   .Replace("${IndexType}", data.GetEntityIndexType())
                   .Replace("${KeyType}", data.GetKeyType())
                   .Replace("${MemberName}", data.GetMemberName()));
        }
        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());
        }
Esempio n. 6
0
        EntityIndexData createEntityIndexData(Type type, List <PublicMemberInfo> infos)
        {
            var data = new EntityIndexData();

            var info      = infos.Single(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1);
            var attribute = (AbstractEntityIndexAttribute)info.attributes.Single(attr => attr.attribute is AbstractEntityIndexAttribute).attribute;

            data.SetEntityIndexType(getEntityIndexType(attribute));
            data.IsCustom(false);
            data.SetEntityIndexName(type.ToCompilableString().RemoveComponentSuffix().RemoveDots());
            data.SetKeyType(info.type.ToCompilableString());
            data.SetComponentType(type.ToCompilableString());
            data.SetComponentName(type.ToCompilableString().ShortTypeName().RemoveComponentSuffix());
            data.SetMemberName(info.name);

            var contextNames = ContextsComponentDataProvider.GetContextNames(type);

            if (contextNames.Length == 0)
            {
                contextNames = new [] { _defaultContextName };
            }
            data.SetContextNames(contextNames);

            return(data);
        }
        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);
        }
Esempio n. 8
0
        private EntityIndexData[] CreateEntityIndexData(Type type, List <PublicMemberInfo> infos)
        {
            var hasMultiple = infos.Count(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1) >
                              1;

            return(infos
                   .Where(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1)
                   .Select(
                       info =>
            {
                var data = new EntityIndexData();
                var attribute = (AbstractEntityIndexAttribute)info.attributes
                                .Single(attr => attr.attribute is AbstractEntityIndexAttribute)
                                .attribute;

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

                return data;
            })
                   .ToArray());
        }
Esempio n. 9
0
        private EntityIndexData[]               createEntityIndexData(INamedTypeSymbol type, List <ISymbol> infos)
        {
            var hasMultiple = infos.Count(i => i.CountAttribute(typeof(AbstractEntityIndexAttribute)) == 1) > 1;

            return(infos
                   .Where(i => i.CountAttribute(typeof(AbstractEntityIndexAttribute)) == 1)
                   .Select(info => {
                var data = new EntityIndexData();
                var attribute = info.GetAttribute(typeof(AbstractEntityIndexAttribute));
                var entityIndexType = GetEntityIndexType(attribute.AttributeClass);
                var typeName = (info is IFieldSymbol fieldSymbol)
                                                ? fieldSymbol.Type.ToDisplayString(  )
                                                : (info is IPropertySymbol symbol)
                                                        ? symbol.Type.ToDisplayString(  )
                                                        : null;

                data.SetEntityIndexType(entityIndexType.ToString(  ));
                data.IsCustom(false);
                data.SetEntityIndexName(type.ToString().ToComponentName(_contexts.Get <Settings>().Is <IgnoreNamespaces>()));
                data.SetKeyType(typeName);
                data.SetComponentType(type.ToString(  ));
                data.SetMemberName(info.Name);
                data.SetHasMultiple(hasMultiple);
                data.SetContextNames(type.GetContextNames(  ).ToArray(  ));

                return data;
            }).ToArray());
        }
Esempio n. 10
0
        string generateGetMethod(EntityIndexData data, string contextName)
        {
            var template = "";

            if (data.GetEntityIndexType() == "Entitas.EntityIndex")
            {
                template = GET_INDEX_TEMPLATE;
            }
            else if (data.GetEntityIndexType() == "Entitas.PrimaryEntityIndex")
            {
                template = GET_PRIMARY_INDEX_TEMPLATE;
            }
            else
            {
                return(getCustomMethods(data));
            }

            return(template
                   .Replace("${ContextName}", contextName)
                   .Replace("${IndexName}", data.GetHasMultiple()
                    ? data.GetEntityIndexName() + data.GetMemberName().UppercaseFirst()
                    : data.GetEntityIndexName())
                   .Replace("${IndexType}", data.GetEntityIndexType())
                   .Replace("${KeyType}", data.GetKeyType())
                   .Replace("${MemberName}", data.GetMemberName()));
        }
 string generateGetMethods(EntityIndexData data)
 {
     return(string.Join("\n\n", data.GetContextNames()
                        .Aggregate(new List <string>(), (getMethods, contextName) => {
         getMethods.Add(generateGetMethod(data, contextName));
         return getMethods;
     }).ToArray()));
 }
 string getCustomMethods(EntityIndexData data)
 {
     return(string.Join("\n", data.GetCustomMethods()
                        .Select(m => CUSTOM_METHOD_TEMPLATE
                                .Replace("${ReturnType}", m.ReturnType.ToCompilableString())
                                .Replace("${MethodName}", m.Name)
                                .Replace("${Context}", data.GetContextNames()[0])
                                .Replace("${methodArgs}", string.Join(", ", m.GetParameters().Select(p => p.ParameterType.ToCompilableString() + " " + p.Name).ToArray()))
                                .Replace("${IndexType}", data.GetEntityIndexType())
                                .Replace("${Name}", data.GetEntityIndexName())
                                .Replace("${args}", string.Join(", ", m.GetParameters().Select(p => p.Name).ToArray()))).ToArray()));
 }
 string getCustomMethods(EntityIndexData data)
 {
     return(string.Join("\n", data.GetCustomMethods()
                        .Select(m => CUSTOM_METHOD_TEMPLATE
                                .Replace("${ReturnType}", m.returnType)
                                .Replace("${MethodName}", m.methodName)
                                .Replace("${ContextName}", data.GetContextNames()[0])
                                .Replace("${methodArgs}", string.Join(", ", m.parameters.Select(p => p.type + " " + p.name).ToArray()))
                                .Replace("${IndexType}", data.GetEntityIndexType())
                                .Replace("${IndexName}", data.GetEntityIndexName())
                                .Replace("${args}", string.Join(", ", m.parameters.Select(p => p.name).ToArray()))).ToArray()));
 }
 string generateMethods(EntityIndexData data, string contextName)
 {
     return(ADD_INDEX_TEMPLATE
            .Replace("${contextName}", contextName.LowercaseFirst())
            .Replace("${ContextName}", contextName)
            .Replace("${IndexName}", data.GetEntityIndexName())
            .Replace("${IndexType}", data.GetEntityIndexType())
            .Replace("${KeyType}", data.GetKeyType())
            .Replace("${ComponentType}", data.GetComponentType())
            .Replace("${MemberName}", data.GetMemberName())
            .Replace("${componentName}", data.GetComponentType().ToComponentName(_ignoreNamespacesConfig.ignoreNamespaces).LowercaseFirst()));
 }
 private string GenerateAddMethods(EntityIndexData data)
 {
     return(string.Join(
                "\n",
                data.GetContextNames()
                .Aggregate(
                    new List <string>(),
                    (addMethods, contextName) =>
     {
         addMethods.Add(GenerateAddMethod(data, contextName));
         return addMethods;
     })
                .ToArray()));
 }
Esempio n. 16
0
 string generateMethods(EntityIndexData data, string contextName)
 {
     return(ADD_INDEX_TEMPLATE
            .Replace("${contextName}", contextName.LowercaseFirst())
            .Replace("${ContextName}", contextName)
            .Replace("${IndexName}", data.GetHasMultiple()
                                 ? data.GetEntityIndexName() + data.GetMemberName().UppercaseFirst()
                                 : data.GetEntityIndexName())
            .Replace("${Matcher}", data.GetEntityIndexName())
            .Replace("${IndexType}", data.GetEntityIndexType())
            .Replace("${KeyType}", data.GetKeyType())
            .Replace("${ComponentType}", data.GetComponentType())
            .Replace("${MemberName}", data.GetMemberName())
            .Replace("${componentName}", data.GetComponentType().ToComponentName(_contexts.settings.isIgnoreNamespaces).LowercaseFirst()));
 }
        EntityIndexData createEntityIndexData(Type type, List <PublicMemberInfo> infos)
        {
            var data = new EntityIndexData();

            var info      = infos.Single(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1);
            var attribute = (AbstractEntityIndexAttribute)info.attributes.Single(attr => attr.attribute is AbstractEntityIndexAttribute).attribute;

            data.SetEntityIndexType(getEntityIndexType(attribute));
            data.IsCustom(false);
            data.SetEntityIndexName(type.ToCompilableString().ToComponentName(_ignoreNamespacesConfig.ignoreNamespaces));
            data.SetKeyType(info.type.ToCompilableString());
            data.SetComponentType(type.ToCompilableString());
            data.SetMemberName(info.name);
            data.SetContextNames(_contextsComponentDataProvider.GetContextNamesOrDefault(type));

            return(data);
        }
 private string GenerateMethods(EntityIndexData data, string contextName)
 {
     return(ADD_INDEX_TEMPLATE
            .Replace("${contextName}", contextName)
            .Replace("${ContextName}", contextName)
            .Replace(
                "${IndexName}", data.GetMemberEntityIndexName())
            .Replace("${Matcher}", data.GetEntityIndexName())
            .Replace("${IndexType}", data.GetEntityIndexType())
            .Replace("${KeyType}", data.GetKeyType())
            .Replace("${ComponentType}", data.GetComponentType())
            .Replace("${MemberName}", data.GetMemberName())
            .Replace(
                "${componentName}",
                data.GetComponentType()
                .ToComponentName()
                .LowercaseFirst()
                .AddPrefixIfIsKeyword()));
 }
 private string GetCustomMethods(EntityIndexData data)
 {
     return(string.Join(
                "\n",
                data.GetCustomMethods()
                .Select(
                    m => CUSTOM_METHOD_TEMPLATE
                    .Replace("${ReturnType}", m.returnType)
                    .Replace("${MethodName}", m.methodName)
                    .Replace("${ContextName}", data.GetContextNames()[0])
                    .Replace(
                        "${methodArgs}",
                        string.Join(", ", m.parameters.Select(p => p.type + " " + p.name).ToArray()))
                    .Replace("${IndexType}", data.GetEntityIndexType())
                    .Replace(
                        "${IndexName}",
                        data.GetHasMultiple()
                                                                 ? data.GetEntityIndexName() + data.GetMemberName().UppercaseFirst()
                                                                 : data.GetEntityIndexName())
                    .Replace("${args}", string.Join(", ", m.parameters.Select(p => p.name).ToArray())))
                .ToArray()));
 }
Esempio n. 20
0
        private EntityIndexData[]               createEntityIndexData(Type type, List <PublicMemberInfo> infos)
        {
            var hasMultiple = infos.Count(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1) > 1;

            return(infos
                   .Where(i => i.attributes.Count(attr => attr.attribute is AbstractEntityIndexAttribute) == 1)
                   .Select(info => {
                var data = new EntityIndexData();
                var attribute = (AbstractEntityIndexAttribute)info.attributes.Single(attr => attr.attribute is AbstractEntityIndexAttribute).attribute;

                data.SetEntityIndexType(getEntityIndexType(attribute));
                data.IsCustom(false);
                data.SetEntityIndexName(type.ToCompilableString().ToComponentName(_contexts.settings.isIgnoreNamespaces));
                data.SetKeyType(info.type.ToCompilableString());
                data.SetComponentType(type.ToCompilableString());
                data.SetMemberName(info.name);
                data.SetHasMultiple(hasMultiple);
                data.SetContextNames(ReflectionToCompsSystem.TypeToContextNames[type].ToArray(  ));

                return data;
            }).ToArray());
        }
Esempio n. 21
0
 public static void SetHasMultiple(this EntityIndexData data, bool hasMultiple)
 {
     data[ENTITY_INDEX_HAS_MULTIPLE] = hasMultiple;
 }
Esempio n. 22
0
 public static void SetMemberName(this EntityIndexData data, string memberName)
 {
     data[ENTITY_INDEX_MEMBER_NAME] = memberName;
 }
Esempio n. 23
0
 public static bool GetHasMultiple(this EntityIndexData data)
 {
     return((bool)data[ENTITY_INDEX_HAS_MULTIPLE]);
 }
Esempio n. 24
0
 public static void SetComponentType(this EntityIndexData data, string type)
 {
     data[ENTITY_INDEX_COMPONENT_TYPE] = type;
 }
Esempio n. 25
0
 public static string GetMemberName(this EntityIndexData data)
 {
     return((string)data[ENTITY_INDEX_MEMBER_NAME]);
 }
Esempio n. 26
0
 public static string GetComponentType(this EntityIndexData data)
 {
     return((string)data[ENTITY_INDEX_COMPONENT_TYPE]);
 }
Esempio n. 27
0
 public static void SetKeyType(this EntityIndexData data, string type)
 {
     data[ENTITY_INDEX_KEY_TYPE] = type;
 }
Esempio n. 28
0
 public static string GetKeyType(this EntityIndexData data)
 {
     return((string)data[ENTITY_INDEX_KEY_TYPE]);
 }
Esempio n. 29
0
 public static void SetContextNames(this EntityIndexData data, string[] contextNames)
 {
     data[ENTITY_INDEX_CONTEXT_NAMES] = contextNames;
 }
Esempio n. 30
0
 public static string[] GetContextNames(this EntityIndexData data)
 {
     return((string[])data[ENTITY_INDEX_CONTEXT_NAMES]);
 }