Intellij idea 在扩展方法接收器上放置语言注释

Intellij idea 在扩展方法接收器上放置语言注释,intellij-idea,kotlin,Intellij Idea,Kotlin,使用注释,可以告诉IntelliJ将参数视为给定语言的参数,以便启用自动完成和其他IDE工具 对于接收器参数也可以这样做,或者有其他方法来获取扩展类型的语言特性 我试过: fun @Language("SQL") String.trimSQL() = this.trimMargin() 但这就产生了错误: Error:(57, 5) Kotlin: This annotation is not applicable to target 'type usage' 目前没有办法做到这一点。如果在

使用注释,可以告诉IntelliJ将参数视为给定语言的参数,以便启用自动完成和其他IDE工具

对于接收器参数也可以这样做,或者有其他方法来获取扩展类型的语言特性

我试过:

fun @Language("SQL") String.trimSQL() = this.trimMargin()
但这就产生了错误:

Error:(57, 5) Kotlin: This annotation is not applicable to target 'type usage'

目前没有办法做到这一点。如果在
字符串
类型上创建扩展,则在创建扩展的范围内的所有
字符串
上都可以使用该扩展,并且无法考虑注释

typealias也基本上被忽略,因此,即使要为
String
引入
SQLString
typealias并在此基础上创建扩展,该扩展也可以用于任何
String
实例


编辑:@yole在下面的评论中有一个很好的观点,我可能误解了这个问题。如果您希望注释函数调用的接收者,以便IntelliJ能够拾取它,就像对这样的方法那样:

fun trimSQL(@Language("SQL") str: String) = str.trimMargin()
。。。然后,您必须将a与注释一起使用,以便将其应用于接收器(即,应用于生成的静态方法的第一个参数)

这确实在第一个参数上添加了适当的注释-查看字节码(以及从那里反编译的Java),它们的两个签名除了参数名之外都是相同的:

@NotNull
public static final String trimSQL2(@Language("SQL") @NotNull String str)

然而,对于扩展函数的情况,IntelliJ目前似乎无法识别这一点。也许值得在上提交一个关于它的问题。

这不是关于将扩展函数限制为带注释的字符串,而是关于在调用trimSQL()方法的字符串上启用IntelliJ IDEA的语言注入。我最近提交了一个文件,该文件作为此问题的副本解决。鉴于上述讨论,我已在Idea问题跟踪系统上提交了以下问题:
@NotNull
public static final String trimSQL2(@Language("SQL") @NotNull String str)