Ненулевая аннотация области пакета в Java для Kotlin (построена Gradle)
Я пытаюсь написать библиотеку 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); }
SRC / Основной / Kotlin/ sampleKotlin/ Main.kt
package sampleKotlin import foo.Foo import kotlin.reflect.full.memberFunctions fun main(args : Array<String>) { println(Foo::class.memberFunctions.first()) }
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'] }