Skip to content

Commit f29683b

Browse files
committed
fix: Fix source generator
1 parent fadc32e commit f29683b

File tree

13 files changed

+809
-68
lines changed

13 files changed

+809
-68
lines changed

Directory.Build.targets

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,4 @@
8181
<Compile Include="$(GeneratedSkipLocalsInitFile)" />
8282
</ItemGroup>
8383
</Target>
84-
8584
</Project>

src/OpenApi.Client.Cli/Commands/GenerateCommand.cs

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -51,45 +51,30 @@ public override async Task<int> ExecuteAsync(CommandContext context, GenerateCom
5151

5252
GenerationResult generatorResult = await generator.GenerateAsync(cancellationTokenSource.Token);
5353

54-
//OpenApiContract contract = OpenApiContractParser.Parse(
55-
// settings.Namespace,
56-
// settings.ClassName,
57-
// Accessibility.Public,
58-
// serializationResult
59-
//);
60-
61-
//ClientGenerator generator = new(
62-
// contract,
63-
// settings.Serializer switch
64-
// {
65-
// JsonSerializerType.NewtonsoftJson => ClientGeneratorSerializer.NewtonsoftJson,
66-
// _ => ClientGeneratorSerializer.SystemTextJson,
67-
// }
68-
//);
69-
//GenerationResult<string> generatorResult = generator.Generate();
70-
71-
//if (generatorResult.HasErrors)
72-
//{
73-
// foreach (GenerationResultError generatorResultError in generatorResult.Errors)
74-
// {
75-
// AnsiConsole.MarkupLine($"[red]Error:[/] {generatorResultError.Message}");
76-
// }
77-
78-
// return -3;
79-
//}
80-
81-
//generatedSource = generatorResult.Result;
82-
83-
//try
84-
//{
85-
// await File.WriteAllTextAsync(settings.Output, generatedSource, cancellationTokenSource.Token);
86-
//}
87-
//catch (Exception e)
88-
//{
89-
// AnsiConsole.MarkupLine($"[red]Error:[/] {e.Message}");
90-
91-
// return -4;
92-
//}
54+
if (generatorResult.HasErrors)
55+
{
56+
foreach (GenerationError generatorResultError in generatorResult.Errors)
57+
{
58+
AnsiConsole.MarkupLine($"[red]Error:[/] {generatorResultError.Message}");
59+
}
60+
61+
return -3;
62+
}
63+
64+
try
65+
{
66+
await File.WriteAllTextAsync(
67+
settings.Output,
68+
generatorResult.GeneratedClient,
69+
cancellationTokenSource.Token
70+
);
71+
}
72+
catch (Exception e)
73+
{
74+
AnsiConsole.MarkupLine($"[red]Error:[/] {e.Message}");
75+
76+
return -4;
77+
}
9378

9479
AnsiConsole.MarkupLine($"[green]Success:[/] File was properly saved to {settings.Output}.");
9580

src/OpenApi.Client.Cli/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"OpenApiClient.Cli [Test]": {
44
"commandName": "Project",
55
"workingDirectory": "$(ProjectDir)",
6-
"commandLineArgs": "generate ..\\..\\tests\\OpenApi.Client.SourceGenerators.Roslyn431.UnitTests\\OpenApis\\openapi-3.0.1.extended.json --output bin\\UsersClient.cs --namespace Clients.Users --classname UsersClient"
6+
"commandLineArgs": "generate ..\\..\\tests\\OpenApi.Client.SourceGenerators.UnitTests\\OpenApis\\openapi-3.0.1.extended.json --output bin\\UsersClient.cs --namespace Clients.Users --classname UsersClient"
77
}
88
}
99
}

src/OpenApi.Client.SourceGenerators/Client/ClientGenerator.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
// Copyright (C) Leszek Pomianowski and OpenAPI Client Contributors.
44
// All Rights Reserved.
55

6+
using System.Net.Http;
67
using Microsoft.CodeAnalysis.CSharp;
78
using Microsoft.CodeAnalysis.CSharp.Syntax;
89
using Microsoft.OpenApi;
910
using Microsoft.OpenApi.Reader;
1011
using OpenApi.Client.SourceGenerators.Converters;
12+
using OpenApi.Client.SourceGenerators.Readers;
1113
using OpenApi.Client.SourceGenerators.Reflection;
12-
using System.Net.Http;
1314

1415
namespace OpenApi.Client.SourceGenerators.Client;
1516

@@ -32,16 +33,15 @@ public sealed class ClientGenerator(GeneratorData metadata)
3233
/// <returns>The generated source code as a string.</returns>
3334
public async Task<GenerationResult> GenerateAsync(CancellationToken cancellationToken = default)
3435
{
35-
ValidationRuleSet ruleSet = ValidationRuleSet.GetDefaultRuleSet();
36-
OpenApiReaderSettings settings = new() { LeaveStreamOpen = false, RuleSet = ruleSet };
36+
OpenApiReaderSettings settings = CreateReaderSettings();
3737
ReadResult result;
3838

3939
if (metadata.Source is not null)
4040
{
4141
result = await OpenApiModelFactory.LoadAsync(
4242
input: metadata.Source,
4343
format: null,
44-
settings: new OpenApiReaderSettings { LeaveStreamOpen = false, RuleSet = ruleSet },
44+
settings: settings,
4545
cancellationToken: cancellationToken
4646
);
4747
}
@@ -62,13 +62,12 @@ public async Task<GenerationResult> GenerateAsync(CancellationToken cancellation
6262
return new GenerationResult { GeneratedClient = null, Errors = [.. errors] };
6363
}
6464

65-
return CreateClientFromResult(result);
65+
return CreateClientFromReadResult(result);
6666
}
6767

