Skip to content

Commit 15e9d4e

Browse files
authored
Add example allOf with single ref (#10948)
* Add example allOf with single ref * fix dart-dio-next handling of that case * Refactor without vendor extension * Regenerate newer samples
1 parent b29b5e1 commit 15e9d4e

File tree

130 files changed

+2273
-55
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+2273
-55
lines changed

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

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.collect.Sets;
44
import io.swagger.v3.oas.models.Operation;
55
import io.swagger.v3.oas.models.media.ArraySchema;
6+
import io.swagger.v3.oas.models.media.ComposedSchema;
67
import io.swagger.v3.oas.models.media.Schema;
78
import io.swagger.v3.oas.models.media.StringSchema;
89
import io.swagger.v3.oas.models.servers.Server;
@@ -24,6 +25,8 @@
2425
import java.io.InputStreamReader;
2526
import java.nio.charset.StandardCharsets;
2627
import java.util.*;
28+
import java.util.stream.Collectors;
29+
import java.util.stream.Stream;
2730

2831
import static org.openapitools.codegen.utils.StringUtils.*;
2932

@@ -510,7 +513,7 @@ public ModelsMap postProcessModels(ModelsMap objs) {
510513
@Override
511514
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
512515
super.postProcessModelProperty(model, property);
513-
if (!model.isEnum && property.isEnum) {
516+
if (!model.isEnum && property.isEnum && property.getComposedSchemas() == null) {
514517
// These are inner enums, enums which do not exist as models, just as properties.
515518
// They are handled via the enum_inline template and are generated in the
516519
// same file as the containing class. To prevent name clashes the inline enum classes
@@ -532,6 +535,37 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
532535
}
533536
}
534537

538+
@Override
539+
public CodegenProperty fromProperty(String name, Schema p) {
540+
final CodegenProperty property = super.fromProperty(name, p);
541+
542+
// Handle composed properties
543+
if (ModelUtils.isComposedSchema(p)) {
544+
ComposedSchema composed = (ComposedSchema) p;
545+
546+
// Count the occurrences of allOf/anyOf/oneOf with exactly one child element
547+
long count = Stream.of(composed.getAllOf(), composed.getAnyOf(), composed.getOneOf())
548+
.filter(list -> list != null && list.size() == 1).count();
549+
550+
if (count == 1) {
551+
// Continue only if there is one element that matches
552+
// and basically treat it as simple property.
553+
Stream.of(composed.getAllOf(), composed.getAnyOf(), composed.getOneOf())
554+
.filter(list -> list != null && list.size() == 1)
555+
.findFirst()
556+
.map(list -> list.get(0).get$ref())
557+
.map(ModelUtils::getSimpleRef)
558+
.map(ref -> ModelUtils.getSchemas(this.openAPI).get(ref))
559+
.ifPresent(schema -> {
560+
property.isEnum = schema.getEnum() != null;
561+
property.isModel = true;
562+
});
563+
564+
}
565+
}
566+
return property;
567+
}
568+
535569
@Override
536570
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
537571
final CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers);
@@ -616,13 +650,6 @@ private List<Map<String, String>> prioritizeContentTypes(List<Map<String, String
616650
return prioritizedContentTypes;
617651
}
618652

619-
private static boolean isMultipartType(String mediaType) {
620-
if (mediaType != null) {
621-
return "multipart/form-data".equals(mediaType);
622-
}
623-
return false;
624-
}
625-
626653
@Override
627654
protected void updateEnumVarsWithExtensions(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions, String dataType) {
628655
if (vendorExtensions != null && useEnumExtension && vendorExtensions.containsKey("x-enum-values")) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
231231
property.isNullable = true;
232232
}
233233

234-
if (property.isEnum) {
234+
if (property.isEnum && property.getComposedSchemas() == null) {
235235
// enums are generated with built_value and make use of BuiltSet
236236
model.imports.add("BuiltSet");
237237
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ public ModelsMap postProcessModels(ModelsMap objs) {
305305
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
306306
super.postProcessModelProperty(model, property);
307307
if (SERIALIZATION_LIBRARY_BUILT_VALUE.equals(library)) {
308-
if (property.isEnum) {
308+
if (property.isEnum && property.getComposedSchemas() == null) {
309309
// enums are generated with built_value and make use of BuiltSet
310310
model.imports.add("BuiltSet");
311311
}

modules/openapi-generator/src/main/resources/dart-dio/class.mustache

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,28 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
9797
result.{{{name}}}.replace(serializers.deserialize(value,
9898
specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}});
9999
{{/isContainer}}
100+
{{^isContainer}}
101+
{{#isEnum}}
102+
result.{{{name}}} = serializers.deserialize(value,
103+
specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}};
104+
{{/isEnum}}
105+
{{^isEnum}}
100106
{{#isModel}}
107+
{{#isPrimitiveType}}
108+
{{! These are models that have been manually marked as primitive via generator param. }} result.{{{name}}} = valueDes;
109+
result.{{{name}}} = serializers.deserialize(value,
110+
specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}};
111+
{{/isPrimitiveType}}
112+
{{^isPrimitiveType}}
101113
result.{{{name}}}.replace(serializers.deserialize(value,
102114
specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}});
115+
{{/isPrimitiveType}}
103116
{{/isModel}}
104-
{{^isContainer}}
105117
{{^isModel}}
106118
result.{{{name}}} = serializers.deserialize(value,
107119
specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}};
108120
{{/isModel}}
121+
{{/isEnum}}
109122
{{/isContainer}}
110123
break;
111124
{{/vars}}
@@ -121,6 +134,7 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
121134
enum.mustache template.
122135
}}
123136
{{#vars}}
137+
{{^isModel}}
124138
{{#isEnum}}
125139
{{^isContainer}}
126140

@@ -133,4 +147,5 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
133147
{{/mostInnerItems}}
134148
{{/isContainer}}
135149
{{/isEnum}}
150+
{{/isModel}}
136151
{{/vars}}

modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class.mustache

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,24 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
104104
{{#isContainer}}
105105
result.{{{name}}}.replace(valueDes);
106106
{{/isContainer}}
107+
{{^isContainer}}
108+
{{#isEnum}}
109+
result.{{{name}}} = valueDes;
110+
{{/isEnum}}
111+
{{^isEnum}}
107112
{{#isModel}}
108113
{{#isPrimitiveType}}
109-
{{! These are models that have nee manually marked as primitive via generator param. }}
114+
{{! These are models that have been manually marked as primitive via generator param. }}
110115
result.{{{name}}} = valueDes;
111116
{{/isPrimitiveType}}
112117
{{^isPrimitiveType}}
113118
result.{{{name}}}.replace(valueDes);
114119
{{/isPrimitiveType}}
115120
{{/isModel}}
116-
{{^isContainer}}
117121
{{^isModel}}
118122
result.{{{name}}} = valueDes;
119123
{{/isModel}}
124+
{{/isEnum}}
120125
{{/isContainer}}
121126
break;
122127
{{/vars}}
@@ -132,6 +137,7 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
132137
enum.mustache template.
133138
}}
134139
{{#vars}}
140+
{{^isModel}}
135141
{{#isEnum}}
136142
{{^isContainer}}
137143

@@ -144,4 +150,5 @@ class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
144150
{{/mostInnerItems}}
145151
{{/isContainer}}
146152
{{/isEnum}}
153+
{{/isModel}}
147154
{{/vars}}

modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ class {{{classname}}} {
277277
};
278278
}
279279
{{#vars}}
280+
{{^isModel}}
280281
{{#isEnum}}
281282
{{^isContainer}}
282283

@@ -289,4 +290,5 @@ class {{{classname}}} {
289290
{{/mostInnerItems}}
290291
{{/isContainer}}
291292
{{/isEnum}}
293+
{{/isModel}}
292294
{{/vars}}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,8 +1341,17 @@ components:
13411341
type: integer
13421342
format: int32
13431343
description: User Status
1344+
userType:
1345+
allOf:
1346+
- $ref: '#/components/schemas/UserType'
13441347
xml:
13451348
name: User
1349+
UserType:
1350+
type: string
1351+
title: UserType
1352+
enum:
1353+
- admin
1354+
- user
13461355
Tag:
13471356
type: object
13481357
properties:

samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/FILES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ docs/StoreApi.md
5757
docs/Tag.md
5858
docs/User.md
5959
docs/UserApi.md
60+
docs/UserType.md
6061
git_push.sh
6162
mono_nunit_test.sh
6263
src/Org.OpenAPITools.Test/packages.config
@@ -122,6 +123,7 @@ src/Org.OpenAPITools/Model/Return.cs
122123
src/Org.OpenAPITools/Model/SpecialModelName.cs
123124
src/Org.OpenAPITools/Model/Tag.cs
124125
src/Org.OpenAPITools/Model/User.cs
126+
src/Org.OpenAPITools/Model/UserType.cs
125127
src/Org.OpenAPITools/Org.OpenAPITools.csproj
126128
src/Org.OpenAPITools/Org.OpenAPITools.nuspec
127129
src/Org.OpenAPITools/Properties/AssemblyInfo.cs

samples/client/petstore/csharp/OpenAPIClient/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ Class | Method | HTTP request | Description
196196
- [Model.SpecialModelName](docs/SpecialModelName.md)
197197
- [Model.Tag](docs/Tag.md)
198198
- [Model.User](docs/User.md)
199+
- [Model.UserType](docs/UserType.md)
199200

200201

201202
## Documentation for Authorization

samples/client/petstore/csharp/OpenAPIClient/docs/User.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Name | Type | Description | Notes
1313
**Password** | **string** | | [optional]
1414
**Phone** | **string** | | [optional]
1515
**UserStatus** | **int** | User Status | [optional]
16+
**UserType** | **UserType** | | [optional]
1617

1718
[[Back to Model list]](../README.md#documentation-for-models)
1819
[[Back to API list]](../README.md#documentation-for-api-endpoints)

0 commit comments

Comments
 (0)