Skip to content

Commit d9aa8d0

Browse files
authored
Merge pull request #1667 from json-api-dotnet/update-kiota
Workaround nullability bug in kiota
2 parents 2212fc2 + 8db185c commit d9aa8d0

File tree

712 files changed

+6831
-19162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

712 files changed

+6831
-19162
lines changed

.config/dotnet-tools.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"rollForward": false
3232
},
3333
"microsoft.openapi.kiota": {
34-
"version": "1.21.0",
34+
"version": "1.22.3",
3535
"commands": [
3636
"kiota"
3737
],

Directory.Build.props

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<JsonApiDotNetCoreVersionPrefix>5.6.1</JsonApiDotNetCoreVersionPrefix>
1313
<NuGetAuditMode>direct</NuGetAuditMode>
1414
<NoWarn>$(NoWarn);NETSDK1215</NoWarn>
15+
<KiotaPatchGeneratedCodeScriptPath>$(MSBuildThisFileDirectory)kiota-patch-generated-code.ps1</KiotaPatchGeneratedCodeScriptPath>
1516
</PropertyGroup>
1617

1718
<PropertyGroup>

kiota-patch-generated-code.ps1

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<#
2+
Patches C# code generated by kiota.
3+
Workaround for bug at https://github.com/microsoft/kiota/issues/3944#issuecomment-2597201229.
4+
#>
5+
param (
6+
# Path to directory where kiota generated C# code.
7+
[Parameter(Mandatory=$true)]
8+
[string]$kiotaOutputDir
9+
)
10+
11+
$osLineBreak = [System.Environment]::NewLine
12+
$files = Get-ChildItem -Path $kiotaOutputDir -Recurse -Include *.cs
13+
14+
foreach ($file in $files)
15+
{
16+
$content = Get-Content $file -Raw
17+
18+
# add #nullable enable, suppress warning CS8625: Cannot convert null literal to non-nullable reference type.
19+
$content = ($content -replace '// <auto-generated/>', "// <auto-generated/>$osLineBreak#nullable enable$osLineBreak#pragma warning disable CS8625")
20+
21+
# remove conditionals
22+
$content = ($content -replace "(?s)#if NETSTANDARD2_1_OR_GREATER .*?$osLineBreak#nullable enable$osLineBreak(?<ifBody>.*?)$osLineBreak#nullable restore$osLineBreak#else$osLineBreak(?<elseBody>.*?)$osLineBreak#endif", "`$1")
23+
24+
# insert new line between member and next summary
25+
$content = ($content -replace "}$osLineBreak(?<indentedSummary>\s+/// <summary>)", "}$osLineBreak$osLineBreak`$1")
26+
27+
Set-Content -Path $file -Value $content
28+
}

src/Examples/OpenApiKiotaClientExample/GeneratedCode/Api/ApiRequestBuilder.cs

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// <auto-generated/>
2+
#nullable enable
3+
#pragma warning disable CS8625
24
#pragma warning disable CS0618
35
using Microsoft.Kiota.Abstractions.Extensions;
46
using Microsoft.Kiota.Abstractions;
@@ -23,21 +25,25 @@ public partial class ApiRequestBuilder : BaseRequestBuilder
2325
{
2426
get => new global::OpenApiKiotaClientExample.GeneratedCode.Api.Operations.OperationsRequestBuilder(PathParameters, RequestAdapter);
2527
}
28+
2629
/// <summary>The people property</summary>
2730
public global::OpenApiKiotaClientExample.GeneratedCode.Api.People.PeopleRequestBuilder People
2831
{
2932
get => new global::OpenApiKiotaClientExample.GeneratedCode.Api.People.PeopleRequestBuilder(PathParameters, RequestAdapter);
3033
}
34+
3135
/// <summary>The tags property</summary>
3236
public global::OpenApiKiotaClientExample.GeneratedCode.Api.Tags.TagsRequestBuilder Tags
3337
{
3438
get => new global::OpenApiKiotaClientExample.GeneratedCode.Api.Tags.TagsRequestBuilder(PathParameters, RequestAdapter);
3539
}
40+
3641
/// <summary>The todoItems property</summary>
3742
public global::OpenApiKiotaClientExample.GeneratedCode.Api.TodoItems.TodoItemsRequestBuilder TodoItems
3843
{
3944
get => new global::OpenApiKiotaClientExample.GeneratedCode.Api.TodoItems.TodoItemsRequestBuilder(PathParameters, RequestAdapter);
4045
}
46+
4147
/// <summary>
4248
/// Instantiates a new <see cref="global::OpenApiKiotaClientExample.GeneratedCode.Api.ApiRequestBuilder"/> and sets the default values.
4349
/// </summary>
@@ -46,6 +52,7 @@ public partial class ApiRequestBuilder : BaseRequestBuilder
4652
public ApiRequestBuilder(Dictionary<string, object> pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/api", pathParameters)
4753
{
4854
}
55+
4956
/// <summary>
5057
/// Instantiates a new <see cref="global::OpenApiKiotaClientExample.GeneratedCode.Api.ApiRequestBuilder"/> and sets the default values.
5158
/// </summary>
@@ -57,3 +64,4 @@ public ApiRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(r
5764
}
5865
}
5966
#pragma warning restore CS0618
67+

src/Examples/OpenApiKiotaClientExample/GeneratedCode/Api/Operations/OperationsRequestBuilder.cs

+7-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// <auto-generated/>
2+
#nullable enable
3+
#pragma warning disable CS8625
24
#pragma warning disable CS0618
35
using Microsoft.Kiota.Abstractions.Extensions;
46
using Microsoft.Kiota.Abstractions.Serialization;
@@ -25,6 +27,7 @@ public partial class OperationsRequestBuilder : BaseRequestBuilder
2527
public OperationsRequestBuilder(Dictionary<string, object> pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/api/operations", pathParameters)
2628
{
2729
}
30+
2831
/// <summary>
2932
/// Instantiates a new <see cref="global::OpenApiKiotaClientExample.GeneratedCode.Api.Operations.OperationsRequestBuilder"/> and sets the default values.
3033
/// </summary>
@@ -33,6 +36,7 @@ public OperationsRequestBuilder(Dictionary<string, object> pathParameters, IRequ
3336
public OperationsRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/api/operations", rawUrl)
3437
{
3538
}
39+
3640
/// <summary>
3741
/// Performs multiple mutations in a linear and atomic manner.
3842
/// </summary>
@@ -45,15 +49,8 @@ public OperationsRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) :
4549
/// <exception cref="global::OpenApiKiotaClientExample.GeneratedCode.Models.ErrorResponseDocument">When receiving a 404 status code</exception>
4650
/// <exception cref="global::OpenApiKiotaClientExample.GeneratedCode.Models.ErrorResponseDocument">When receiving a 409 status code</exception>
4751
/// <exception cref="global::OpenApiKiotaClientExample.GeneratedCode.Models.ErrorResponseDocument">When receiving a 422 status code</exception>
48-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
49-
#nullable enable
5052
public async Task<global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsResponseDocument?> PostAsync(global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsRequestDocument body, Action<RequestConfiguration<DefaultQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default)
5153
{
52-
#nullable restore
53-
#else
54-
public async Task<global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsResponseDocument> PostAsync(global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsRequestDocument body, Action<RequestConfiguration<DefaultQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default)
55-
{
56-
#endif
5754
_ = body ?? throw new ArgumentNullException(nameof(body));
5855
var requestInfo = ToPostRequestInformation(body, requestConfiguration);
5956
var errorMapping = new Dictionary<string, ParsableFactory<IParsable>>
@@ -66,28 +63,23 @@ public OperationsRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) :
6663
};
6764
return await RequestAdapter.SendAsync<global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsResponseDocument>(requestInfo, global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsResponseDocument.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false);
6865
}
66+
6967
/// <summary>
7068
/// Performs multiple mutations in a linear and atomic manner.
7169
/// </summary>
7270
/// <returns>A <see cref="RequestInformation"/></returns>
7371
/// <param name="body">The request body</param>
7472
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
75-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
76-
#nullable enable
7773
public RequestInformation ToPostRequestInformation(global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsRequestDocument body, Action<RequestConfiguration<DefaultQueryParameters>>? requestConfiguration = default)
7874
{
79-
#nullable restore
80-
#else
81-
public RequestInformation ToPostRequestInformation(global::OpenApiKiotaClientExample.GeneratedCode.Models.OperationsRequestDocument body, Action<RequestConfiguration<DefaultQueryParameters>> requestConfiguration = default)
82-
{
83-
#endif
8475
_ = body ?? throw new ArgumentNullException(nameof(body));
8576
var requestInfo = new RequestInformation(Method.POST, UrlTemplate, PathParameters);
8677
requestInfo.Configure(requestConfiguration);
8778
requestInfo.Headers.TryAdd("Accept", "application/vnd.api+json;ext=atomic");
8879
requestInfo.SetContentFromParsable(RequestAdapter, "application/vnd.api+json;ext=atomic", body);
8980
return requestInfo;
9081
}
82+
9183
/// <summary>
9284
/// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored.
9385
/// </summary>
@@ -100,3 +92,4 @@ public RequestInformation ToPostRequestInformation(global::OpenApiKiotaClientExa
10092
}
10193
}
10294
#pragma warning restore CS0618
95+
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// <auto-generated/>
2+
#nullable enable
3+
#pragma warning disable CS8625
24
#pragma warning disable CS0618
35
using Microsoft.Kiota.Abstractions.Extensions;
46
using Microsoft.Kiota.Abstractions.Serialization;
@@ -25,6 +27,7 @@ public partial class AssignedTodoItemsRequestBuilder : BaseRequestBuilder
2527
public AssignedTodoItemsRequestBuilder(Dictionary<string, object> pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/api/people/{id}/assignedTodoItems{?query*}", pathParameters)
2628
{
2729
}
30+
2831
/// <summary>
2932
/// Instantiates a new <see cref="global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder"/> and sets the default values.
3033
/// </summary>
@@ -33,6 +36,7 @@ public AssignedTodoItemsRequestBuilder(Dictionary<string, object> pathParameters
3336
public AssignedTodoItemsRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/api/people/{id}/assignedTodoItems{?query*}", rawUrl)
3437
{
3538
}
39+
3640
/// <summary>
3741
/// Retrieves the related todoItems of an individual person&apos;s assignedTodoItems relationship.
3842
/// </summary>
@@ -41,15 +45,8 @@ public AssignedTodoItemsRequestBuilder(string rawUrl, IRequestAdapter requestAda
4145
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
4246
/// <exception cref="global::OpenApiKiotaClientExample.GeneratedCode.Models.ErrorResponseDocument">When receiving a 400 status code</exception>
4347
/// <exception cref="global::OpenApiKiotaClientExample.GeneratedCode.Models.ErrorResponseDocument">When receiving a 404 status code</exception>
44-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
45-
#nullable enable
4648
public async Task<global::OpenApiKiotaClientExample.GeneratedCode.Models.TodoItemCollectionResponseDocument?> GetAsync(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderGetQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default)
4749
{
48-
#nullable restore
49-
#else
50-
public async Task<global::OpenApiKiotaClientExample.GeneratedCode.Models.TodoItemCollectionResponseDocument> GetAsync(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderGetQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default)
51-
{
52-
#endif
5350
var requestInfo = ToGetRequestInformation(requestConfiguration);
5451
var errorMapping = new Dictionary<string, ParsableFactory<IParsable>>
5552
{
@@ -58,60 +55,43 @@ public AssignedTodoItemsRequestBuilder(string rawUrl, IRequestAdapter requestAda
5855
};
5956
return await RequestAdapter.SendAsync<global::OpenApiKiotaClientExample.GeneratedCode.Models.TodoItemCollectionResponseDocument>(requestInfo, global::OpenApiKiotaClientExample.GeneratedCode.Models.TodoItemCollectionResponseDocument.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false);
6057
}
58+
6159
/// <summary>
6260
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.
6361
/// </summary>
6462
/// <param name="cancellationToken">Cancellation token to use when cancelling requests</param>
6563
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
66-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
67-
#nullable enable
6864
public async Task HeadAsync(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderHeadQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default)
6965
{
70-
#nullable restore
71-
#else
72-
public async Task HeadAsync(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderHeadQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default)
73-
{
74-
#endif
7566
var requestInfo = ToHeadRequestInformation(requestConfiguration);
7667
await RequestAdapter.SendNoContentAsync(requestInfo, default, cancellationToken).ConfigureAwait(false);
7768
}
69+
7870
/// <summary>
7971
/// Retrieves the related todoItems of an individual person&apos;s assignedTodoItems relationship.
8072
/// </summary>
8173
/// <returns>A <see cref="RequestInformation"/></returns>
8274
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
83-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
84-
#nullable enable
8575
public RequestInformation ToGetRequestInformation(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderGetQueryParameters>>? requestConfiguration = default)
8676
{
87-
#nullable restore
88-
#else
89-
public RequestInformation ToGetRequestInformation(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderGetQueryParameters>> requestConfiguration = default)
90-
{
91-
#endif
9277
var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters);
9378
requestInfo.Configure(requestConfiguration);
9479
requestInfo.Headers.TryAdd("Accept", "application/vnd.api+json");
9580
return requestInfo;
9681
}
82+
9783
/// <summary>
9884
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.
9985
/// </summary>
10086
/// <returns>A <see cref="RequestInformation"/></returns>
10187
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
102-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
103-
#nullable enable
10488
public RequestInformation ToHeadRequestInformation(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderHeadQueryParameters>>? requestConfiguration = default)
10589
{
106-
#nullable restore
107-
#else
108-
public RequestInformation ToHeadRequestInformation(Action<RequestConfiguration<global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder.AssignedTodoItemsRequestBuilderHeadQueryParameters>> requestConfiguration = default)
109-
{
110-
#endif
11190
var requestInfo = new RequestInformation(Method.HEAD, UrlTemplate, PathParameters);
11291
requestInfo.Configure(requestConfiguration);
11392
return requestInfo;
11493
}
94+
11595
/// <summary>
11696
/// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored.
11797
/// </summary>
@@ -121,40 +101,29 @@ public RequestInformation ToHeadRequestInformation(Action<RequestConfiguration<g
121101
{
122102
return new global::OpenApiKiotaClientExample.GeneratedCode.Api.People.Item.AssignedTodoItems.AssignedTodoItemsRequestBuilder(rawUrl, RequestAdapter);
123103
}
104+
124105
/// <summary>
125106
/// Retrieves the related todoItems of an individual person&apos;s assignedTodoItems relationship.
126107
/// </summary>
127108
[global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
128109
public partial class AssignedTodoItemsRequestBuilderGetQueryParameters
129110
{
130111
/// <summary>For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.</summary>
131-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
132-
#nullable enable
133112
[QueryParameter("query")]
134113
public string? Query { get; set; }
135-
#nullable restore
136-
#else
137-
[QueryParameter("query")]
138-
public string Query { get; set; }
139-
#endif
140114
}
115+
141116
/// <summary>
142117
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.
143118
/// </summary>
144119
[global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
145120
public partial class AssignedTodoItemsRequestBuilderHeadQueryParameters
146121
{
147122
/// <summary>For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.</summary>
148-
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
149-
#nullable enable
150123
[QueryParameter("query")]
151124
public string? Query { get; set; }
152-
#nullable restore
153-
#else
154-
[QueryParameter("query")]
155-
public string Query { get; set; }
156-
#endif
157125
}
158126
}
159127
}
160128
#pragma warning restore CS0618
129+

0 commit comments

Comments
 (0)