コード例 #1
0
        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))));
            }
        }
コード例 #2
0
 private IEnumerable <MemberDeclarationSyntax> SubClass(T[] instancesAr)
 {
     yield return(Constructs.Class(SubClassName, new[]
     {
         SyntaxKind.PublicKeyword,
         SyntaxKind.StaticKeyword,
         SyntaxKind.PartialKeyword
     },
                                   () => SyntaxFactory.List(Members(instancesAr))
                                   ));
 }
コード例 #3
0
        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());
        }