Почему `Intrinsics.checkParameterIsNotNull` не встроен?

В Kotlin, если мы декомпилируем байт-код Kotlin на Java, мы можем часто видеть этот оператор, который выполняет нулевые проверки:

Intrinsics.checkParameterIsNotNull(foo, "foo") 

Если мы изучим furthur, мы увидим декомпилированную реализацию этого метода, его реализация точно такая же, как и имя:

 public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { throwParameterIsNullException(paramName); } } 

Из-за существования этого класса ( Intrinsics ) я не могу использовать Kotlin без stdlib, даже если бы я старался избегать использования функций из stdlib, он автоматически генерирует вызовы Intrinsics.checkParameterIsNotNull .

Поскольку реализация этого метода очень короткая (и появляется очень часто), почему эта функция не включена?

Есть ли какие-то аннотации, которые позволяют нам предотвратить компилятор Kotlin для создания этой нулевой проверки? (возможно, что-то вроде @TrustedNotNull )

Для ProGuard: я беспокоюсь, потому что я работаю над разделяемыми библиотеками, и ProGuard не подходит для меня в этом случае. Я, очевидно, знаю эти инструменты устранения кода (ProGuard, dce-js), и я знаю, как и когда их использовать.
Я просто спрашиваю, почему функция не встроена.

Я предполагаю, что вызов этого окончательного метода более эффективен, чем его включение.

Хотя код может казаться простым, его байтовый код довольно длинный. Вложение этого могло бы повредить эффективности.

Надеюсь, кто-то появится и даст более удобный и более официальный технический ответ, но для начала я думаю, что избегать (или даже пытаться избежать) стандартной библиотеки – это не правильный подход в целом. Он содержит основные конструкции языка, которые вы, вероятно, должны использовать в любой кодовой базе Котлина. Даже документы говорят, что:

Стандартная библиотека Котлин предоставляет живые предметы для повседневной работы с Котлином.

Если вы беспокоитесь о его размере, вы можете использовать специальные инструменты платформы, чтобы лишить любые его части, которые вы не используете, например, вы можете использовать Proguard для Java и плагин DCE для JavaScript. Большая часть его содержимого не является взаимозависимой, поэтому эти инструменты могут значительно сократить объем кода, который ваш окончательный вывод будет содержать из стандартной библиотеки.

Как уже говорилось, язык Котлина может только разворачивать его истинную силу со своим stdlib. Таким образом, я не вижу причин встраивать материал Intrinsics . Не следует серьезно относиться к клиенту, который вообще пытается избежать stdlib.

Intereting Posts
SortedList IndexOutOfBoundsException: обнаружена несогласованность. Недопустимая позиция позиции при удалении последнего элемента почему вызов setText () в OnFocusChangeListener очищает текст в представлении? Codename. Ошибки сборки, связанные с Kotlin kotlin + эспрессо: не найдено никаких действий Как использовать `filter` на экземпляре карты в Kotlin? Котлин – для каждого Неправильное отношение типа Corda WireTransaction – TransactionSignature выведено, но DigitalSignature.WithKey ожидается Котлин не встраивает некоторые тела kotlin null указатель execption Как хранить данные json при использовании Android Studio 3.0? Как назначить байт в котлин? Как сделать закрытые классы родовыми в котлин? Как связать и отобразить статус выполнения, используя привязку данных в android Android: ошибка внутреннего компилятора при использовании кинжала 2 (Kotlin) Выравнивание двух кнопок по горизонтали программно с использованием компоновки ограничений