【发布时间】:2014-02-09 17:30:24
【问题描述】:
环境
我有一个简单的 test-foo.jar 库,只有两个文件:
- 接口
Foo与单一方法void doStuff() - class
Bar使用单个方法void executeFoo(Foo foo),它只调用foo.doStuff()
然后我有一个 Eclipse Java 项目,它有一个类 FooImpl,它实现了 Foo。这个项目有test-foo.jar 作为构建路径条目。我没有附加此 JAR 的源代码。
问题
现在让我说我有点好奇到底是谁调用了doStuff() 方法。所以我点击FooImpl#doStuff签名并按下Ctrl+Shift+G(查找参考资料)。我希望在搜索结果中看到Bar#executeFoo,但结果实际上是空的。
问题
我有点困惑,因为我认为这在 Eclipse 中有效(现在已经使用 Eclipse 超过几年了)。但它似乎只适用于附有源代码的库(我之前没有注意到)。
有没有办法在没有附加源的情况下在项目库中查找类型(或方法)的引用(或用法)? 为什么 Eclipse 不索引并显示来自.class 文件的引用?
其他信息:
- 只要我将源代码附加到 JAR,查找参考就可以了。
- 我很想知道为什么 Eclipse JDT 开发人员决定不索引或搜索
.class没有来源。 - 请注意,即使我没有源代码,谁在调用我的方法也是非常有用的信息。
- 在我看来,Eclipse is indexing method references 在
.class文件中。 - 顺便说一下,NetBeans “不起作用”;)。
【问题讨论】:
-
@MikeKoch nope... 该问题中的 OP 不了解 Find References 功能。调用层次结构只是方法引用的不同视图。我知道(至少我认为我知道:))如何搜索参考资料。如果库没有附加源,它就不起作用。
-
如果 bar 没有引用 fooImpl.doStuff(),而是引用 foo.doStuff(),那么它将不匹配对 fooImpl.doStuff() 方法的引用的搜索。
-
只是为了好奇,你有没有试过在eclipse上安装一个Java反编译器看看是否有帮助?
-
@EvertonAgner 有帮助,但在生成源文件之前至少需要打开一个源类。但是,我对 JAD 和 JD 插件的体验都非常糟糕,因为它们通常会导致 SEGFAULT(或类似的致命问题)杀死 Eclipse。
标签: java eclipse eclipse-jdt