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

Когда я использую отражение 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? Буду признателен за любой комментарий. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...