Ненулевая аннотация области пакета в Java для Kotlin (построена Gradle) - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь написать библиотеку 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']
    }
    
...