[java][doc] Fix Makdown examples: wrong collection type used to initialize Sets#23160
Conversation
…ate Sets without checking 'uniqueItems'
Chrimle
left a comment
There was a problem hiding this comment.
Why use a concrete implementation? Cleaner, and less opinionated to use the more common Set static methods.
| } else { | ||
| example = "Arrays.asList()"; | ||
| if (p.uniqueItems) { | ||
| example = "new LinkedHashSet<>()"; |
There was a problem hiding this comment.
| example = "new LinkedHashSet<>()"; | |
| example = "Set.of()"; |
There was a problem hiding this comment.
This comment is not relevant, and may be marked as "resolved" 👍
| } | ||
| example = "Arrays.asList(" + innerExample + ")"; | ||
| if (p.uniqueItems) { | ||
| example = "new LinkedHashSet<>(" + example + ")"; |
There was a problem hiding this comment.
| example = "new LinkedHashSet<>(" + example + ")"; | |
| example = "Set.of(" + example + ")"; |
There was a problem hiding this comment.
afaik, Set.of(Arrays.asList(xxx)) will create a Set<List<Xxx>>, not a Set<Xxx>.
So this change would generate an invalid syntax.
Also, the reason for the LinkedHashSet instead of Set is to keep insertion order. But yeah, in those examples the element order doesn't really matter.
I can use Set.of() for the empty set, but not here
There was a problem hiding this comment.
Hmm, ordering in Sets is an interesting topic. I'm not sure if there is an established standard set in either OpenAPI or openapi-generator 🤔 (I just realized that LinkedHashSet is THE standard used in openapi-generator, so this is a non-issue)
Yeah, I did not know what the type of example was, that would indeed be incorrect 😄
I left my comment a bit open-ended, because I wasn't completely sure, but now I'm convinced this is the correct solution 👍 Thanks for the patience @robinmarechal 😊
There was a problem hiding this comment.
How come I cannot resolve my own comments @wing328, is that an admin feature? 🤔
As mentioned in #23072 (comment), the generated documentation uses
Arrays.asList()to initialize arrays, without checkinguniqueItemsCf.AbstractJavaCodegen#setParameterExampleValue(CodegenParameter).This leads to invalid examples like
Set<String> tags = Arrays.asList();This simple change checks
uniqueItems. If true, it usesnew LinkedHashSet<>()instead ofArrays.asList().I did not create a new issue for this simple change, if I should create one just tell me.
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.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10) @martin-mfg (2023/08)
Summary by cubic
Fix Java docs example generation: when uniqueItems is true, Set examples now use LinkedHashSet instead of Arrays.asList. This prevents invalid examples like Set tags = Arrays.asList() and updates the petstore sample docs accordingly.
Written for commit 7955375. Summary will update on new commits.