Как сохранить аннотации и имена переменных метода при компиляции Kotlin в Java?

Работаю над android SDK. Сервис для шаринга Jitpac при сборке компилирует мой kotlin class в java, меняя названия параметров метода и удаляя аннотации.

Например есть вот такой метод:

@Experimental
fun setStatusBarSettings(
    isEnableEdgeToEdgeModeOnStartup: Boolean,
    isDisableEdgeToEdgeModeOnDestroy: Boolean
) {
    this.isEnableEdgeToEdgeModeOnStartup = isEnableEdgeToEdgeModeOnStartup
    this.isDisableEdgeToEdgeModeOnDestroy = isDisableEdgeToEdgeModeOnDestroy
}

Код аннотации:

@RequiresOptIn(message = "This API is experimental. It may be changed in the future without notice.")
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
annotation class Experimental

На выходе получаю:

public final void setStatusBarSettings(boolean var1, boolean var2) {
    this.isEnableEdgeToEdgeModeOnStartup = var1;
    this.isDisableEdgeToEdgeModeOnDestroy = var2;
}

Как мне сохранить названия параметров и аннотацию?


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

Автор решения: talex

Нужно заменить @Retention(AnnotationRetention.BINARY) на @Retention(AnnotationRetention.RUNTIME)

Тогда аннотация будет доступна в рантайме.

Названия параметров это скользкая штука. Они напрямую не хранятся.

→ Ссылка
Автор решения: Vadik

Чтобы сохранить имена аргументов у функций, нужно передать опцию -java-parameters компилятору Kotlin. В build.gradle это задается в секции kotlinOptions:

android {
    ...
    kotlinOptions {
        ...
        freeCompilerArgs += '-java-parameters'
    }
}
→ Ссылка