@@ -15,6 +15,7 @@ import io.swagger.v3.oas.annotations.media.{ArraySchema, Schema => SchemaAnnotat
1515import io .swagger .v3 .oas .models .media .Schema
1616import org .slf4j .LoggerFactory
1717
18+ import scala .util .Try
1819import scala .util .control .NonFatal
1920
2021class 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