6868
public GenerationResult Generate()
6969
{
70-
ValidationRuleSet ruleSet = ValidationRuleSet.GetDefaultRuleSet();
71-
OpenApiReaderSettings settings = new() { LeaveStreamOpen = false, RuleSet = ruleSet };
70+
OpenApiReaderSettings settings = CreateReaderSettings();
7271
ReadResult result;
7372

7473
if (metadata.Contents is not null)
@@ -88,10 +87,22 @@ public GenerationResult Generate()
8887
return new GenerationResult { GeneratedClient = null, Errors = [.. errors] };
8988
}
9089

91-
return CreateClientFromResult(result);
90+
return CreateClientFromReadResult(result);
91+
}
92+
93+
private static OpenApiReaderSettings CreateReaderSettings()
94+
{
95+
ValidationRuleSet ruleSet = ValidationRuleSet.GetDefaultRuleSet();
96+
97+
OpenApiReaderSettings settings = new() { LeaveStreamOpen = false, RuleSet = ruleSet };
98+
99+
settings.Readers.Remove(OpenApiConstants.Json);
100+
settings.Readers.Add(OpenApiConstants.Json, new CustomOpenApiJsonReader());
101+
102+
return settings;
92103
}
93104

94-
private GenerationResult CreateClientFromResult(ReadResult result)
105+
private GenerationResult CreateClientFromReadResult(ReadResult result)
95106
{
96107
if (result.Diagnostic?.Errors.Count > 0)
97108
{

src/OpenApi.Client.SourceGenerators/GlobalUsings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// Copyright (C) Leszek Pomianowski and OpenAPI Client Contributors.
44
// All Rights Reserved.
55

6-
global using Microsoft.CodeAnalysis;
76
global using System;
87
global using System.Buffers;
98
global using System.Collections;
@@ -15,3 +14,4 @@
1514
global using System.Text;
1615
global using System.Threading;
1716
global using System.Threading.Tasks;
17+
global using Microsoft.CodeAnalysis;

src/OpenApi.Client.SourceGenerators/OpenApi.Client.SourceGenerators.csproj

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,34 @@
3232
<PackageReference Include="PolySharp" PrivateAssets="all" Pack="false" />
3333
</ItemGroup>
3434
<ItemGroup>
35-
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" PrivateAssets="all" GeneratePathProperty="true" />
36-
<PackageReference Include="Microsoft.OpenApi.YamlReader" PrivateAssets="all" GeneratePathProperty="true" />
35+
<PackageReference
36+
Include="Microsoft.Bcl.AsyncInterfaces"
37+
PrivateAssets="all"
38+
GeneratePathProperty="true"
39+
/>
40+
<PackageReference
41+
Include="Microsoft.OpenApi.YamlReader"
42+
PrivateAssets="all"
43+
GeneratePathProperty="true"
44+
/>
3745
<PackageReference Include="Microsoft.OpenApi" PrivateAssets="all" GeneratePathProperty="true" />
3846
<PackageReference Include="SharpYaml" PrivateAssets="all" GeneratePathProperty="true" />
3947
<PackageReference Include="System.Buffers" PrivateAssets="all" GeneratePathProperty="true" />
4048
<PackageReference Include="System.IO.Pipelines" PrivateAssets="all" GeneratePathProperty="true" />
4149
<PackageReference Include="System.Memory" PrivateAssets="all" GeneratePathProperty="true" />
4250
<PackageReference Include="System.Numerics.Vectors" PrivateAssets="all" GeneratePathProperty="true" />
43-
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" PrivateAssets="all" GeneratePathProperty="true" />
51+
<PackageReference
52+
Include="System.Runtime.CompilerServices.Unsafe"
53+
PrivateAssets="all"
54+
GeneratePathProperty="true"
55+
/>
4456
<PackageReference Include="System.Text.Encodings.Web" PrivateAssets="all" GeneratePathProperty="true" />
4557
<PackageReference Include="System.Text.Json" PrivateAssets="all" GeneratePathProperty="true" />
46-
<PackageReference Include="System.Threading.Tasks.Extensions" PrivateAssets="all" GeneratePathProperty="true" />
58+
<PackageReference
59+
Include="System.Threading.Tasks.Extensions"
60+
PrivateAssets="all"
61+
GeneratePathProperty="true"
62+
/>
4763
</ItemGroup>
4864
<ItemGroup>
4965
<AdditionalFiles Include="AnalyzerReleases.Shipped.md" />

0 commit comments

Comments
 (0)