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); } }
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); }
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); } }
private ComponentData CreateDataForComponent(ICachedNamedTypeSymbol namedTypeSymbol) { var data = new ComponentData(); foreach (var provider in _dataProviders) { provider.Provide(namedTypeSymbol, data); } return(data); }
private ComponentData[] CreateDataForComponents(ICachedNamedTypeSymbol cachedNamedTypeSymbol) { return(GetComponentNames(cachedNamedTypeSymbol) .Select( componentName => { var data = CreateDataForComponent(cachedNamedTypeSymbol); return data; }) .ToArray()); }
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); } }
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()); }
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); }
public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data) { var memberData = cachedNamedTypeSymbol.GetPublicMemberData().ToArray(); data.SetMemberData(memberData); }
private bool HasContexts(ICachedNamedTypeSymbol cachedNamedTypeSymbol) { return(cachedNamedTypeSymbol.NamedTypeSymbol.GetContextNames().Length != 0); }
public MemberData(ICachedNamedTypeSymbol cachedNamedTypeSymbol, string memberName) { memberTypeSymbol = cachedNamedTypeSymbol.NamedTypeSymbol; compilableTypeString = cachedNamedTypeSymbol.FullTypeName; name = memberName; }
public string[] GetContextNamesOrDefault(ICachedNamedTypeSymbol cachedNamedTypeSymbol) { return(GetContextNamesOrDefault(cachedNamedTypeSymbol.NamedTypeSymbol)); }
public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data) { var contextNames = GetContextNamesOrDefault(cachedNamedTypeSymbol.NamedTypeSymbol); data.SetContextNames(contextNames); }
private string GetFlagPrefix(ICachedNamedTypeSymbol cachedNamedTypeSymbol) { var attr = cachedNamedTypeSymbol.GetAttributes(nameof(FlagPrefixAttribute)).SingleOrDefault(); return(attr == null ? "is" : attr.ConstructorArguments[0].Value?.ToString()); }
public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data) { data.SetFlagPrefix(GetFlagPrefix(cachedNamedTypeSymbol)); }
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); }
public void Provide(ICachedNamedTypeSymbol cachedNamedTypeSymbol, ComponentData data) { data.ShouldGenerateIndex(GetGenerateIndex(cachedNamedTypeSymbol)); }