Skip to content

Commit 6ae2934

Browse files
committed
make getRequiredSettings public so it can be used in sibling projects
1 parent 1ef3deb commit 6ae2934

File tree

1 file changed

+54
-50
lines changed

1 file changed

+54
-50
lines changed

src/main/scala/com/github/swagger/scala/converter/SwaggerScalaModelConverter.scala

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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

88139
class 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

Comments
 (0)