Skip to content

Commit b41fbee

Browse files
authored
check ArraySchema annotation (#312)
* check ArraySchema annotation * scala 2.12 compile issue * Update SwaggerScalaModelConverter.scala * Update ModelPropertyParserTest.scala
1 parent 81cbf19 commit b41fbee

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

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

+17-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.{JavaType, ObjectMapper}
55
import com.fasterxml.jackson.module.scala.introspect.{BeanIntrospector, PropertyDescriptor}
66
import com.fasterxml.jackson.module.scala.util.ClassW
77
import com.fasterxml.jackson.module.scala.{DefaultScalaModule, JsonScalaEnumeration}
8+
import com.github.swagger.scala.converter.SwaggerScalaModelConverter.nullSafeSeq
89
import io.swagger.v3.core.converter._
910
import io.swagger.v3.core.jackson.ModelResolver
1011
import io.swagger.v3.core.util.{Json, PrimitiveType}
@@ -233,6 +234,20 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
233234
val classOption: Option[Class[_]] = if (s.implementation() == VoidClass) None else Option(s.implementation())
234235
classOption
235236
}
237+
val arraySchemaOverrideClass = if (schemaOverride.nonEmpty) {
238+
None
239+
} else {
240+
val arraySchemaOverride = propertyAnnotations.collectFirst { case as: ArraySchemaAnnotation => as }
241+
arraySchemaOverride.flatMap { as =>
242+
val itemSchema = if (as.items() == null || as.items().implementation() == VoidClass) as.schema() else as.items()
243+
val classOption: Option[Class[_]] = if (itemSchema == null || itemSchema.implementation() == VoidClass) {
244+
None
245+
} else {
246+
Option(itemSchema.implementation())
247+
}
248+
classOption
249+
}
250+
}
236251
val maybeDefault = property.param.flatMap(_.defaultValue)
237252
val schemaDefaultValue = schemaOverride.flatMap { s =>
238253
Option(s.defaultValue()).flatMap(str => if (str.isEmpty) None else Some(str))
@@ -260,7 +275,8 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
260275
}
261276
}
262277

263-
if (schemaProperties.nonEmpty && schemaOverrideClass.isEmpty) {
278+
val overrideClass = schemaOverrideClass.orElse(arraySchemaOverrideClass)
279+
if (schemaProperties.nonEmpty && overrideClass.isEmpty) {
264280
erasedProperties.get(propertyName).foreach { erasedType =>
265281
schemaProperties.get(propertyName).foreach { property =>
266282
Option(PrimitiveType.fromType(erasedType)).foreach { primitiveType =>

src/test/scala/com/github/swagger/scala/converter/ModelPropertyParserTest.scala

+2-3
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with M
182182
val arraySchema = numbers.asInstanceOf[ArraySchema]
183183
arraySchema.getMinItems shouldEqual 2
184184
arraySchema.getMaxItems shouldEqual 10
185-
// TODO - this should be an IntegerSchema but the @ArraySchema annotation items schema is not being picked up
185+
// assertion disabled due to https://github.com/swagger-api/swagger-core/issues/4610
186186
// arraySchema.getItems shouldBe an[IntegerSchema]
187187
}
188188

@@ -193,8 +193,7 @@ class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with M
193193
val arraySchema = numbers.asInstanceOf[ArraySchema]
194194
arraySchema.getMinItems shouldEqual 2
195195
arraySchema.getMaxItems shouldEqual 10
196-
// TODO - this should be an IntegerSchema but the @ArraySchema annotation items schema is not being picked up
197-
// arraySchema.getItems shouldBe an[IntegerSchema]
196+
arraySchema.getItems shouldBe an[IntegerSchema]
198197
}
199198

200199
it should "process Model without any properties" in new TestScope {

0 commit comments

Comments
 (0)