在我的公司,我们开始将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项目,但没有效果。
老实说,我认为这很有可能与公司的项目有关。我知道我还没有详细说明我的公司使用什么和所有的配置(事实上,如果我这样做的话,问题会变得太大),但我希望即使只是基本的问题,也有人能够提供帮助。
1条答案
按热度按时间e4yzc0pl1#
这是一个kotlin编译器错误:参数列表没有分析java注解的用法
@Target(FIELD)
在Kotlin酒店。有关此问题的更新,请关注此问题https://youtrack.jetbrains.com/issue/kt-33822.