Size: a a a

2018 August 23

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
Igor
Кто-нибудь баловался котлином?

Компилю хеловорд из экзамплов https://i.gyazo.com/ebcc1a18e7986cdb5221254f2010175a.png

и как только, там убираешь !! - бинарник начинает пададать с
com.oracle.svm.core.jdk.UnsupportedFeatureError: Unresolved element found

А если убрать из флагов компилятора -H:+ReportUnsupportedElementsAtRuntime

то сама компиляция падает c
java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
может глянуть, что там за байткод сгенерился. Отреверсить его назад в джаву. У котлина очень хитрый компиятор, может он чего-то необычное замутил
источник

ВВ

Виктор Вербицкий in graalvm_ru
В том то и дело, что в яву многое просто не реверсится после котлина. Даже jit это может сбивать с панталыку
источник

AE

Alexandr Emelyanov in graalvm_ru
не отреверсится, да, но выполняться должно, ребята из jb очень хорошо за этим следят
источник

λ

λoλdog in graalvm_ru
Виктор Вербицкий
В том то и дело, что в яву многое просто не реверсится после котлина. Даже jit это может сбивать с панталыку
Wat ?
источник

AE

Alexandr Emelyanov in graalvm_ru
тут такое ощущение что рантайм котлина не подгрузился
источник

OS

Oleg Shelajev in graalvm_ru
А что в класспасе? Там просто толстый джар же, значит рантайм котлина должен сидеть внутри?
источник

AE

Alexandr Emelyanov in graalvm_ru
смотря как собирается, я этот пример не видел
источник

OS

Oleg Shelajev in graalvm_ru
Ну если это пример из демо то там толстый джар
источник

AE

Alexandr Emelyanov in graalvm_ru
сейчас подкапотом что расскажу
источник

AE

Alexandr Emelyanov in graalvm_ru
JavaHello.java:
public class JavaHello {
   public static String hello = "123";
}

KotlinHello.kt:
import test.JavaHello

fun getHelloFromJava(): String {
   return JavaHello.hello
}

декомпиляция дает:
import org.jetbrains.annotations.NotNull;
import kotlin.jvm.internal.Intrinsics;
import test.JavaHello;
import kotlin.Metadata;

@Metadata(mv = { 1, 1, 10 }, bv = { 1, 0, 2 }, k = 2, d1 = { "\u0000\b\n\u0000\n\u0002\u0010\u000e\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002" }, d2 = { "getHelloFromJava", "", "jms-writer" })
public final class KotlinHelloKt
{
   @NotNull
   public static final String getHelloFromJava() {
       final String hello = JavaHello.hello;
       Intrinsics.checkExpressionValueIsNotNull((Object)hello, "JavaHello.hello");
       return hello;
   }
}
источник

OS

Oleg Shelajev in graalvm_ru
А где лежит Intrinsics.class?
источник

AE

Alexandr Emelyanov in graalvm_ru
вариант с !!
KotlinHello.kt:
import test.JavaHello

fun getHelloFromJava(): String {
   return JavaHello.hello!!
}

декомпиляция:

import org.jetbrains.annotations.NotNull;
import kotlin.jvm.internal.Intrinsics;
import test.JavaHello;
import kotlin.Metadata;

@Metadata(mv = { 1, 1, 10 }, bv = { 1, 0, 2 }, k = 2, d1 = { "\u0000\b\n\u0000\n\u0002\u0010\u000e\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002" }, d2 = { "getHelloFromJava", "", "jms-writer" })
public final class KotlinHelloKt
{
   @NotNull
   public static final String getHelloFromJava() {
       final String hello = JavaHello.hello;
       if (hello == null) {
           Intrinsics.throwNpe();
       }
       return hello;
   }
}
источник

OS

Oleg Shelajev in graalvm_ru
А ну вот это понятно почему работает, компилятор видит что хелло никогда не нул и не включает ветку с интринсикс
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
if (hello == null) { выбросится из конпеляции, потому что там константа
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
надо попробовать прописать в изначальный пример вместо константы null
источник

AE

Alexandr Emelyanov in graalvm_ru
Oleg Shelajev
А где лежит Intrinsics.class?
import kotlin.jvm.internal.Intrinsics;

я в spring boot приложении пример сделал (под рукой), у него вся джары в BOOT-INF/lib
источник

OS

Oleg Shelajev in graalvm_ru
А, вот поэтому и не работает
источник

OS

Oleg Shelajev in graalvm_ru
Потому что на буте не работает пока
источник

AE

Alexandr Emelyanov in graalvm_ru
а пример на буте?
источник

AE

Alexandr Emelyanov in graalvm_ru
вроде же нет
источник