Я пытаюсь написать библиотеку Java, которая имеет ненулевой API, и я бы хотел, чтобы Kotlin правильно вывел эту необнуляемость. Я использую аннотации JSR-305 и его @TypeQualifierDefault
для достижения эффекта для всего пакета в соответствии с справкой по взаимодействию Java Kotlin .
Я строю все это с помощью Gradle 4.10.2 и поставляю -Xjsr305=strict
компилятору Kotlin, в соответствии с инструкциями . Тем не менее, когда я рефлексивно проверяю типы из Kotlin, они сообщаются как типы платформ , например ::
fun sample.Foo.bar(T!): kotlin.collections.(Mutable)List<T!>!
Что я делаю не так, что я не получаю следующий вывод?
fun sample.Foo.bar(T): kotlin.collections.(Mutable)List<T>
Обратите внимание, что Spring Framework 5 имеет аналогичную аннотацию с именем @NonNullApi
.
Я использую OpenJDK 11.
PS. Я знаю, что могу просто аннотировать каждый метод и параметр с помощью @Nonnull
, но я после глобального поведения и преобразования List<T!>
Котлина * в List<T>
.
Вот MCVE:
SRC / главная / Java / sampleAnnotation / NonNullPackage.java
package sampleAnnotation;
import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierDefault;
import java.lang.annotation.*;
@Nonnull
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
@TypeQualifierDefault({
ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_USE
})
public @interface NonNullPackage {
}
SRC / главная / Java / Foo / package-info.java
@NonNullPackage
package foo;
import sampleAnnotation.NonNullPackage;
SRC / главная / Java / Foo / Foo.java
package foo;
import java.util.List;
public interface Foo {
<T> List<T> bar(T t);
}
build.gradle
plugins {
id 'java'
id 'org.jetbrains.kotlin.jvm' version '1.3.0'
}
wrapper {
gradleVersion = '4.10.2'
}
repositories {
mavenCentral()
}
dependencies {
compileOnly group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib'
compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect'
}
compileKotlin {
kotlinOptions.freeCompilerArgs = ['-Xjsr305=strict']
}