有了intellij的想法,我如何找出使变量可见的原因?
一个很难的例子:
class A
,并看到变量something
。如果您跳转到源代码,则会看到它在trait X
中定义。但是你没有直接extend
特质X
。那么,你使这个变量可见的是什么呢?如果您有一个深层嵌套的层次结构,那么跟踪可能很难。任何建议或解决方案?
编辑:如果您喜欢此功能请求,请考虑投票:http://youtrack.jetbrains.com/issue/IDEA-124369
答案 0 :(得分:0)
我知道这个问题的两个几乎解决方案。
如你所提到的,Go-to-declaration在局部变量的情况下解决了这个问题。
更一般地说,“查找用法”功能可以根据变量的不同用途的类型和文件为您提供简洁的细分。从中可以看出它是否涉及静态导入。
这并不完美,但有一点想到这两个通常足以弄明白你想要什么。
答案 1 :(得分:0)
使用ctrl + b或F4跳转到源代码。或者,您可以使用ctrl + shift + a来获取选项/操作。您也可以在http://gaerfield.github.io/ide-shortcuts/找到快捷方式。希望它会有所帮助。
答案 2 :(得分:0)
我不认为IntelliJ IDEA有任何“查找使变量可见的内容”的快捷方式。
但是,您可以使用“查找用法”选项(Alt + F7)来确定它。例如:
import java.nio._
object TempObj extends App {
def func = 2
val p = file.Paths.get("some-path")
func
}
所以在“文件”上查找用法,告诉你它来自Package“文件”(在新标签的标题中它还显示了完整的包名,例如:在Project Files中查找java.nio.file的用法) 。 而在func上查找用法会告诉你它是一个方法(并且标题现在说:在项目和库中找到func()的用法)
所以现在你可以确定,究竟是什么使变量可见。这也适用于导入,因为它显示了导入它的包,然后您可以查找该包的导入。
答案 3 :(得分:0)
据我所知,您希望看到创建您使用的对象的代码,例如Mystery someMystery;
。
这为您提供了两个选项来填充someMystery
:
someMystery = ...
其中......是您要填充的代码
someMystery
如果是这种情况你应该遵循
该代码(根据您的需要使用ctrl + B)到它的位置
实际上创建了Mystery
对象。无论哪种方式,IMO都无法确定someMystery
实例是否比Mystery
更具体,因为它是在运行时决定的,而不是在编译时决定的,所以你的下一个赌注是在调试中运行程序并查看哪个对象进入someMystery
,尽管您不能保证每次都获得相同类型的对象。
PS。我的答案完全基于我对该主题的java理解,不能说它是否也适用于scala。
答案 4 :(得分:0)
这可能不是您希望得到的答案。
但是,引用自己
如果您的嵌套层次结构很深,则跟踪可能会很困难。
您是否考虑过使用composition over inheritance?也许这将消除您正在寻找的功能的需求。
答案 5 :(得分:0)
深度嵌套的层次结构听起来不太好。我理解你对此的痛苦。
当您覆盖 vals 或 defs 时,行号旁边会显示一个小圆圈,即使它来自嵌套层次结构,也会显示它的来源。按下命令键将鼠标悬停在 vals 上还会显示一个小工具提示。
这有帮助吗?
答案 6 :(得分:-3)
如果您希望看到类,字段或方法,则需要将它们实现为公共。如果这是你的问题。