什么使变量可见(intellij idea)

时间:2014-04-23 11:54:59

标签: scala intellij-idea

有了intellij的想法,我如何找出使变量可见的原因?

一个很难的例子:

  • 假设您查看class A,并看到变量something。如果您跳转到源代码,则会看到它在trait X中定义。但是你没有直接extend特质X。那么,你使这个变量可见的是什么呢?如果您有一个深层嵌套的层次结构,那么跟踪可能很难。

任何建议或解决方案?

编辑:如果您喜欢此功能请求,请考虑投票:http://youtrack.jetbrains.com/issue/IDEA-124369

7 个答案:

答案 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

  1. someMystery = ...其中......是您要填充的代码 someMystery如果是这种情况你应该遵循 该代码(根据您的需要使用ctrl + B)到它的位置 实际上创建了Mystery对象。
  2. 使用CDI为您填充该对象实例,在这种情况下,您应该查看CDI机制,以查看对象实例的填充方式。
  3. 无论哪种方式,IMO都无法确定someMystery实例是否比Mystery更具体,因为它是在运行时决定的,而不是在编译时决定的,所以你的下一个赌注是在调试中运行程序并查看哪个对象进入someMystery,尽管您不能保证每次都获得相同类型的对象。

    PS。我的答案完全基于我对该主题的java理解,不能说它是否也适用于scala。

答案 4 :(得分:0)

这可能不是您希望得到的答案。

但是,引用自己

  

如果您的嵌套层次结构很深,则跟踪可能会很困难。

您是否考虑过使用composition over inheritance?也许这将消除您正在寻找的功能的需求。

答案 5 :(得分:0)

深度嵌套的层次结构听起来不太好。我理解你对此的痛苦。

当您覆盖 vals 或 defs 时,行号旁边会显示一个小圆圈,即使它来自嵌套层次结构,也会显示它的来源。按下命令键将鼠标悬停在 vals 上还会显示一个小工具提示。

这有帮助吗?

https://youtu.be/r3D9axSlBo8

答案 6 :(得分:-3)

如果您希望看到类,字段或方法,则需要将它们实现为公共。如果这是你的问题。