protected override IEnumerable <MemberDeclarationSyntax> Members(T[] instancesAr) { var grouped = instancesAr.GroupBy(MetadataResolver.GetEntityCategory); foreach (var group in grouped) { yield return(Constructs.Class(string.IsNullOrEmpty(group.Key) ? "All" : group.Key, new[] { SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword }, () => SyntaxFactory.List(@group.Select(CreateConstant)))); } }
private IEnumerable <MemberDeclarationSyntax> SubClass(T[] instancesAr) { yield return(Constructs.Class(SubClassName, new[] { SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword, SyntaxKind.PartialKeyword }, () => SyntaxFactory.List(Members(instancesAr)) )); }
public void Generate(string definedInNamespace, IEnumerable <T> instances, string file) { var instancesAr = instances.ToArray(); var member = new[] { Constructs.Class(MetadataResolver.DataDirectoryToOperateIn, new[] { SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword, SyntaxKind.PartialKeyword }, () => SyntaxFactory.List(SubClass(instancesAr)) ) }; var namespaces = instancesAr.Select(i => i.GetType().Namespace) .Union(Mapper.FoundTypes.SelectMany(ExtractNamespaces)) .Except(new[] { "System" }) .Distinct(); var codeFile = new CodeFile { DefinedInNamespace = definedInNamespace, UsingNamespaces = namespaces, ClassName = "Factory", AccessModifiers = new[] { SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword, SyntaxKind.PartialKeyword }, Members = () => member }; File.WriteAllText(file, codeFile.Definition()); }