El método no se llama, no hay error, tal vez tiene que ver con generics / objects complementarios / inheritance / concurrency / en línea

De acuerdo, entonces tengo una class llamada ChannelBase que es la superclass para todas las cosas de tipo de canal en Slack (básicamente solo canales y grupos ya que los MPIM ya no se consideran grupos)

Dentro de ChannelBase hay una abstract class ChannelCompanion<T : BaseChannel<T>> (el genérico es el tipo de la subclass, aka Channel o Group ). La subclass tiene su object complementario ampliar ChannelCompanion, que lo fuerza a tener una function fromJson(JsonObject) , y proporciona al object complementario un inline fun start(callback: () -> Unit) que reúne la list de canales de la API Slack y lo analiza.

Así que, básicamente, esto es lo que tenemos, supongamos que estamos registrando la class Channel . Cuando se llama a Channel.start { } (henetworkingado de ChannelCompanion), esto es lo que debería suceder:

-> Llamar a ChannelCompanion.start { }
-> Hacer una request HTTP asincrónicamente al método channel.list de un equipo flojo
-> Analice el JSON y recupere la matriz de Channel JsonObjects
-> Analizar cada JsonObject en un object Channel usando Channel.fromJson(JsonObject) (una diversión abstracta en ChannelCompanion)

El problema es que cuando se llama a Channel.fromJson , el Thread se congela. No hay error o exception, simplemente se congela. Si no comprende la estructura de esto (es difícil de explicar), aquí está el repository: https://github.com/Deanveloper/SlaK/tree/master/src/main/kotlin/com/deanveloper/slak/ canal

El código de debugging muestra que el progtwig se congela cuando se llama a Channel.fromJson . La primera línea de Channel.fromJson es imprimir que la function se ejecutó y no se imprime. Sin embargo, la línea antes de que se llame se imprime. No estoy seguro de qué está pasando aquí.

Es bueno tener en count que si bien hay varios hilos, todo esto se ejecuta en el mismo hilo después de que se realiza la request HTTP.

Si desea clonar el repository y probarlo usted mismo, https://github.com/Deanveloper/SlaK . En el directory de testing JUnit, vaya a BaseTest y reemplace la key API encriptada con una key API para un equipo Slack propio