Skip to content

Commit 743fd78

Browse files
committed
remove depenency on scala-reflect
1 parent e46c8f9 commit 743fd78

File tree

2 files changed

+18
-23
lines changed

2 files changed

+18
-23
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pomIncludeRepository := { x => false }
2323
Global / useGpg := false
2424

2525
libraryDependencies ++= Seq(
26-
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
26+
"org.slf4j" % "slf4j-api" % "1.7.30",
2727
"io.swagger.core.v3" % "swagger-core" % "2.1.6",
2828
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.0",
2929
"org.scalatest" %% "scalatest" % "3.2.3" % Test,

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

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.github.swagger.scala.converter
33
import java.lang.annotation.Annotation
44
import java.lang.reflect.ParameterizedType
55
import java.util.Iterator
6-
76
import com.fasterxml.jackson.databind.JavaType
87
import com.fasterxml.jackson.databind.`type`.ReferenceType
98
import com.fasterxml.jackson.module.scala.introspect.{BeanIntrospector, PropertyDescriptor}
@@ -14,6 +13,9 @@ import io.swagger.v3.core.util.{Json, PrimitiveType}
1413
import io.swagger.v3.oas.annotations.Parameter
1514
import io.swagger.v3.oas.annotations.media.{ArraySchema, Schema => SchemaAnnotation}
1615
import io.swagger.v3.oas.models.media.Schema
16+
import org.slf4j.LoggerFactory
17+
18+
import scala.util.control.NonFatal
1719

1820
class AnnotatedTypeForOption extends AnnotatedType
1921

@@ -24,6 +26,7 @@ object SwaggerScalaModelConverter {
2426
class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverter.objectMapper) {
2527
SwaggerScalaModelConverter
2628

29+
private val logger = LoggerFactory.getLogger(classOf[SwaggerScalaModelConverter])
2730
private val OptionClass = classOf[scala.Option[_]]
2831
private val IterableClass = classOf[scala.collection.Iterable[_]]
2932
private val SetClass = classOf[scala.collection.Set[_]]
@@ -121,15 +124,21 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
121124
case Some(enumAnnotation: JsonScalaEnumeration) => {
122125
val pt = enumAnnotation.value().getGenericSuperclass.asInstanceOf[ParameterizedType]
123126
val args = pt.getActualTypeArguments
124-
val cls = args(0).asInstanceOf[Class[Enumeration]]
125-
getEnumerationInstance(cls).map { enum =>
126-
val sp: Schema[String] = PrimitiveType.STRING.createProperty().asInstanceOf[Schema[String]]
127-
setRequired(`type`)
128-
enum.values.iterator.foreach { v =>
129-
sp.addEnumItemObject(v.toString)
127+
val cls = args(0).asInstanceOf[Class[_]]
128+
val sp: Schema[String] = PrimitiveType.STRING.createProperty().asInstanceOf[Schema[String]]
129+
setRequired(`type`)
130+
try {
131+
val valueMethods = cls.getMethods.toSeq.filter { m =>
132+
m.getReturnType.getName == "scala.Enumeration$Value" && m.getParameterCount == 0
133+
}
134+
val enumValues = valueMethods.map(_.getName).filterNot(_ == "Value")
135+
enumValues.foreach { v =>
136+
sp.addEnumItemObject(v)
130137
}
131-
sp
138+
} catch {
139+
case NonFatal(t) => logger.warn(s"Failed to get values for enum ${cls.getName}", t)
132140
}
141+
Some(sp)
133142
}
134143
case _ => {
135144
Option(nullableClass).flatMap { cls =>
@@ -202,20 +211,6 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
202211
}
203212
}
204213

205-
private def getEnumerationInstance(cls: Class[_]): Option[Enumeration] = {
206-
if (cls.getFields.map(_.getName).contains("MODULE$")) {
207-
val javaUniverse = scala.reflect.runtime.universe
208-
val m = javaUniverse.runtimeMirror(Thread.currentThread().getContextClassLoader)
209-
val moduleMirror = m.reflectModule(m.staticModule(cls.getName))
210-
moduleMirror.instance match
211-
{
212-
case enumInstance: Enumeration => Some(enumInstance)
213-
case _ => None
214-
}
215-
}
216-
else None
217-
}
218-
219214
private def getPropertyClass(property: PropertyDescriptor): Class[_] = {
220215
property.param match {
221216
case Some(constructorParameter) => {

0 commit comments

Comments
 (0)