-
-
Notifications
You must be signed in to change notification settings - Fork 6.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add option to generate a fully sealed
model in the JavaSpring
generator
#20503
Add option to generate a fully sealed
model in the JavaSpring
generator
#20503
Conversation
sealed
interfaces for oneOf
in the JavaSpring
generatorsealed
model in the JavaSpring
generator
sealed
model in the JavaSpring
generatorsealed
model in the JavaSpring
generator
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @alex-nt, thanks for the PR!
It generally looks good, but there are some special cases which need to be handled. When using your new feature on the input spec modules/openapi-generator/src/test/resources/3_0/oneOf_array.yaml, this is the generated code:
public sealed interface MyExampleGet200Response permits List<@Valid OneOf1> {
- HTML encoding needs to be disabled
- generics are not supported in the permits clause, afaik
List
shouldn't be in thepermits
list (same applies to other classes not generated by us)- annotations are not supported in the permits clause, afaik
Could you fix these problems please?
It might also make sense to test with some other "oneOf" files from modules/openapi-generator/src/test/resources/3_0 to find further cases that need special handling.
modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java
Show resolved
Hide resolved
modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java
Outdated
Show resolved
Hide resolved
@martin-mfg Thanks a lot, I'll look into all the |
…en/languages/SpringCodegen.java Co-authored-by: martin-mfg <[email protected]>
@martin-mfg how should I handle these? Just skip them? |
flake.lock
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you intend to include these changes? If yes that's fine. Just want to check, since you didn't include this in your initial PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just ran nix flake update
as I wanted to make sure that it has the latest JDK11 build (got burned in the past in a minor jdk11 release). I can revert if that is preferred.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's fine, leave it as it is. :) No need to revert.
Yes please. (Unless you have a better idea?) |
@martin-mfg I tested with most of the Regarding these 2:
Now the collections are skipped, but can there be other generics items there? In the spec it does allow generics (without the
I can't figure out how an annotation would get in there, any test file I should use to test this scenario? |
@martin-mfg so, I think it now works in all scenarios were code generation works for
public String getFruitType(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@alex-nt The new changes mostly look good to me. In addition to the small comments below, there is one more problem: the generated code doesn't compile if the sealed
keyword appears anywhere, because the generated pom.xml sets the Java version to 1.8, which is too old for the sealed
keyword.
The problems from my earlier comment are all resolved now. 👍 To still answer your questions:
Now the collections are skipped, but can there be other generics items there?
No, I don't think so.
I can't figure out how an annotation would get in there
Since collections are skipped now, annotations should not be a problem anymore.
.../openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java
Outdated
Show resolved
Hide resolved
modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
Outdated
Show resolved
Hide resolved
modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java
Show resolved
Hide resolved
@martin-mfg did the cleanup, I hope it is ok (retested with some examples, seems good). |
@@ -59,6 +59,8 @@ public class CodegenModel implements IJsonSchemaValidationProperties { | |||
public Set<String> oneOf = new TreeSet<>(); | |||
public Set<String> allOf = new TreeSet<>(); | |||
|
|||
public List<String> permits = new ArrayList<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you please add a 1-liner explain what permits
is?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is that "similar to" children (List<CodegenModel>
) ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar but different. children
contains the full list of children, even indirect children. permits
contains only the direct descendants (first level).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@wing328 do you see this differently? Any suggestion on how I should change it? :D
Add option to generate a fully
sealed
model in theJavaSpring
generator.Related with #15586
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*
.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master
(upcoming7.x.0
minor release - breaking changes with fallbacks),8.0.x
(breaking changes without fallbacks)