Как сохранить аннотации и имена переменных метода при компиляции 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'
}
}