@@ -83,6 +83,57 @@ object SwaggerScalaModelConverter {
8383 * @since v2.7.6
8484 */
8585 def isRequiredBasedOnDefaultValue : Boolean = requiredBasedOnDefaultValue
86+
87+ /**
88+ * @param annotatedType
89+ * @return collection flags based on any Swagger annotations for this type
90+ */
91+ def getRequiredSettings (annotatedType : AnnotatedType ): Seq [Boolean ] = annotatedType match {
92+ case _ : AnnotatedTypeForOption => Seq .empty
93+ case _ => getRequiredSettings(nullSafeSeq(annotatedType.getCtxAnnotations))
94+ }
95+
96+ private def getRequiredSettings (annotations : Seq [Annotation ]): Seq [Boolean ] = {
97+ val flags = annotations.collect {
98+ case p : Parameter => if (p.required()) RequiredMode .REQUIRED else RequiredMode .NOT_REQUIRED
99+ case s : SchemaAnnotation => {
100+ if (s.requiredMode() == RequiredMode .AUTO ) {
101+ if (s.required()) {
102+ RequiredMode .REQUIRED
103+ } else if (isRequiredBasedOnAnnotation) {
104+ RequiredMode .NOT_REQUIRED
105+ } else {
106+ RequiredMode .AUTO
107+ }
108+ } else {
109+ s.requiredMode()
110+ }
111+ }
112+ case a : ArraySchema => {
113+ if (a.arraySchema().requiredMode() == RequiredMode .AUTO ) {
114+ if (a.arraySchema().required()) {
115+ RequiredMode .REQUIRED
116+ } else if (isRequiredBasedOnAnnotation) {
117+ RequiredMode .NOT_REQUIRED
118+ } else {
119+ RequiredMode .AUTO
120+ }
121+ } else {
122+ a.arraySchema().requiredMode()
123+ }
124+ }
125+ }
126+ flags.flatMap {
127+ case RequiredMode .REQUIRED => Some (true )
128+ case RequiredMode .NOT_REQUIRED => Some (false )
129+ case _ => None
130+ }
131+ }
132+
133+ private def nullSafeSeq [T ](array : Array [T ]): Seq [T ] = Option (array) match {
134+ case None => Seq .empty[T ]
135+ case Some (arr) => arr.toList
136+ }
86137}
87138
88139class SwaggerScalaModelConverter extends ModelResolver (SwaggerScalaModelConverter .objectMapper) {
@@ -128,7 +179,7 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
128179 val cls = javaType.getRawClass
129180 matchScalaPrimitives(`type`, cls).getOrElse {
130181 // Unbox scala options
131- val annotatedOverrides = getRequiredSettings(`type`)
182+ val annotatedOverrides = SwaggerScalaModelConverter . getRequiredSettings(`type`)
132183 if (_isOptional(`type`, cls)) {
133184 val baseType =
134185 if (annotatedOverrides.headOption.getOrElse(false )) new AnnotatedType ()
@@ -234,7 +285,7 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
234285 }
235286 }
236287 case annotations => {
237- val annotationRequired = getRequiredSettings(annotations).headOption
288+ val annotationRequired = SwaggerScalaModelConverter . getRequiredSettings(annotations).headOption
238289 setRequiredBasedOnType(schema, propertyName, isOptional, hasDefaultValue, annotationRequired)
239290 }
240291 }
@@ -313,48 +364,6 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
313364 }
314365 }
315366
316- private def getRequiredSettings (annotatedType : AnnotatedType ): Seq [Boolean ] = annotatedType match {
317- case _ : AnnotatedTypeForOption => Seq .empty
318- case _ => getRequiredSettings(nullSafeSeq(annotatedType.getCtxAnnotations))
319- }
320-
321- private def getRequiredSettings (annotations : Seq [Annotation ]): Seq [Boolean ] = {
322- val flags = annotations.collect {
323- case p : Parameter => if (p.required()) RequiredMode .REQUIRED else RequiredMode .NOT_REQUIRED
324- case s : SchemaAnnotation => {
325- if (s.requiredMode() == RequiredMode .AUTO ) {
326- if (s.required()) {
327- RequiredMode .REQUIRED
328- } else if (SwaggerScalaModelConverter .isRequiredBasedOnAnnotation) {
329- RequiredMode .NOT_REQUIRED
330- } else {
331- RequiredMode .AUTO
332- }
333- } else {
334- s.requiredMode()
335- }
336- }
337- case a : ArraySchema => {
338- if (a.arraySchema().requiredMode() == RequiredMode .AUTO ) {
339- if (a.arraySchema().required()) {
340- RequiredMode .REQUIRED
341- } else if (SwaggerScalaModelConverter .isRequiredBasedOnAnnotation) {
342- RequiredMode .NOT_REQUIRED
343- } else {
344- RequiredMode .AUTO
345- }
346- } else {
347- a.arraySchema().requiredMode()
348- }
349- }
350- }
351- flags.flatMap {
352- case RequiredMode .REQUIRED => Some (true )
353- case RequiredMode .NOT_REQUIRED => Some (false )
354- case _ => None
355- }
356- }
357-
358367 private def hasTypeOverride (ann : SchemaAnnotation ): Boolean = {
359368 ! (ann.implementation() == VoidClass && ann.`type`() == " " )
360369 }
@@ -456,7 +465,7 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
456465 private def setRequired (annotatedType : AnnotatedType ): Unit = annotatedType match {
457466 case _ : AnnotatedTypeForOption => // not required
458467 case _ => {
459- val reqSettings = getRequiredSettings(annotatedType)
468+ val reqSettings = SwaggerScalaModelConverter . getRequiredSettings(annotatedType)
460469 val required = reqSettings.headOption.getOrElse(true )
461470 if (required) {
462471 Option (annotatedType.getParent).foreach { parent =>
@@ -536,11 +545,6 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
536545 classW.extendsScalaClass(true ) || (! cls.getName.startsWith(" scala." ) && classW.hasSignature)
537546 }
538547
539- private def nullSafeSeq [T ](array : Array [T ]): Seq [T ] = Option (array) match {
540- case None => Seq .empty[T ]
541- case Some (arr) => arr.toList
542- }
543-
544548 private def nullSafeMap [K , V ](map : java.util.Map [K , V ]): Map [K , V ] = Option (map) match {
545549 case None => Map .empty[K , V ]
546550 case Some (m) => m.asScala.toMap
0 commit comments