Llamar a la function en línea de Kotlin desde Java

Exceptions.kt:

@Suppress("NOTHING_TO_INLINE") inline fun generateStyleNotCorrectException(key: String, value: String) = AOPException(key + " = " + value) 

En kotlin:

 fun inKotlin(key: String, value: String) { throw generateStyleNotCorrectException(key, value) } 

Funciona en kotlin y la function está en línea.

Pero cuando se usa en código Java, simplemente no se puede inlinear, y sigue siendo una llamada a método estático normal (vista desde el contenido descomstackdo).

Algo como esto:

 public static final void inJava(String key, String value) throws AOPException { throw ExceptionsKt.generateStyleNotCorrectException(key, value); // when decompiled, it has the same contents as before , not the inlined contents. } 

La alignment realizada por el comstackdor de Kotlin no es compatible con los files de Java, ya que el comstackdor de Java no tiene conocimiento de esta transformación (consulte esta respuesta sobre por qué los generics reificados no funcionan en absoluto).

En cuanto a otros casos de uso de inlineación (más comúnmente al pasar en un lambda como parámetro), como ya ha descubierto, el bytecode incluye un método public static para que la function en línea se pueda llamar desde Java. En este caso, sin embargo, no se produce la inclusión.