Commit 13f52c1
committed
[BUG][CORE] Use intersection of required fields across anyOf/oneOf members
The merged composed model from anyOf/oneOf added every member's required
fields to the resulting `required` set. Per OAS / JSON Schema semantics,
a value is only guaranteed present if EVERY member of an anyOf/oneOf
requires it, so the merged set should be the intersection.
Example:
response:
anyOf:
- $ref: '#/components/schemas/VoteResponse' # required: [status, voteId]
- $ref: '#/components/schemas/APIError' # required: [status, reason, code]
Previously: status, voteId, reason, code all marked required.
Now: only status is required (the only field present in both).
allOf semantics are unchanged (still union).
Affects every generator that consumes CodegenModel.required for non-null
types or constructor signatures (Swift, Kotlin, Java POJOs, Dart, etc.).
Sample regeneration may flip previously-required fields to optional in
generated code where this pattern is in use; that is the intended
behavior.
Test: anyOfRequiredFieldsIntersectionTest in Swift6ClientCodegenModelTest
covers the contract via swift6_anyof_required.yaml (chosen because
swift6 is one of the affected generators; the change itself lives in
DefaultCodegen and applies everywhere).
Closes #236671 parent 2917ce8 commit 13f52c1
3 files changed
Lines changed: 158 additions & 3 deletions
File tree
- modules/openapi-generator/src
- main/java/org/openapitools/codegen
- test
- java/org/openapitools/codegen/swift6
- resources/3_0
Lines changed: 34 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2756 | 2756 | | |
2757 | 2757 | | |
2758 | 2758 | | |
| 2759 | + | |
| 2760 | + | |
| 2761 | + | |
| 2762 | + | |
| 2763 | + | |
| 2764 | + | |
| 2765 | + | |
2759 | 2766 | | |
2760 | 2767 | | |
2761 | 2768 | | |
| |||
2816 | 2823 | | |
2817 | 2824 | | |
2818 | 2825 | | |
2819 | | - | |
| 2826 | + | |
| 2827 | + | |
| 2828 | + | |
| 2829 | + | |
| 2830 | + | |
| 2831 | + | |
| 2832 | + | |
| 2833 | + | |
2820 | 2834 | | |
2821 | 2835 | | |
2822 | 2836 | | |
| |||
2857 | 2871 | | |
2858 | 2872 | | |
2859 | 2873 | | |
2860 | | - | |
2861 | | - | |
| 2874 | + | |
| 2875 | + | |
| 2876 | + | |
| 2877 | + | |
| 2878 | + | |
| 2879 | + | |
| 2880 | + | |
| 2881 | + | |
| 2882 | + | |
2862 | 2883 | | |
2863 | 2884 | | |
2864 | 2885 | | |
| |||
2868 | 2889 | | |
2869 | 2890 | | |
2870 | 2891 | | |
| 2892 | + | |
| 2893 | + | |
| 2894 | + | |
| 2895 | + | |
| 2896 | + | |
| 2897 | + | |
| 2898 | + | |
| 2899 | + | |
| 2900 | + | |
| 2901 | + | |
2871 | 2902 | | |
2872 | 2903 | | |
2873 | 2904 | | |
| |||
Lines changed: 73 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| 32 | + | |
| 33 | + | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
| |||
163 | 166 | | |
164 | 167 | | |
165 | 168 | | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
166 | 239 | | |
Lines changed: 51 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
0 commit comments