Kotlin/Java - Java 注释中 属性 构造函数编译参数中不存在的引用

Kotlin/Java - Non-existent reference in Java annotation on property parameter of constructor compiles

在我的公司,我们开始将 Kotlin 与 Java 混合使用,并发现了一个奇怪的场景。当我在 Kotlin class 中的构造函数的 属性 参数上放置 Java 注释,并使用不存在的引用作为注释的参数之一时,IntelliJ 直观地指示错误,但是它的构建(Ctrl+F9)和maven的构建都可以正常编译,没有错误。

我们正在使用 Java 8 和 Kotlin 1.4.20。

这是注释,声明为 Java 文件:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Required {

    String scope() default "ABC";
}

这里是使用注释的 Kotlin class(class Abc 不存在):

data class Test(
        // Compiles normally
        @Required(scope = Abc.X)
        val text: String
) {

    // Compilation error
    @Required(scope = Abc.X)
    fun x() {

    }
}

如代码注释中所述,放置在 Kotlin 函数中的相同注释的行为符合预期(即代码无法编译)。声明为 Kotlin 文件的等效注释也按预期运行。

当代码为 运行 时,scope 变量采用其默认值,因此没有 运行 时间错误。

我已经尝试过:

我也尝试在一个全新的项目中复制行为,而不继承公司的基础maven项目,但无济于事。

老实说,我认为这很有可能与公司的项目有关。我知道我没有具体说明我的公司使用什么和所有配置(事实上,如果我这样做,问题会变得太大),但我希望即使只有基本问题,也有人可以提供帮助。

这是一个 Kotlin 编译器错误:没有分析参数列表以在 Kotlin 属性.

上使用 Java 注释和 @Target(FIELD)

有关此的更新,请关注问题https://youtrack.jetbrains.com/issue/KT-33822