当使用 IntelliJ 并引用不存在的方法时,通常我会期望上下文建议“创建方法”并尝试使用明显的签名。这在过去曾经有效,但我发现现在的情况并非如此。
举个例子,如果我要创建一个 Spock 单元测试:
import spock.lang.Specification
class FizzBuzzTest extends Specification {
FizzBuzz fizzBuzz
void setup() {
fizzBuzz = new FizzBuzz()
}
def "should show '1' for 1" () {
String expected = "1"
String actual = fizzBuzz.convert(1)
expect:
expected == actual
}
}
引用的 FizzBuzz 类不存在,当转到上下文菜单时,它会提示您“创建 FizzBuzz 类”。这是预期的行为,并且有效。
完成此操作后,方法调用
fizzBuzz.convert(1)
应该带有下划线,表明它不存在,并且当转到上下文菜单时,系统应该提示您使用 String Convert(Integer) 的明显签名来创建它。 ..
这在过去是有效的。但是,当为教学示例设置一个具有“最小”设置的新项目时,我并没有让它表现得像那样。
运行测试会给出: 无方法签名:
FizzBuzz.convert()
适用于参数类型:(整数)值:[1]
groovy.lang.MissingMethodException:没有方法签名:FizzBuzz.convert()
适用于参数类型:(整数)值:[1]
但是当进入
fizzBuzz.convert(1)
的上下文菜单时,它仅提供“引入局部变量”或“删除不必要的括号”
版本:
org.spockframework:spock-core:2.3-groovy-4.0
JVM:14
Gradle:7.0
IntelliJ IDEA 2023.1.1 (Ultimate Edition)
Build #IU-231.8770.65, built on April 27, 2023
<Licensing info snipped... >
Runtime version: 17.0.6+10-b829.9 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 14.1
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 16
Metal Rendering is ON
Non-Bundled Plugins:
solarized (1.5)
monokai-pro (1.10)
IdeaVIM (2.7.0)
com.atlassian.bitbucket.references (2022.1.224)
com.github.kisstkondoros.codemetrics (1.0.4)
GrepConsole (12.22.1-IJ2021.1)
org.sonarlint.idea (8.2.0.68615)
org.mapstruct.intellij (1.6.0)
MetricsReloaded (1.12)
io.snyk.snyk-intellij-plugin (2.4.59)
zielu.gittoolbox (500.0.14+222)
com.intellij.restClient.postmanConverter (1.0.4)
Kotlin: 231-1.8.21-IJ8770.65
我确认这在 CE 版本中也不起作用。然而,当我安装了 Vim 插件并重新启动后,它就按预期工作了。
因此,我回到了无法正常工作的原始设置,并选择了“修复 IDE”。重新索引后它没有修复。但“重新启动”后它就起作用了。
所以,我将认为这是 IntelliJ 的异常。谢谢您的关注。