У меня есть этот код, который получает предупреждения abstract type pattern reflect.runtime.universe.MethodSymbol is unchecked since it is eliminated by erasure
в каждом месте, где используется ключевое слово case
. У меня есть ощущение, что это что-то странное в API-интерфейсах отражения. Дело в том, что он работает, когда я его запускаю (как проходящие, так и ошибочные пути кода), поэтому кажется, что предупреждение ошибочно. Как убрать предупреждение?
import scala.reflect.runtime.{universe => u}
val docs = {
val ann = u.typeOf[T].members
.collect { case m: u.MethodSymbol if m.isGetter => m }
.find(_.name.decoded == prop.propertyName)
val docAnnotation = ann.flatMap(_.annotations.find(_.tpe.typeSymbol.name.decoded == "docs"))
val trees = docAnnotation.map(_.scalaArgs).getOrElse(Nil)
val args = trees.map {
case u.Apply(_, List(u.Literal(u.Constant(value)))) => Some(value.asInstanceOf[String])
case u.Select(_, name) if name.decoded == "None" => None
}
val safeGetArg = args.lift(_: Int).flatten
Documentation(safeGetArg(0), safeGetArg(1))
}