internal static void Specialize(Context context, RewriteInfo rewriteInfo) { rewriteInfo.ElementFieldColumns = rewriteInfo.ElementType.GetFields().Select(field => { var declaredSymbol = field.IsImplicitlyDeclared ? field.AssociatedSymbol : field; if (null != declaredSymbol) { return new { field, groupName = GetGroupName(context, declaredSymbol) } } ; else { throw new TranspilationException($"Could not find associated symbol for implicitly declared field: {field}"); } }).ToDictionary(x => x.field, x => x.groupName); rewriteInfo.Specialization = SF.ClassDeclaration($"{context.UnboundValueArrayType.Name}_{rewriteInfo.ElementType.Name}") .WithMembers(SF.List(GenerateMembers(context, rewriteInfo))); }
static IEnumerable <MemberDeclarationSyntax> GenerateMembers(Context context, RewriteInfo rewriteInfo) => rewriteInfo.ElementFieldColumns.GroupBy(x => x.Value).SelectMany(x => ColumnToMembers(x.Key, x.Select(y => y.Key)));