Skip to content

Commit d3269ac

Browse files
committed
Use default normalizeSchema() method and add a new skipNormalization method
1 parent 251acd9 commit d3269ac

2 files changed

Lines changed: 34 additions & 28 deletions

File tree

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

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -716,32 +716,9 @@ protected boolean isSelfReference(String name, Schema subSchema) {
716716
* @return Schema
717717
*/
718718
public Schema normalizeSchema(Schema schema, Set<Schema> visitedSchemas) {
719-
if (schema == null) {
720-
return schema;
721-
}
722-
723-
if (StringUtils.isNotEmpty(schema.get$ref())) {
724-
// no need to process $ref
719+
if (skipNormalization(schema, visitedSchemas)) {
725720
return schema;
726721
}
727-
728-
if (visitedSchemas.contains(schema)) {
729-
return schema; // skip due to circular reference
730-
} else {
731-
visitedSchemas.add(schema);
732-
}
733-
734-
return doNormalizeSchema(schema, visitedSchemas);
735-
}
736-
737-
/**
738-
* Normalizes a schema that was not visited before
739-
*
740-
* @param schema Schema
741-
* @param visitedSchemas a set of visited schemas
742-
* @return Schema
743-
*/
744-
protected Schema doNormalizeSchema(Schema schema, Set<Schema> visitedSchemas) {
745722
if (ModelUtils.isArraySchema(schema)) { // array
746723
Schema result = normalizeArraySchema(schema);
747724
normalizeSchema(result.getItems(), visitedSchemas);
@@ -794,10 +771,36 @@ protected Schema doNormalizeSchema(Schema schema, Set<Schema> visitedSchemas) {
794771
} else {
795772
throw new RuntimeException("Unknown schema type found in normalizer: " + schema);
796773
}
797-
798774
return schema;
799775
}
800776

777+
/**
778+
* Check if normalization is needed.
779+
*
780+
* No normalization needed if the schema is null or is a $ref or already processed.
781+
*
782+
* @param schema Schema
783+
* @param visitedSchemas a set of visited schemas
784+
* @return false if normalization is needed
785+
*/
786+
protected boolean skipNormalization(Schema schema, Set<Schema> visitedSchemas) {
787+
if (schema == null) {
788+
return true;
789+
}
790+
791+
if (StringUtils.isNotEmpty(schema.get$ref())) {
792+
// no need to process $ref
793+
return true;
794+
}
795+
796+
if (visitedSchemas.contains(schema)) {
797+
return true; // skip due to circular reference
798+
} else {
799+
visitedSchemas.add(schema);
800+
return false;
801+
}
802+
}
803+
801804
protected Schema normalizeArraySchema(Schema schema) {
802805
Schema result = processNormalize31Spec(schema, new HashSet<>());
803806
return processSetArraytoNullable(result);

modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -975,16 +975,19 @@ public void testNormalizerClass() {
975975
assertEquals(requiredProperties.getRequired(), null);
976976
}
977977

978-
static class RemoveRequiredNormalizer extends OpenAPINormalizer {
978+
public static class RemoveRequiredNormalizer extends OpenAPINormalizer {
979979

980980
public RemoveRequiredNormalizer(OpenAPI openAPI, Map<String, String> inputRules) {
981981
super(openAPI, inputRules);
982982
}
983983

984984
@Override
985-
protected Schema doNormalizeSchema(Schema schema, Set<Schema> visitedSchemas) {
985+
public Schema normalizeSchema(Schema schema, Set<Schema> visitedSchemas) {
986+
if (skipNormalization(schema, visitedSchemas)) {
987+
return schema;
988+
}
986989
schema.setRequired(null);
987-
return super.doNormalizeSchema(schema, visitedSchemas);
990+
return normalizeSchema(schema, visitedSchemas);
988991
}
989992
}
990993
}

0 commit comments

Comments
 (0)