@@ -42,17 +42,27 @@ internal fun Generator.handleTopLevelSchema(schemaName: String, schemaObject: Js
42
42
fileBuilder.build().writeTo(targetDirectory)
43
43
}
44
44
45
- internal fun Generator.handleObject (builder : ClassBuilderHolder , objectName : String , schemaObject : JsonObject , recursive : Boolean = true) {
45
+ internal fun Generator.handleObject (
46
+ builder : ClassBuilderHolder ,
47
+ objectName : String ,
48
+ schemaObject : JsonObject ,
49
+ recursive : Boolean = true,
50
+ ) {
46
51
if (" allOf" in schemaObject) {
47
- for (allOfObject in schemaObject[" allOf" ]!! .jsonArray.map { it.jsonObject }) {
48
- if (ref in allOfObject) {
49
- val refObjectName = allOfObject[ref]!! .jsonPrimitive.content.withoutSchemaPrefix()
50
- if (refObjectName !in builder.handledSuperTypes) {
51
- handleObject(builder, refObjectName, schemaObjects[refObjectName]!! , recursive = false )
52
- builder.handledSuperTypes + = refObjectName
53
- }
54
- } else {
55
- handleObject(builder, objectName, allOfObject, recursive)
52
+ val objects = mutableListOf<JsonObject >()
53
+ val references = mutableListOf<JsonObject >()
54
+
55
+ schemaObject[" allOf" ]!! .jsonArray.map { it.jsonObject }.forEach { allOfObject ->
56
+ (if (ref in allOfObject) references else objects) + = allOfObject
57
+ }
58
+
59
+ objects.forEach { allOfObject ->
60
+ handleObject(builder, objectName, allOfObject, recursive)
61
+ }
62
+ references.forEach { refObject ->
63
+ val refObjectName = refObject[ref]!! .jsonPrimitive.content.withoutSchemaPrefix()
64
+ if (builder.handledSuperTypes.add(refObjectName)) {
65
+ handleObject(builder, refObjectName, schemaObjects[refObjectName]!! , recursive = false )
56
66
}
57
67
}
58
68
return
@@ -135,14 +145,13 @@ internal fun Generator.handleObject(builder: ClassBuilderHolder, objectName: Str
135
145
error(" Unknown type '$propTypeName ' defined for '$propName ' in object '$objectName '. Full property: $typeObject " )
136
146
}
137
147
138
- val requiredProps = schemaObject[" required" ]?.jsonArray
139
- ?.map { it.jsonPrimitive.content } ? : emptyList()
148
+ builder.requiredProps + = (schemaObject[" required" ]?.jsonArray?.map { it.jsonPrimitive.content }.orEmpty())
140
149
141
150
val propObjects = schemaObject[" properties" ]?.jsonObject?.mapValues { it.value.jsonObject }
142
151
propObjects?.forEach { (propName, propObject) ->
143
152
144
153
val propType = typeFrom(propObject, propName)
145
- .copy(nullable = propName !in requiredProps || propObject[" nullable" ]?.jsonPrimitive?.boolean == true )
154
+ .copy(nullable = propName !in builder. requiredProps || propObject[" nullable" ]?.jsonPrimitive?.boolean == true )
146
155
147
156
val camelCasePropName = propName.toCamelCase()
148
157
@@ -155,7 +164,7 @@ internal fun Generator.handleObject(builder: ClassBuilderHolder, objectName: Str
155
164
.addMember(" \" $propName \" " )
156
165
.build()
157
166
)
158
- if (propName !in requiredProps)
167
+ if (propName !in builder. requiredProps)
159
168
defaultValue(" null" )
160
169
}
161
170
.build()
0 commit comments