Skip to content

Commit 107b07d

Browse files
refactor: add utility methods for allOf, oneOf and anyOf CodegenModel checks (#24608)
1 parent 558f593 commit 107b07d

15 files changed

Lines changed: 116 additions & 48 deletions

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.util.regex.Matcher;
3333

3434
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
35+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
36+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
3537
import static org.openapitools.codegen.utils.StringUtils.camelize;
3638
import static org.openapitools.codegen.utils.StringUtils.underscore;
3739

@@ -866,13 +868,13 @@ public ModelsMap postProcessModels(ModelsMap objs) {
866868
}
867869

868870
// if oneOf contains "null" type
869-
if (model.oneOf != null && !model.oneOf.isEmpty() && model.oneOf.contains("nil")) {
871+
if (hasOneOf(model) && model.oneOf.contains("nil")) {
870872
model.isNullable = true;
871873
model.oneOf.remove("nil");
872874
}
873875

874876
// if anyOf contains "null" type
875-
if (model.anyOf != null && !model.anyOf.isEmpty() && model.anyOf.contains("nil")) {
877+
if (hasAnyOf(model) && model.anyOf.contains("nil")) {
876878
model.isNullable = true;
877879
model.anyOf.remove("nil");
878880
}

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
import static org.openapitools.codegen.CodegenConstants.*;
4848
import static org.openapitools.codegen.utils.EnumUtils.getEnumVars;
49+
import static org.openapitools.codegen.utils.ModelUtils.*;
4950
import static org.openapitools.codegen.utils.StringUtils.*;
5051

5152

@@ -1059,15 +1060,15 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
10591060
}
10601061

10611062
List<CodegenProperty> codegenProperties = null;
1062-
if (!model.oneOf.isEmpty()) { // oneOfValidationError
1063+
if (hasOneOf(model)) {
10631064
codegenProperties = model.getComposedSchemas().getOneOf();
10641065
moduleImports.add("typing", "Any");
10651066
moduleImports.add("typing", "List");
10661067
moduleImports.add(PYDANTIC, "Field");
10671068
moduleImports.add(PYDANTIC, "StrictStr");
10681069
moduleImports.add(PYDANTIC, "ValidationError");
10691070
moduleImports.add(PYDANTIC, "field_validator");
1070-
} else if (!model.anyOf.isEmpty()) { // anyOF
1071+
} else if (hasAnyOf(model)) {
10711072
codegenProperties = model.getComposedSchemas().getAnyOf();
10721073
moduleImports.add(PYDANTIC, "Field");
10731074
moduleImports.add(PYDANTIC, "StrictStr");
@@ -1083,7 +1084,7 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
10831084
}
10841085
}
10851086

1086-
if (!model.allOf.isEmpty()) { // allOf
1087+
if (hasAllOf(model)) {
10871088
for (CodegenProperty cp : model.allVars) {
10881089
if (!cp.isPrimitiveType || cp.isModel) {
10891090
if (cp.isArray || cp.isMap) { // if array or map
@@ -1121,9 +1122,9 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
11211122
cp.vendorExtensions.put(X_PY_TYPING, typing);
11221123

11231124
// setup x-py-name for each oneOf/anyOf schema
1124-
if (!model.oneOf.isEmpty()) { // oneOf
1125+
if (hasOneOf(model)) {
11251126
cp.vendorExtensions.put(X_PY_NAME, String.format(Locale.ROOT, "oneof_schema_%d_validator", property_count++));
1126-
} else if (!model.anyOf.isEmpty()) { // anyOf
1127+
} else if (hasAnyOf(model)) {
11271128
cp.vendorExtensions.put(X_PY_NAME, String.format(Locale.ROOT, "anyof_schema_%d_validator", property_count++));
11281129
}
11291130
}
@@ -1301,9 +1302,9 @@ void createImportMapOfSet(String modelName, Map<String, CodegenModel> codegenMod
13011302
}
13021303

13031304
List<CodegenProperty> codegenProperties = null;
1304-
if (cm.oneOf != null && !cm.oneOf.isEmpty()) { // oneOf
1305+
if (hasOneOf(cm)) {
13051306
codegenProperties = cm.getComposedSchemas().getOneOf();
1306-
} else if (cm.anyOf != null && !cm.anyOf.isEmpty()) { // anyOF
1307+
} else if (hasAnyOf(cm)) {
13071308
codegenProperties = cm.getComposedSchemas().getAnyOf();
13081309
} else { // typical model
13091310
codegenProperties = cm.vars;
@@ -1352,9 +1353,9 @@ public void updateImportsFromCodegenModel(String modelName, CodegenModel cm, Set
13521353
}
13531354

13541355
List<CodegenProperty> codegenProperties = null;
1355-
if (cm.oneOf != null && !cm.oneOf.isEmpty()) { // oneOfValidationError
1356+
if (hasOneOf(cm)) {
13561357
codegenProperties = cm.getComposedSchemas().getOneOf();
1357-
} else if (cm.anyOf != null && !cm.anyOf.isEmpty()) { // anyOF
1358+
} else if (hasAnyOf(cm)) {
13581359
codegenProperties = cm.getComposedSchemas().getAnyOf();
13591360
} else { // typical model
13601361
codegenProperties = cm.vars;

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.stream.Collectors;
4343

4444
import static org.openapitools.codegen.CodegenConstants.*;
45+
import static org.openapitools.codegen.utils.ModelUtils.*;
4546
import static org.openapitools.codegen.utils.StringUtils.*;
4647

4748
public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen implements CodegenConfig {
@@ -850,15 +851,15 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
850851
}
851852

852853
List<CodegenProperty> codegenProperties = null;
853-
if (!model.oneOf.isEmpty()) { // oneOfValidationError
854+
if (hasOneOf(model)) {
854855
codegenProperties = model.getComposedSchemas().getOneOf();
855856
typingImports.add("Any");
856857
typingImports.add("List");
857858
pydanticImports.add("Field");
858859
pydanticImports.add("StrictStr");
859860
pydanticImports.add("ValidationError");
860861
pydanticImports.add("validator");
861-
} else if (!model.anyOf.isEmpty()) { // anyOF
862+
} else if (hasAnyOf(model)) {
862863
codegenProperties = model.getComposedSchemas().getAnyOf();
863864
pydanticImports.add("Field");
864865
pydanticImports.add("StrictStr");
@@ -873,7 +874,7 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
873874
}
874875
}
875876

876-
if (!model.allOf.isEmpty()) { // allOf
877+
if (hasAllOf(model)) {
877878
for (CodegenProperty cp : model.allVars) {
878879
if (!cp.isPrimitiveType || cp.isModel) {
879880
if (cp.isArray || cp.isMap) { // if array or map
@@ -961,9 +962,9 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
961962
cp.vendorExtensions.put(X_PY_TYPING, typing + " = " + fieldCustomization);
962963

963964
// setup x-py-name for each oneOf/anyOf schema
964-
if (!model.oneOf.isEmpty()) { // oneOf
965+
if (hasOneOf(model)) {
965966
cp.vendorExtensions.put(X_PY_NAME, String.format(Locale.ROOT, "oneof_schema_%d_validator", property_count++));
966-
} else if (!model.anyOf.isEmpty()) { // anyOf
967+
} else if (hasAnyOf(model)) {
967968
cp.vendorExtensions.put(X_PY_NAME, String.format(Locale.ROOT, "anyof_schema_%d_validator", property_count++));
968969
}
969970
}
@@ -1663,9 +1664,9 @@ void createImportMapOfSet(String modelName, Map<String, CodegenModel> codegenMod
16631664
}
16641665

16651666
List<CodegenProperty> codegenProperties = null;
1666-
if (cm.oneOf != null && !cm.oneOf.isEmpty()) { // oneOf
1667+
if (hasOneOf(cm)) {
16671668
codegenProperties = cm.getComposedSchemas().getOneOf();
1668-
} else if (cm.anyOf != null && !cm.anyOf.isEmpty()) { // anyOF
1669+
} else if (hasAnyOf(cm)) {
16691670
codegenProperties = cm.getComposedSchemas().getAnyOf();
16701671
} else { // typical model
16711672
codegenProperties = cm.vars;
@@ -1714,9 +1715,9 @@ public void updateImportsFromCodegenModel(String modelName, CodegenModel cm, Set
17141715
}
17151716

17161717
List<CodegenProperty> codegenProperties = null;
1717-
if (cm.oneOf != null && !cm.oneOf.isEmpty()) { // oneOfValidationError
1718+
if (hasOneOf(cm)) {
17181719
codegenProperties = cm.getComposedSchemas().getOneOf();
1719-
} else if (cm.anyOf != null && !cm.anyOf.isEmpty()) { // anyOF
1720+
} else if (hasAnyOf(cm)) {
17201721
codegenProperties = cm.getComposedSchemas().getAnyOf();
17211722
} else { // typical model
17221723
codegenProperties = cm.vars;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.*;
1616
import java.util.function.Function;
1717

18+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
19+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
1820
import static org.openapitools.codegen.utils.StringUtils.*;
1921

2022
public abstract class AbstractRustCodegen extends DefaultCodegen implements CodegenConfig {
@@ -292,7 +294,7 @@ public CodegenModel fromModel(String name, Schema model) {
292294
} else {
293295
mdl.arrayModelType = toModelName(mdl.arrayModelType);
294296
}
295-
} else if ((!mdl.anyOf.isEmpty()) || (!mdl.oneOf.isEmpty())) {
297+
} else if ((hasAnyOf(mdl)) || (hasOneOf(mdl))) {
296298
mdl.dataType = getSchemaType(model);
297299
}
298300

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import static org.apache.commons.lang3.StringUtils.isEmpty;
4242
import static org.openapitools.codegen.CodegenConstants.X_CSHARP_VALUE_TYPE;
4343
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
44+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
45+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
4446
import static org.openapitools.codegen.utils.StringUtils.camelize;
4547
import static org.openapitools.codegen.utils.StringUtils.underscore;
4648

@@ -1688,12 +1690,12 @@ public ModelsMap postProcessModels(ModelsMap objs) {
16881690
for (ModelMap mo : objs.getModels()) {
16891691
CodegenModel cm = mo.getModel();
16901692

1691-
if (cm.oneOf != null && !cm.oneOf.isEmpty() && cm.oneOf.remove("Null")) {
1693+
if (hasOneOf(cm) && cm.oneOf.remove("Null")) {
16921694
// if oneOf contains "null" type
16931695
cm.isNullable = true;
16941696
}
16951697

1696-
if (cm.anyOf != null && !cm.anyOf.isEmpty() && cm.anyOf.remove("Null")) {
1698+
if (hasAnyOf(cm) && cm.anyOf.remove("Null")) {
16971699
// if anyOf contains "null" type
16981700
cm.isNullable = true;
16991701
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import static org.apache.commons.lang3.StringUtils.isEmpty;
4040
import static org.openapitools.codegen.CodegenConstants.X_CSHARP_VALUE_TYPE;
4141
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
42+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
43+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
4244
import static org.openapitools.codegen.utils.StringUtils.camelize;
4345
import static org.openapitools.codegen.utils.StringUtils.underscore;
4446

@@ -1081,13 +1083,13 @@ public ModelsMap postProcessModels(ModelsMap objs) {
10811083
for (ModelMap mo : objs.getModels()) {
10821084
CodegenModel cm = mo.getModel();
10831085

1084-
if (cm.oneOf != null && !cm.oneOf.isEmpty() && cm.oneOf.contains("ModelNull")) {
1086+
if (hasOneOf(cm) && cm.oneOf.contains("ModelNull")) {
10851087
// if oneOf contains "null" type
10861088
cm.isNullable = true;
10871089
cm.oneOf.remove("ModelNull");
10881090
}
10891091

1090-
if (cm.anyOf != null && !cm.anyOf.isEmpty() && cm.anyOf.contains("ModelNull")) {
1092+
if (hasAnyOf(cm) && cm.anyOf.contains("ModelNull")) {
10911093
// if anyOf contains "null" type
10921094
cm.isNullable = true;
10931095
cm.anyOf.remove("ModelNull");

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
4545
import static org.openapitools.codegen.utils.EnumUtils.getEnumValues;
4646
import static org.openapitools.codegen.utils.EnumUtils.getEnumVars;
47+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
48+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
4749
import static org.openapitools.codegen.utils.StringUtils.camelize;
4850

4951
/**
@@ -543,7 +545,7 @@ public ModelsMap postProcessModels(ModelsMap objs) {
543545
boolean addedFmtImport = false;
544546

545547
// oneOf
546-
if (model.oneOf != null && !model.oneOf.isEmpty()) {
548+
if (hasOneOf(model)) {
547549
imports.add(createMapping("import", "fmt"));
548550
addedFmtImport = true;
549551

@@ -554,7 +556,7 @@ public ModelsMap postProcessModels(ModelsMap objs) {
554556
}
555557

556558
// anyOf
557-
if (model.anyOf != null && !model.anyOf.isEmpty()) {
559+
if (hasAnyOf(model)) {
558560
imports.add(createMapping("import", "fmt"));
559561
addedFmtImport = true;
560562
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
import static java.util.Collections.sort;
5151
import static org.openapitools.codegen.CodegenConstants.*;
5252
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
53+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
54+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
5355
import static org.openapitools.codegen.utils.StringUtils.camelize;
5456

5557
/**
@@ -1269,13 +1271,13 @@ public ModelsMap postProcessModels(ModelsMap objs) {
12691271

12701272
cm.getVendorExtensions().putIfAbsent(X_IMPLEMENTS, new ArrayList<String>());
12711273
if (isLibrary(JERSEY2) || isLibrary(JERSEY3) || isLibrary(NATIVE) || isLibrary(OKHTTP_GSON)) {
1272-
if (cm.oneOf != null && !cm.oneOf.isEmpty() && cm.oneOf.contains("ModelNull")) {
1274+
if (hasOneOf(cm) && cm.oneOf.contains("ModelNull")) {
12731275
// if oneOf contains "null" type
12741276
cm.isNullable = true;
12751277
cm.oneOf.remove("ModelNull");
12761278
}
12771279

1278-
if (cm.anyOf != null && !cm.anyOf.isEmpty() && cm.anyOf.contains("ModelNull")) {
1280+
if (hasAnyOf(cm) && cm.anyOf.contains("ModelNull")) {
12791281
// if anyOf contains "null" type
12801282
cm.isNullable = true;
12811283
cm.anyOf.remove("ModelNull");

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
import static org.openapitools.codegen.languages.KotlinServerCodegen.Constants.USE_TAGS;
5959
import static org.openapitools.codegen.utils.EnumUtils.getEnumValues;
6060
import static org.openapitools.codegen.utils.EnumUtils.hasEnumValues;
61+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
62+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
6163

6264
/**
6365
* <p>Mustache templates are located in
@@ -522,8 +524,7 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
522524
// For allOf pattern: if parent has properties, mark child's inherited properties
523525
// Skip this for oneOf/anyOf patterns where parent properties are merged from children
524526
boolean parentIsOneOfOrAnyOf = parentModel != null
525-
&& ((parentModel.oneOf != null && !parentModel.oneOf.isEmpty())
526-
|| (parentModel.anyOf != null && !parentModel.anyOf.isEmpty()));
527+
&& (hasOneOf(parentModel) || (hasAnyOf(parentModel)));
527528

528529
if (parentModel != null && parentModel.getHasVars() && !parentIsOneOfOrAnyOf) {
529530
Set<String> parentPropNames = new HashSet<>();
@@ -572,8 +573,7 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
572573
CodegenModel owner = allModelsMap.get(ownerName);
573574
if (owner != null && owner.getDiscriminator() != null) {
574575
String discriminatorPropBaseName = owner.getDiscriminator().getPropertyBaseName();
575-
boolean isOneOfOrAnyOfPattern = (owner.oneOf != null && !owner.oneOf.isEmpty())
576-
|| (owner.anyOf != null && !owner.anyOf.isEmpty());
576+
boolean isOneOfOrAnyOfPattern = hasOneOf(owner) || hasAnyOf(owner);
577577

578578
// hasParentProperties controls whether the sealed class has properties in its constructor
579579
// This should be false for oneOf/anyOf patterns (parent is a type union, no direct properties)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import static org.apache.commons.lang3.StringUtils.capitalize;
4444
import static org.openapitools.codegen.CodegenConstants.ENUM_NAME;
4545
import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES;
46+
import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf;
47+
import static org.openapitools.codegen.utils.ModelUtils.hasOneOf;
4648
import static org.openapitools.codegen.utils.StringUtils.escape;
4749
import static org.openapitools.codegen.utils.StringUtils.underscore;
4850

@@ -221,11 +223,11 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> supero
221223
enrichPropertiesWithEnumDefaultValues(cm.getParentVars());
222224
}
223225

224-
if (!cm.oneOf.isEmpty()) {
226+
if (hasOneOf(cm)) {
225227
// Add a boolean if it is a `oneOf`, because Mustache does not let us check if a list is non-empty
226228
cm.getVendorExtensions().put("x-ocaml-isOneOf", true);
227229
}
228-
if (!cm.anyOf.isEmpty()) {
230+
if (hasAnyOf(cm)) {
229231
// Add a boolean if it is a `anyOf`, because Mustache does not let us check if a list is non-empty
230232
cm.getVendorExtensions().put("x-ocaml-isAnyOf", true);
231233
}

0 commit comments

Comments
 (0)