Size: a a a

2019 November 26

VP

Vladimir Petrakovich in Kotlin JVM
Блок buildscript - это по факту отдельный скрипт. Странно, что объявление переменных перед ним - это не ошибка.
источник

RI

Ruslan Ibragimov in Kotlin JVM
Vladislav Navrocky
тут это $kotlin_version
Через билд скрипт сейчас не объявляют
источник

VN

Vladislav Navrocky in Kotlin JVM
а как нонче делают?
источник

RI

Ruslan Ibragimov in Kotlin JVM
Версии можно положить в buildSrc (есть статьи в интернете), плагины через блок plugins
источник

VN

Vladislav Navrocky in Kotlin JVM
Ruslan Ibragimov
Версии можно положить в buildSrc (есть статьи в интернете), плагины через блок plugins
там тоже подстановки не работют
источник

RI

Ruslan Ibragimov in Kotlin JVM
Работают, надо только const сделать
источник

RI

Ruslan Ibragimov in Kotlin JVM
Если const совсем не подходит, то блок pluginManagment в settings
источник

RI

Ruslan Ibragimov in Kotlin JVM
Там можно задать версию
источник

VP

Vladimir Petrakovich in Kotlin JVM
А проще в plugins {}. Зачем она нужна в других местах?
источник

VN

Vladislav Navrocky in Kotlin JVM
оно?
источник

VN

Vladislav Navrocky in Kotlin JVM
похоже на то что надо
источник

BV

Boris Vanin in Kotlin JVM
Вообще чаще всего можно версию просто написать прямо в строке плагина, смысла писать версию в пропертях обычно просто нет
источник

VN

Vladislav Navrocky in Kotlin JVM
Boris Vanin
Вообще чаще всего можно версию просто написать прямо в строке плагина, смысла писать версию в пропертях обычно просто нет
Ну у меня уже в трех местах версия, уже начинает смущать
источник

BV

Boris Vanin in Kotlin JVM
Vladislav Navrocky
Ну у меня уже в трех местах версия, уже начинает смущать
После объявления котлин плагина вроде не обязательно писать версию в зависимостях
источник

BV

Boris Vanin in Kotlin JVM
Есть спецметод
источник

BV

Boris Vanin in Kotlin JVM
Или речь о какой-то другой версии?
источник

VP

Vladimir Petrakovich in Kotlin JVM
Vladislav Navrocky
Ну у меня уже в трех местах версия, уже начинает смущать
Что это за места?
источник

N

Nick in Kotlin JVM
Здравствуйте,
планируется ли возможность писать в таком стиле для vararg переменных?
listOf(
  a,
  b,
  *someList.flatMap { listOf(it.c, it.d) }
)

на данный момент приходится писать так
listOf(
  a,
  b,
  *someList.flatMap {  listOf(it.c, it.d)  }.toTypedArray()
)

под капотом все равно SpreadBuilder, зачем требование переводить списки в toTypedArray, если все равно под капотом можно было бы вызвать SpreadBuilder.addAll(Collection)?
источник

N

Nick in Kotlin JVM
Точнее, сам метод SpreadBuilderа такой:
public void addSpread(Object container) {
       if (container == null) return;

       if (container instanceof Object[]) {
           Object[] array = (Object[]) container;
           if (array.length > 0) {
               list.ensureCapacity(list.size() + array.length);
               Collections.addAll(list, array);
           }
       }
       else if (container instanceof Collection) {
           list.addAll((Collection) container);
       }
       else if (container instanceof Iterable) {
           for (Object element : (Iterable) container) {
               list.add(element);
           }
       }
       else if (container instanceof Iterator) {
           for (Iterator iterator = (Iterator) container; iterator.hasNext(); ) {
               list.add(iterator.next());
           }
       }
       else {
           throw new UnsupportedOperationException("Don't know how to spread " + container.getClass());
       }
   }

То есть всунуть туда коллекцию или итератор можно, а из-за vararg в байткоде образуется:
L41
   LINENUMBER 154 L41
   ALOAD 15
   ICONST_0
   ANEWARRAY pl/some/type
   INVOKEINTERFACE java/util/Collection.toArray ([Ljava/lang/Object;)[Ljava/lang/Object; (itf)
  L43
   ASTORE 21
   ALOAD 13
   ALOAD 12
   ALOAD 21
   INVOKEVIRTUAL kotlin/jvm/internal/SpreadBuilder.addSpread (Ljava/lang/Object;)V
источник

N

Nick in Kotlin JVM
tl;dr
приходится писать *list.toTypedArray(), в байткоде образуется лишний Collection.toArray, хотя SpreadBuilder в методе addSpread вполне себе умеет справляться с коллекциями
можно ли это исправить как-то?
источник