OpenAPITools / OpenAPITools/openapi-generator
[BUG][csharp-netcore] anyOf/oneOf generates non-compilable code (null-coalescing operator on enum)
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator (example)?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
AnyOf/OneOf with an enum will generate non-compilable C# code (using null coalescing operator on an enum):
For instance with a oneof parameter schema:
"schema": {
"oneOf": [
{
"title": "firstEnum",
"enum": [
"one",
"two"
]
},
{
"title": "secondEnum",
"type": "integer",
"enum": [
"0",
"1"
]
}
]
}
Incorrect code:
/// <summary>
/// Initializes a new instance of the <see cref="MyOperationAParameter" /> class
/// with the <see cref="FirstEnum" /> class
/// </summary>
/// <param name="actualInstance">An instance of FirstEnum.</param>
public MyOperationAParameter(FirstEnum actualInstance)
{
this.IsNullable = false;
this.SchemaType= "oneOf";
this.ActualInstance = actualInstance ?? throw new ArgumentException("Invalid instance found. Must not be null.");
}
/// <summary>
/// Initializes a new instance of the <see cref="MyOperationAParameter" /> class
/// with the <see cref="SecondEnum" /> class
/// </summary>
/// <param name="actualInstance">An instance of SecondEnum.</param>
public MyOperationAParameter(SecondEnum actualInstance)
{
this.IsNullable = false;
this.SchemaType= "oneOf";
this.ActualInstance = actualInstance ?? throw new ArgumentException("Invalid instance found. Must not be null.");
}
Expected output:
/// <summary>
/// Initializes a new instance of the <see cref="MyOperationAParameter" /> class
/// with the <see cref="FirstEnum" /> class
/// </summary>
/// <param name="actualInstance">An instance of FirstEnum.</param>
public MyOperationAParameter(FirstEnum actualInstance)
{
this.IsNullable = false;
this.SchemaType= "oneOf";
this.ActualInstance = actualInstance;
}
/// <summary>
/// Initializes a new instance of the <see cref="MyOperationAParameter" /> class
/// with the <see cref="SecondEnum" /> class
/// </summary>
/// <param name="actualInstance">An instance of SecondEnum.</param>
public MyOperationAParameter(SecondEnum actualInstance)
{
this.IsNullable = false;
this.SchemaType= "oneOf";
this.ActualInstance = actualInstance;
}
openapi-generator version
6.0.1
OpenAPI declaration file content or url
anyOf/oneOf with an enum.
See in Description.
Steps to reproduce
generate csharp-netcore project with any specification file containing similar anyOf/oneOf.
Related issues/PRs
Suggest a fix
I'll reference this in fix PR.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by generating a csharp-netcore project from an OpenAPI specification containing the shown anyOf/oneOf enum schema, then inspect the generated constructors. Done means the generated C# code compiles and enum constructors no longer use the null-coalescing operator, matching the expected output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, openapi
- Domain
- backend-api-design, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100