Как получить обнуляемость типов Java, используя отражение Kotlin? - PullRequest
Винтажный Клуб для гитаристов
2 голосов
/ 23 декабря

Когда я использую отражение Kotlin, чтобы получить обнуляемость Kotlin свойств, таких как val nullableString: String?, я получаю правильную информацию в isMarkedNullable свойстве KType. Он также работает «внутри» типов, таких как val nullableList: List<String?>?, где не только обнуляем весь список, но и отдельные элементы могут быть null.

Я хотел бы использовать тот же механизм и для Java типы. Это частично работает, например, когда у меня есть свойство, подобное public @javax.annotation.Nullable String text;. Но @javax.annotation.Nullable нельзя использовать таким образом public List<@Nullable String> list;, потому что у него нет цели TYPE_USE. Поэтому я хотел бы использовать @org.checkerframework.checker.nullness.qual.Nullable, но эта аннотация игнорируется отражением Котлина.

Вот некоторый тест:

public class KotlinReflectionTest {

    public static void main(String[] args) {
        for (Field field : TestClass.class.getFields()) {
            final KProperty<?> kProperty = ReflectJvmMapping.getKotlinProperty(field);
            System.out.println(kProperty.getName() + " nullable: " + kProperty.getReturnType().isMarkedNullable());
        }
    }

    public static class TestClass {
        public String text;                                                              // false
        public @javax.annotation.Nullable String textJavax;                              // true
        public @org.jetbrains.annotations.Nullable String textJetbrains;                 // false
        public @org.checkerframework.checker.nullness.qual.Nullable String textChecker;  // false
    }

}

, который выдает следующий вывод:

text nullable: false
textJavax nullable: true
textJetbrains nullable: false
textChecker nullable: false

Можно ли сказать Kotlin Reflection, какие аннотации использовать? Планируют ли они поддерживать Checker Framework? Буду признателен за любой комментарий. Спасибо

...