kotlin/java-java注解中不存在对构造函数编译的属性参数的引用

uwopmtnx  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(308)

在我的公司,我们开始将kotlin与java结合起来,发现了一个奇怪的场景。当我在kotlin类中的构造函数的属性参数上放置java注解,并使用不存在的引用作为注解的参数之一时,intellij直观地指示错误,但是它的构建(ctrl+f9)和maven的构建编译正常,没有错误。
我们正在使用Java8和Kotlin1.4.20。
以下是声明为java文件的注解:

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

    String scope() default "ABC";
}

下面是使用注解(class)的kotlin类 Abc 不存在):

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

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

    }
}

如代码注解中所述,放置在kotlin函数中的同一注解的行为与预期相同(即,代码不编译)。声明为kotlin文件的等效注解的行为也与预期相同。
当代码运行时 scope 变量采用其默认值,因此不存在运行时错误。
我已经试过了:
使intellij缓存无效并重新启动。
将注解声明从 @Required(scope = Abc.X)@field:Required(scope = Abc.X) 我还尝试在一个全新的项目中复制这种行为,没有继承公司的base maven项目,但没有效果。
老实说,我认为这很有可能与公司的项目有关。我知道我还没有详细说明我的公司使用什么和所有的配置(事实上,如果我这样做的话,问题会变得太大),但我希望即使只是基本的问题,也有人能够提供帮助。

e4yzc0pl

e4yzc0pl1#

这是一个kotlin编译器错误:参数列表没有分析java注解的用法 @Target(FIELD) 在Kotlin酒店。
有关此问题的更新,请关注此问题https://youtrack.jetbrains.com/issue/kt-33822.

相关问题