Друзья, если кто-то использует Xjvm-default и решил перейти на kotlin 1.4.20, готовьтесь к небольшому сюрпризу.
Если вы любите
@JvmDefault и он у вас насован во все интерфейсы, вы почти наверняка получите
Kotlin: Explicit override is required for ...
Суть проблемы, насколько я понял в том, что если вы объявили метод с
@JvmDefault, нужно обязательно всем наследникам-интерфейсам поставить
@JvmDefault на этот же метод. Поначалу я испугался, что придётся делать именно так, как написано в выдаваемой компилятором ошибке и делать explicit override, что было бы адом кромешным. Но нет, если у вас implicit override, то тоже канает. Во всяком случае в этой версии Котлина :)
Итого - для всех explicit override под методами
@JvmDefault нужно просто пройтись и проставить
@JvmDefault (чего раньше не требовалось, но это не так уж страшно).
P.S. В попытках понять это, я полез в youtrack и нашёл там странные issue, в которых увидел -Xjvm-default=all-compatibility, -Xjvm-default=all и прочую недокументированную ересь :)
Как оказалось, полный набор опций такой [disable, enable, compatibility, all-compatibility, all].
Если вы не планируете использовать бинарники с JVM старше 8, то самым разумным выглядит enable, как и раньше