Error de reflexión de Scala: este es un módulo interno, use reflectModule en un InstanceMirror para obtener su ModuleMirror
Siguiendo aesta preguntaEstoy tratando de averiguar cómo llamar a un método en un objeto. Las definiciones relevantes son:
trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}
Conseguí unSymbol
paraobjA
Me gusta esto:
import reflect.runtime.universe._
val stuff = typeOf[MyClass].members.filter(_.isValue).filter(_.typeSignature <:< typeOf[ThirdParty])
Que devuelve unIterable
con un solo elemento, así que digamos:
val objASymbol = stuff.head.asModuleSymbol
Entonces lo intenté, basado enesta otra pregunta, esta:
val mirror = runtimeMirror(getClass.getClassLoader)
mirror.reflectModule(objASymbol)
Lo que resultó en el mensaje de error citado en el tema:
java.lang.Error: this is an inner module, use reflectModule on an InstanceMirror to obtain its ModuleMirror
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:118)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:60)
¡El problema es que no puedo entender qué me dice este mensaje de error!