Skip to content

Commit ca136be

Browse files
committed
Update SwaggerScalaModelConverter.scala
1 parent 7821ca8 commit ca136be

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.swagger.v3.oas.annotations.media.{ArraySchema, Schema => SchemaAnnotat
1515
import io.swagger.v3.oas.models.media.Schema
1616
import org.slf4j.LoggerFactory
1717

18+
import scala.util.Try
1819
import scala.util.control.NonFatal
1920

2021
class AnnotatedTypeForOption extends AnnotatedType
@@ -129,13 +130,14 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
129130
val sp: Schema[String] = PrimitiveType.STRING.createProperty().asInstanceOf[Schema[String]]
130131
setRequired(`type`)
131132
try {
132-
val valueMethods = cls.getMethods.toSeq.filter { m =>
133+
val mainClass = getMainClass(cls)
134+
val valueMethods = mainClass.getMethods.toSeq.filter { m =>
133135
m.getDeclaringClass != EnumClass &&
134136
m.getReturnType.getName == "scala.Enumeration$Value" && m.getParameterCount == 0
135137
}
136-
val enumValues = valueMethods.map(_.getName)
138+
val enumValues = valueMethods.map(_.invoke(None.orNull))
137139
enumValues.foreach { v =>
138-
sp.addEnumItemObject(v)
140+
sp.addEnumItemObject(v.toString)
139141
}
140142
} catch {
141143
case NonFatal(t) => logger.warn(s"Failed to get values for enum ${cls.getName}", t)
@@ -162,6 +164,15 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
162164
}
163165
}
164166

167+
private def getMainClass(clazz: Class[_]): Class[_] = {
168+
val cname = clazz.getName
169+
if (cname.endsWith("$")) {
170+
Try(Class.forName(cname.substring(0, cname.length - 1))).getOrElse(clazz)
171+
} else {
172+
clazz
173+
}
174+
}
175+
165176
private def _isOptional(annotatedType: AnnotatedType, cls: Class[_]): Boolean = {
166177
annotatedType.getType match {
167178
case _: ReferenceType if isOption(cls) => true

0 commit comments

Comments
 (0)