mitigated a bug (#13786)

This commit is contained in:
devhl-labs 2022-11-19 23:28:29 -05:00 committed by GitHub
parent 9039c83bc4
commit 8e98bff934
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -468,12 +468,15 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
@Override
public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs) {
final Map<String, ModelsMap> processed = super.postProcessAllModels(objs);
// TODO: move the logic of these three methods into patchProperty so all CodegenProperty instances get the same treatment
postProcessEnumRefs(processed);
updateValueTypeProperty(processed);
updateNullableTypeProperty(processed);
for (Map.Entry<String, ModelsMap> entry : objs.entrySet()) {
CodegenModel model = ModelUtils.getModelByName(entry.getKey(), objs);
removeCircularReferencesInComposedSchemas(model);
// https://github.com/OpenAPITools/openapi-generator/issues/12324
// TODO: why do these collections contain different instances?
@ -534,6 +537,31 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
}
}
/** Mitigates https://github.com/OpenAPITools/openapi-generator/issues/13709 */
private void removeCircularReferencesInComposedSchemas(CodegenModel cm) {
cm.anyOf.removeIf(anyOf -> anyOf.equals(cm.classname));
cm.oneOf.removeIf(oneOf -> oneOf.equals(cm.classname));
cm.allOf.removeIf(allOf -> allOf.equals(cm.classname));
CodegenComposedSchemas composedSchemas = cm.getComposedSchemas();
if (composedSchemas != null){
List<CodegenProperty> anyOf = composedSchemas.getAnyOf();
if (anyOf != null) {
anyOf.removeIf(p -> p.dataType.equals(cm.classname));
}
List<CodegenProperty> oneOf = composedSchemas.getOneOf();
if (oneOf != null){
oneOf.removeIf(p -> p.dataType.equals(cm.classname));
}
List<CodegenProperty> allOf = composedSchemas.getAllOf();
if (allOf != null){
allOf.removeIf(p -> p.dataType.equals(cm.classname));
}
}
}
@Override
protected List<Map<String, Object>> buildEnumVars(List<Object> values, String dataType) {
List<Map<String, Object>> enumVars = super.buildEnumVars(values, dataType);