|
1 | 1 | package com.github.swagger.scala.converter |
2 | 2 |
|
| 3 | +import org.slf4j.LoggerFactory |
| 4 | + |
3 | 5 | import scala.reflect.runtime.universe |
4 | 6 | import scala.util.Try |
| 7 | +import scala.util.control.NonFatal |
5 | 8 |
|
6 | 9 | private[converter] object ErasureHelper { |
| 10 | + private val logger = LoggerFactory.getLogger(ErasureHelper.getClass) |
7 | 11 |
|
8 | 12 | def erasedOptionalPrimitives(cls: Class[_]): Map[String, Class[_]] = { |
9 | | - val mirror = universe.runtimeMirror(cls.getClassLoader) |
10 | | - |
11 | | - val moduleSymbol = mirror.moduleSymbol(Class.forName(cls.getName)) |
12 | | - val ConstructorName = "apply" |
13 | | - val companion: universe.Symbol = moduleSymbol.typeSignature.member(universe.TermName(ConstructorName)) |
14 | | - val properties = |
15 | | - Try(companion.asTerm.alternatives.head.asMethod.paramLists.flatten).getOrElse { |
16 | | - val sym = mirror.staticClass(cls.getName) |
17 | | - sym.selfType.members |
18 | | - .filterNot(_.isMethod) |
19 | | - .filterNot(_.isClass) |
20 | | - } |
| 13 | + try { |
| 14 | + val mirror = universe.runtimeMirror(cls.getClassLoader) |
| 15 | + val moduleSymbol = mirror.moduleSymbol(Class.forName(cls.getName)) |
| 16 | + val ConstructorName = "apply" |
| 17 | + val companion: universe.Symbol = moduleSymbol.typeSignature.member(universe.TermName(ConstructorName)) |
| 18 | + val properties = |
| 19 | + Try(companion.asTerm.alternatives.head.asMethod.paramLists.flatten).getOrElse { |
| 20 | + val sym = mirror.staticClass(cls.getName) |
| 21 | + sym.selfType.members |
| 22 | + .filterNot(_.isMethod) |
| 23 | + .filterNot(_.isClass) |
| 24 | + } |
21 | 25 |
|
22 | | - properties.flatMap { prop: universe.Symbol => |
23 | | - val maybeClass: Option[Class[_]] = prop.typeSignature.typeArgs.headOption.flatMap { signature => |
24 | | - if (signature.typeSymbol.isClass) { |
25 | | - Option(mirror.runtimeClass(signature.typeSymbol.asClass)) |
26 | | - } else None |
| 26 | + properties.flatMap { prop: universe.Symbol => |
| 27 | + val maybeClass: Option[Class[_]] = prop.typeSignature.typeArgs.headOption.flatMap { signature => |
| 28 | + if (signature.typeSymbol.isClass) { |
| 29 | + Option(mirror.runtimeClass(signature.typeSymbol.asClass)) |
| 30 | + } else None |
| 31 | + } |
| 32 | + maybeClass.map(prop.name.toString.trim -> _) |
| 33 | + }.toMap |
| 34 | + } catch { |
| 35 | + case NonFatal(t) => { |
| 36 | + if (logger.isDebugEnabled) { |
| 37 | + //use this form because of Scala 2.11 & 2.12 compile issue |
| 38 | + logger.debug(s"Unable to get type info ${Option(cls.getName).getOrElse("null")}", t) |
| 39 | + } else { |
| 40 | + logger.info("Unable to get type info {}", Option(cls.getName).getOrElse("null")) |
| 41 | + } |
| 42 | + Map.empty[String, Class[_]] |
27 | 43 | } |
28 | | - maybeClass.map(prop.name.toString.trim -> _) |
29 | | - }.toMap |
| 44 | + } |
30 | 45 | } |
31 | | - |
32 | 46 | } |
0 commit comments