gpt4 book ai didi

Groovy 的 @TypeChecked 或 @Builder + IntelliJ IDEA = false 错误提示。这是一个错误吗?

转载 作者:行者123 更新时间:2023-12-02 03:33:34 28 4
gpt4 key购买 nike

Groovy 2.3.2 和 IntelliJ IDEA 13.1.4

考虑以下示例:

1.

@TypeChecked
class ImmutabilityUtils {

static List<Map<String, String>> asImmutable(List<Map<String, String>> relatedFeed) {
relatedFeed*.asImmutable().asImmutable()
}
}

在上面的示例行 relatedFeed*.asImmutable().asImmutable()在第一个 asImmutable() 下用红色下划线调用消息:

类别方法“asImmutable”不能应用于 java.util.List >

奇怪的事情要注意 - 以前我在将结果作为构造函数参数传递时内联执行完全相同的操作时,IDE 没有提示。就像是:
new FeedProcessor(relatedFeed*.asImmutable().asImmutable())
构造函数定义如下所示:
FeedProcessor(List<Map<String, String>> relatedFeed)
...不是 IDE 提示的情况。

Screen shot illustrating issue 1. and 2.

2.
@TypeChecked
class ImmutabilityUtils {

static Map<String, Map<String, String>> asImmutable(Map<String, Map<String, String>> lookupFeed) {
lookupFeed.collectEntries { [it.key, it.value.asImmutable()] }.asImmutable()
}
}

为了使事情更短,这里我们有与第一个示例完全相同的情况。唯一的区别是 asImmutable()带下划线的方法调用是行尾的方法调用(在闭包的大括号关闭之后)。 IDE 的消息是

类别方法“asImmutable”不能应用于 java.util.Map

与第一个示例类似,作为构造函数参数内联执行时没有提示。

3.
@Builder(buildMethodName='build', builderMethodName='builder', prefix='with')
class Whatever { ... }

这里 @Builder注释本身带有消息下划线

缺少的属性:forClass、builderClassName

这是错误的,例如 forClass 和 builderMethodName 不能同时使用。

Screen shot illustrating issue 3.

IntelliJ 中的任何红色下划线都意味着代码甚至无法编译。它编译并按预期工作 - 既由 IDE 本身编译,也由 IDE 外部的 Gradle 编译。

为什么 IntelliJ 提示某些事情是正确的?

最佳答案

红色下划线并不一定意味着代码不会编译。这意味着 IntelliJ 自己的代码分析认为存在错误,但并不总是正确的——尤其是对于 Java 以外的语言。 IntelliJ 对 Groovy 的支持很好但并不完美,对于新的来说可能还没有那么好 @TypeChecked模式,并且它可能没有关于较少/最近的 AST 转换的特定知识,例如 @Builder根本(在这种情况下它不会理解它们)。

在这种情况下,正确的做法是在 IntelliJ 的 bug tracker 中提出问题。 - 不仅符合您自己的利益,而且符合整个 Groovy 社区的利益。

关于Groovy 的 @TypeChecked 或 @Builder + IntelliJ IDEA = false 错误提示。这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203603/

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