コード例 #1
0
ファイル: SyntaxVisitor.cs プロジェクト: 3HMonkey/DefianceUOR
 public SyntaxVisitor(SemanticModel semanticModel, SerializerSyntaxReceiver syntaxReceiver)
 {
     _semanticModel  = semanticModel;
     _syntaxReceiver = syntaxReceiver;
 }
コード例 #2
0
ファイル: Application.cs プロジェクト: 3HMonkey/DefianceUOR
        public static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                throw new ArgumentException("Usage: dotnet SerializationSchemaGenerator.dll <path to solution>");
            }

            var solutionPath = args[0];

            Parallel.ForEach(
                SourceCodeAnalysis.GetCompilation(solutionPath),
                (projectCompilation) =>
            {
                var(project, compilation) = projectCompilation;
                if (project.Name.EndsWith(".Tests", StringComparison.Ordinal) || project.Name == "Benchmarks")
                {
                    return;
                }

                var projectFile   = new FileInfo(project.FilePath !);
                var projectPath   = projectFile.Directory?.FullName;
                var migrationPath = Path.Join(projectPath, "Migrations");
                Directory.CreateDirectory(migrationPath);

                var syntaxReceiver = new SerializerSyntaxReceiver();

                foreach (var syntaxTree in compilation.SyntaxTrees)
                {
                    var root          = syntaxTree.GetRoot();
                    var syntaxVisitor = new SyntaxVisitor(compilation.GetSemanticModel(syntaxTree), syntaxReceiver);
                    syntaxVisitor.Visit(root);
                }

                var jsonOptions = new JsonSerializerOptions
                {
                    WriteIndented          = true,
                    AllowTrailingCommas    = true,
                    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
                    ReadCommentHandling    = JsonCommentHandling.Skip
                };

                var serializableTypes         = syntaxReceiver.SerializableList;
                var embeddedSerializableTypes = syntaxReceiver.EmbeddedSerializableList;

                foreach (var(classSymbol, (attributeData, fieldsList)) in syntaxReceiver.ClassAndFields)
                {
                    var source = compilation.GenerateSerializationPartialClass(
                        classSymbol,
                        attributeData,
                        migrationPath,
                        false,
                        jsonOptions,
                        fieldsList.ToImmutableArray(),
                        serializableTypes,
                        embeddedSerializableTypes
                        );
                }

                foreach (var(classSymbol, (attributeData, fieldsList)) in syntaxReceiver.EmbeddedClassAndFields)
                {
                    var source = compilation.GenerateSerializationPartialClass(
                        classSymbol,
                        attributeData,
                        migrationPath,
                        true,
                        jsonOptions,
                        fieldsList.ToImmutableArray(),
                        serializableTypes,
                        embeddedSerializableTypes
                        );
                }
            }