gpt4 book ai didi

intellij-idea - 将语言注释放在扩展方法接收器上

转载 作者:行者123 更新时间:2023-12-02 12:48:18 26 4
gpt4 key购买 nike

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

这是否也可以用于接收器参数,或者是否有其他方法可以获得扩展类型的语言功能。

我试过了:

fun @Language("SQL") String.trimSQL() = this.trimMargin()

但这给出了错误:
Error:(57, 5) Kotlin: This annotation is not applicable to target 'type usage'

最佳答案

目前没有办法做到这一点。如果您在 String 上创建扩展类型,它将适用于所有 String s 在您创建扩展的范围内,并且无法考虑注释。

类型别名也基本上被忽略,所以即使你要引入 SQLString String 的类型别名,并在其上创建扩展,该扩展可用于任何 String实例。

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

fun trimSQL(@Language("SQL") str: String) = str.trimMargin()

... 那么你必须使用 use-site target带有注释,以便将其应用于接收器(即应用于生成的静态方法的第一个参数)。
fun @receiver:Language("SQL") String.trimSQL() = this.trimMargin()

这确实在第一个参数上放置了适当的注释 - 查看字节码(以及从那里反编译的 Java),除了参数名称之外,它们的两个签名都相同:
@NotNull
public static final String trimSQL2(@Language("SQL") @NotNull String str)

但是,对于扩展函数的情况,IntelliJ 目前似乎无法解决这个问题。也许值得在 Kotlin issue tracker 上提交有关它的问题。 .

关于intellij-idea - 将语言注释放在扩展方法接收器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com