public void Rewrite()
        {
            var project     = AdhocProject.FromDirectory($"{TestContext.CurrentContext.TestDirectory}/../../../../AspNetCoreExample.Generator");
            var compilation = project.GetCompilationAsync().GetAwaiter().GetResult()
                              .AddReferences(GetMetadataReferences())
                              .AddReferences(MetadataReference.CreateFromFile(typeof(ControllerBase).Assembly.Location));
            var tree = compilation.SyntaxTrees.Single(x => x.FilePath.Contains("ApiControllerTypeBuildingContext.cs"));

            var root = tree.GetRoot();

            var result = new TypeInfoRewriter(compilation.GetSemanticModel(tree)).Visit(root);

            compilation = compilation.ReplaceSyntaxTree(tree, result.SyntaxTree);
            result      = new RemoveUsingsRewriter(compilation.GetSemanticModel(result.SyntaxTree)).Visit(result);
            var str = result.ToFullString();

            var expectedCode = File.ReadAllText($"{TestContext.CurrentContext.TestDirectory}/Files/ApiControllerTypeBuildingContext.txt").Replace("\r\n", "\n");

            str.Diff(expectedCode).ShouldBeEmpty();

            var assembly        = CompileAssembly(result.SyntaxTree);
            var buildingContext = assembly.GetType("AspNetCoreExample.Generator.ApiControllerTypeBuildingContext");
            var acceptMethod    = buildingContext.GetMethod("Accept", BindingFlags.Public | BindingFlags.Static);

            acceptMethod.Invoke(null, new object[] { TypeInfo.From <bool>() }).Should().Be(false);
            acceptMethod.Invoke(null, new object[] { TypeInfo.From <UsersController>() }).Should().Be(true);
        }
        public void Rewrite()
        {
            var project = AdhocProject.FromDirectory($"{TestContext.CurrentContext.TestDirectory}/../../../../AspNetCoreExample.Generator");

            project = project.RemoveDocument(project.Documents.Single(x => x.Name == "ApiControllerTypeBuildingContext.cs").Id)
                      .AddDocument("ApiControllerTypeBuildingContext.cs", File.ReadAllText(GetFilePath("ApiControllerTypeBuildingContext.txt")))
                      .Project;

            var compilation = project.GetCompilationAsync().GetAwaiter().GetResult() !
                              .AddReferences(AdhocProject.GetMetadataReferences())
                              .AddReferences(MetadataReference.CreateFromFile(typeof(ControllerBase).Assembly.Location));

            TypeInfoRewriter.Types.Clear();
            var tree   = compilation.SyntaxTrees.Single(x => x.FilePath.Contains("ApiControllerTypeBuildingContext.cs"));
            var result = TypeInfoRewriter.Rewrite(compilation, tree);
            var str    = result.ToString();

            var expectedCode = File.ReadAllText(GetFilePath("ApiControllerTypeBuildingContext.Expected.txt")).Replace("\r\n", "\n");

            str.Diff(expectedCode).ShouldBeEmpty();

            var assembly        = AdhocProject.CompileAssembly(new[] { result });
            var buildingContext = assembly.GetType("AspNetCoreExample.Generator.ApiControllerTypeBuildingContext") !;
            var acceptMethod    = buildingContext.GetMethod("Accept", BindingFlags.Public | BindingFlags.Static) !;

            acceptMethod.Invoke(null, new object[] { TypeInfo.From <bool>() }).Should().Be(false);
            acceptMethod.Invoke(null, new object[] { TypeInfo.From <UsersController>() }).Should().Be(true);
        }