Метод, который не вызывается, без ошибок, может быть, связан с дженериками / сопутствующими объектами / наследованием / параллелизмом / вложением

Хорошо, поэтому у меня есть класс под названием ChannelBase, который является суперклассом для всех типов каналов в Slack (в основном, только каналы и группы в качестве MPIM больше не рассматриваются)

В пределах ChannelBase существует abstract class ChannelCompanion<T : BaseChannel<T>> (общий тип является типом подкласса, например, Channel или Group ). Затем подкласс имеет свой сопутствующий объект, который расширяет ChannelCompanion, что заставляет его иметь функцию fromJson(JsonObject) и предоставляет сопутствующий объект inline fun start(callback: () -> Unit) который собирает список каналов из Slack API и анализирует его.

Итак, в основном, вот что мы имеем, допустим, мы регистрируем класс Channel . Когда Channel.start { } (унаследованный от ChannelCompanion), вот что должно произойти:

-> Вызов ChannelCompanion.start { }
-> Асинхронно делать HTTP-запрос к методу channel.list slack team
-> Разбор JSON и извлечение массива каналов JsonObjects
-> Разбор каждого объекта JsonObject в объект канала с использованием Channel.fromJson(JsonObject) (абстрактное удовольствие в ChannelCompanion)

Проблема в том, что при Channel.fromJson Thread зависает. Нет ошибки или исключения, она просто зависает. Если вы не понимаете структуру этого (это трудно объяснить), вот репозиторий: https://github.com/Deanveloper/SlaK/tree/master/src/main/kotlin/com/deanveloper/slak/ канал

Код отладки показывает, что программа зависает при Channel.fromJson . Первая строка Channel.fromJson предназначена для печати, что функция была запущена, и она не печатает. Однако строка, перед которой она вызывается, печатается. Не совсем уверен, что здесь происходит.

Хорошо отметить, что, хотя есть несколько потоков, все это выполняется в том же потоке после запроса HTTP.

Если вы хотите клонировать репозиторий и протестировать себя, https://github.com/Deanveloper/SlaK . В тестовом каталоге JUnit перейдите в BaseTest и замените зашифрованный ключ API ключом API для собственной команды Slack

Это было вызвано вложением, поскольку функция от Json имеет защищенную область действия. Поскольку функция была встроена, функция fromJson фактически вызывалась извне пакета (поскольку метод запуска вызывался извне пакета). Это вызвало IllegalAccessError.