Некорректная работа companion object во вложенном классе

Несколько дней назад написал код, который вызвал у меня двухчасовой ступор - в null - безопасном Kotlin null появлялся там, где его никак не могло быть. В итоге источник проблемы был найден, решение однострочное. Однако. Я уверен, что текущее поведение программы некорректно.

Минимальный пример:

fun main(args: Array<String>) {
    println(Outer().outersGetProperty)
    println(Outer.outersCompanion)
    println(Outer.Inner.innersCompanion)
}

class Outer {

    val outersGetProperty: List<Inner>
        get() = Inner.innersCompanion

    companion object {
        val outersCompanion: List<Inner> = listOf(Inner.First, Inner.Second)
    }

    open class Inner {
        object First : Inner()
        object Second : Inner()

        companion object {
            val innersCompanion: List<Inner> = listOf(First, Second)
            //val innersCompanion: List<Inner> by lazy { listOf(First, Second) } //полностью рабочий вариант, который я использую сейчас
        }
    }
}

Вывод данного кода:

[null, Outer$Inner$Second@179d3b25]

[Outer$Inner$First@254989ff, Outer$Inner$Second@179d3b25]

[null, Outer$Inner$Second@179d3b25]

В коде жестко указан тип, гарантирующий отсутствие null, и тем не менее null там есть!

Вполне возможно, моих знаний просто недостаточно, чтобы понять, что именно вызывает такое поведение, но даже если этому есть технически обоснованное объяснение и иначе сделать просто нельзя, то о таких вещах просто обязана предупреждать студия!

Прошу поделиться опытом, объяснить, чем вызвано такое поведение, может еще кто-то сталкивался.

P.s. Код изначально писался в AndroidStudio, к минимальному примеру приводился в Intellij IDEA 2020.1. Обе ide не выдали ни варнингов, ни предупреждений, хотя должны бы, потому они в тегах.

Kotlin plugin в IDEA версии 1.3.72-release-IJ2020.1-1.


Ответы (0 шт):