Skip to content

Commit a04602f

Browse files
committed
refactor: remove oneOfStringEnums handling and simplify oneOf logic in TypeScript code generators
1 parent 8fb543d commit a04602f

5 files changed

Lines changed: 29 additions & 80 deletions

File tree

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -961,19 +961,6 @@ public void setIsEnum(boolean isEnum) {
961961
this.isEnum = isEnum;
962962
}
963963

964-
@SuppressWarnings("unchecked")
965-
public List<String> getAllowableValuesList() {
966-
return Optional.ofNullable(this.getAllowableValues())
967-
.map(allowableValues -> allowableValues.get("values"))
968-
.flatMap(valuesList -> {
969-
try {
970-
return Optional.ofNullable((List<String>)valuesList);
971-
} catch (ClassCastException e) {
972-
return Optional.empty();
973-
}
974-
})
975-
.orElse(Collections.emptyList());
976-
}
977964

978965
@Override
979966
public String toString() {

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,11 +2716,6 @@ protected void updateModelForComposedSchema(CodegenModel m, Schema schema, Map<S
27162716
m.anyOf.add(languageType);
27172717
}
27182718
} else if (composed.getOneOf() != null) {
2719-
if (ModelUtils.isStringSchema(interfaceSchema) && ModelUtils.isEnumSchema(interfaceSchema)) {
2720-
// use string union literals
2721-
languageType = getEnumStringLiteralUnionType(interfaceSchema);
2722-
}
2723-
27242719
if (m.oneOf.contains(languageType)) {
27252720
LOGGER.debug("{} (oneOf schema) already has `{}` defined and therefore it's skipped.", m.name, languageType);
27262721
} else {
@@ -2836,13 +2831,6 @@ protected void updateModelForComposedSchema(CodegenModel m, Schema schema, Map<S
28362831
// end of code block for composed schema
28372832
}
28382833

2839-
@SuppressWarnings("unchecked")
2840-
private static String getEnumStringLiteralUnionType(Schema interfaceSchema) {
2841-
return (String) interfaceSchema.getEnum().stream()
2842-
.map(enumName -> "\"" + (String)enumName + "\"")
2843-
.collect(Collectors.joining(" | "));
2844-
}
2845-
28462834
/**
28472835
* Combines all previously-detected type entries for a schema with newly-discovered ones, to ensure
28482836
* that schema for items like enum include all possible values.

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -796,12 +796,6 @@ private ExtendedCodegenModel processCodeGenModel(ExtendedCodegenModel cm) {
796796
.filter(Objects::nonNull)
797797
.collect(Collectors.toCollection(TreeSet::new));
798798

799-
cm.oneOfStringEnums = oneOfsList.stream()
800-
.filter(CodegenProperty::getIsEnum)
801-
.map(CodegenProperty::getAllowableValuesList)
802-
.flatMap(Collection::stream)
803-
.collect(Collectors.toCollection(TreeSet::new));
804-
805799
cm.oneOfArrays = oneOfsList.stream()
806800
.filter(CodegenProperty::getIsArray)
807801
.map(CodegenProperty::getComplexType)
@@ -1501,8 +1495,6 @@ public class ExtendedCodegenModel extends CodegenModel {
15011495
@Getter @Setter
15021496
public Set<String> oneOfModels = new TreeSet<>();
15031497
@Getter @Setter
1504-
public Set<String> oneOfStringEnums = new TreeSet<>();
1505-
@Getter @Setter
15061498
public Set<String> oneOfArrays = new TreeSet<>();
15071499

15081500
public boolean hasStringOneOf;

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.List;
3333
import java.util.Map;
3434
import java.util.TreeSet;
35-
import java.util.stream.Collectors;
3635

3736
public class TypeScriptReduxQueryClientCodegen extends AbstractTypeScriptClientCodegen {
3837

@@ -146,9 +145,13 @@ public ModelsMap postProcessModels(ModelsMap objs) {
146145
}
147146
if (!cm.oneOf.isEmpty()) {
148147
// For oneOfs only import $refs within the oneOf
149-
cm.imports = cm.imports.stream()
150-
.filter(cm.oneOf::contains)
151-
.collect(Collectors.toCollection(TreeSet::new));
148+
TreeSet<String> oneOfRefs = new TreeSet<>();
149+
for (String im : cm.imports) {
150+
if (cm.oneOf.contains(im)) {
151+
oneOfRefs.add(im);
152+
}
153+
}
154+
cm.imports = oneOfRefs;
152155
}
153156
}
154157

modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,27 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole
3131
}
3232
{{/discriminator}}
3333
{{^discriminator}}
34-
{{#oneOfStringEnums}}
35-
if (json === "{{{.}}}") {
36-
return json;
37-
}
38-
{{/oneOfStringEnums}}
39-
{{#hasStringOneOf}}
40-
if (json instanceof String) {
41-
return json as {{classname}};
42-
}
43-
{{/hasStringOneOf}}
44-
if (!(json instanceof Object)){
45-
return {} as any;
46-
}
47-
{{#hasStringArrayOneOf}}
48-
if (Array.isArray(json) && json.every(item => typeof item === 'string')) {
34+
{{#oneOfModels}}
35+
{{#-first}}
36+
if (typeof json !== 'object') {
4937
return json;
5038
}
51-
{{/hasStringArrayOneOf}}
52-
{{#oneOfModels}}
39+
{{/-first}}
5340
if (instanceOf{{{.}}}(json)) {
5441
return {{{.}}}FromJSONTyped(json, true);
5542
}
5643
{{/oneOfModels}}
5744
{{#oneOfArrays}}
5845
{{#-first}}
59-
if (Array.isArray(json) && json.every(item => typeof item === 'object')) {
46+
if (Array.isArray(json)) {
47+
if (json.every(item => typeof item === 'object')) {
6048
{{/-first}}
61-
if (json.every(item => instanceOf{{{.}}}(item))) {
62-
return json.map(value => {{{.}}}FromJSONTyped(value, true));
63-
}
49+
if (json.every(item => instanceOf{{{.}}}(item))) {
50+
return json.map(value => {{{.}}}FromJSONTyped(value, true));
51+
}
6452
{{#-last}}
53+
}
54+
return json;
6555
}
6656
{{/-last}}
6757
{{/oneOfArrays}}
@@ -88,39 +78,28 @@ export function {{classname}}ToJSONTyped(value?: {{classname}} | null, ignoreDis
8878
return json;
8979
}
9080
{{/discriminator}}
91-
9281
{{^discriminator}}
93-
{{#oneOfStringEnums}}
94-
if (value === "{{{.}}}") {
95-
return value;
96-
}
97-
{{/oneOfStringEnums}}
98-
{{#hasStringOneOf}}
99-
if (value instanceof String) {
100-
return value;
101-
}
102-
{{/hasStringOneOf}}
103-
if (!(value instanceof Object)){
104-
return {};
105-
}
106-
{{#hasStringArrayOneOf}}
107-
if (Array.isArray(value) && value.every(item => typeof item === 'string')) {
82+
{{#oneOfModels}}
83+
{{#-first}}
84+
if (typeof value !== 'object') {
10885
return value;
10986
}
110-
{{/hasStringArrayOneOf}}
111-
{{#oneOfModels}}
87+
{{/-first}}
11288
if (instanceOf{{{.}}}(value)) {
11389
return {{{.}}}ToJSON(value as {{{.}}});
11490
}
11591
{{/oneOfModels}}
11692
{{#oneOfArrays}}
11793
{{#-first}}
118-
if (Array.isArray(value) && value.every(item => typeof item === 'object')) {
94+
if (Array.isArray(value)) {
95+
if (value.every(item => typeof item === 'object')) {
11996
{{/-first}}
120-
if (value.every(item => instanceOf{{{.}}}(item))) {
121-
return value.map(value => {{{.}}}ToJSON(value as {{{.}}}));
122-
}
97+
if (value.every(item => instanceOf{{{.}}}(item))) {
98+
return value.map(value => {{{.}}}ToJSON(value as {{{.}}}));
99+
}
123100
{{#-last}}
101+
}
102+
return value;
124103
}
125104
{{/-last}}
126105
{{/oneOfArrays}}

0 commit comments

Comments
 (0)