Skip to content

Commit 6746be9

Browse files
committed
fix allOf handling in 3.1 spec
1 parent d88023f commit 6746be9

File tree

10 files changed

+684
-1
lines changed

10 files changed

+684
-1
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2950,7 +2950,7 @@ private void mergeProperties(Map<String, Schema> existingProperties, Map<String,
29502950
newProperties.forEach((key, value) ->
29512951
existingProperties.put(
29522952
key,
2953-
AnnotationsUtils.clone(value, specVersionGreaterThanOrEqualTo310(openAPI))
2953+
ModelUtils.cloneSchema(value, specVersionGreaterThanOrEqualTo310(openAPI))
29542954
));
29552955
if (null != existingType && null != newType && null != newType.getEnum() && !newType.getEnum().isEmpty()) {
29562956
for (Object e : newType.getEnum()) {

modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import com.fasterxml.jackson.databind.JsonNode;
2121
import com.fasterxml.jackson.databind.ObjectMapper;
22+
import io.swagger.v3.core.util.AnnotationsUtils;
2223
import io.swagger.v3.oas.models.OpenAPI;
2324
import io.swagger.v3.oas.models.Operation;
2425
import io.swagger.v3.oas.models.PathItem;
@@ -2068,6 +2069,26 @@ public static boolean isParent(Schema schema) {
20682069
return false;
20692070
}
20702071

2072+
/**
2073+
* Returns a clone of the schema.
2074+
*
2075+
* @param schema the schema.
2076+
* @param specVersionGreaterThanOrEqualTo310 true if spec version is 3.1.0 or later.
2077+
* @return a clone of the schema.
2078+
*/
2079+
public static Schema cloneSchema(Schema schema, boolean specVersionGreaterThanOrEqualTo310) {
2080+
Schema clone = AnnotationsUtils.clone(schema, specVersionGreaterThanOrEqualTo310);
2081+
2082+
// check to see if type is set and clone it if needed
2083+
// in openapi-generator, we also store type in `type` for 3.1 schema
2084+
// to make it backward compatible with the rest of the code base.
2085+
if (schema.getType() != null) {
2086+
clone.setType(schema.getType());
2087+
}
2088+
2089+
return clone;
2090+
}
2091+
20712092
@FunctionalInterface
20722093
private interface OpenAPISchemaVisitor {
20732094

modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-okhttp-gson.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2652,3 +2652,6 @@ components:
26522652
- available
26532653
- pending
26542654
- sold
2655+
PetComposition:
2656+
allOf:
2657+
- $ref: '#/components/schemas/Pet'

samples/client/petstore/java/okhttp-gson/.openapi-generator/FILES

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ docs/OuterEnumIntegerDefaultValue.md
7878
docs/ParentPet.md
7979
docs/Pet.md
8080
docs/PetApi.md
81+
docs/PetComposition.md
8182
docs/PetUsingAllOf.md
8283
docs/PetWithRequiredTags.md
8384
docs/Pig.md
@@ -211,6 +212,7 @@ src/main/java/org/openapitools/client/model/OuterEnumInteger.java
211212
src/main/java/org/openapitools/client/model/OuterEnumIntegerDefaultValue.java
212213
src/main/java/org/openapitools/client/model/ParentPet.java
213214
src/main/java/org/openapitools/client/model/Pet.java
215+
src/main/java/org/openapitools/client/model/PetComposition.java
214216
src/main/java/org/openapitools/client/model/PetUsingAllOf.java
215217
src/main/java/org/openapitools/client/model/PetWithRequiredTags.java
216218
src/main/java/org/openapitools/client/model/Pig.java
@@ -235,3 +237,4 @@ src/main/java/org/openapitools/client/model/Value.java
235237
src/main/java/org/openapitools/client/model/Variable.java
236238
src/main/java/org/openapitools/client/model/Whale.java
237239
src/main/java/org/openapitools/client/model/Zebra.java
240+
src/test/java/org/openapitools/client/model/PetCompositionTest.java

samples/client/petstore/java/okhttp-gson/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ Class | Method | HTTP request | Description
234234
- [OuterEnumIntegerDefaultValue](docs/OuterEnumIntegerDefaultValue.md)
235235
- [ParentPet](docs/ParentPet.md)
236236
- [Pet](docs/Pet.md)
237+
- [PetComposition](docs/PetComposition.md)
237238
- [PetUsingAllOf](docs/PetUsingAllOf.md)
238239
- [PetWithRequiredTags](docs/PetWithRequiredTags.md)
239240
- [Pig](docs/Pig.md)

samples/client/petstore/java/okhttp-gson/api/openapi.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2688,6 +2688,9 @@ components:
26882688
- name
26892689
- photoUrls
26902690
type: object
2691+
PetComposition:
2692+
allOf:
2693+
- $ref: '#/components/schemas/Pet'
26912694
_foo_get_default_response:
26922695
example:
26932696
string:
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
3+
# PetComposition
4+
5+
6+
## Properties
7+
8+
| Name | Type | Description | Notes |
9+
|------------ | ------------- | ------------- | -------------|
10+
|**id** | **Long** | | [optional] |
11+
|**category** | [**Category**](Category.md) | | [optional] |
12+
|**name** | **String** | | |
13+
|**photoUrls** | **List&lt;String&gt;** | | |
14+
|**tags** | [**List&lt;Tag&gt;**](Tag.md) | | [optional] |
15+
|**status** | [**StatusEnum**](#StatusEnum) | pet status in the store | [optional] |
16+
17+
18+
19+
## Enum: StatusEnum
20+
21+
| Name | Value |
22+
|---- | -----|
23+
| AVAILABLE | &quot;available&quot; |
24+
| PENDING | &quot;pending&quot; |
25+
| SOLD | &quot;sold&quot; |
26+
27+
28+

samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri
297297
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.OuterComposite.CustomTypeAdapterFactory());
298298
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ParentPet.CustomTypeAdapterFactory());
299299
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Pet.CustomTypeAdapterFactory());
300+
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.PetComposition.CustomTypeAdapterFactory());
300301
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.PetUsingAllOf.CustomTypeAdapterFactory());
301302
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.PetWithRequiredTags.CustomTypeAdapterFactory());
302303
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Pig.CustomTypeAdapterFactory());

0 commit comments

Comments
 (0)