如果“Open Call Hierarchy”被破坏(项目中的每个方法都为空),我该怎么办?它只显示我想查看调用层次结构的方法的名称。我尝试的所有方法都会发生这种情况,即使它们都被其他方法调用。
它对于代码导航非常有用。没有它我不知道怎么工作!
我试过了:
- 开幕式
eclipse.exe -clean -refresh
- 重启 Eclipse
- 关闭和重新打开项目
- 更新项目
- 重命名 .metadata 文件
我检查过它是否搜索了整个工作区,并且没有过滤器。
如果“Open Call Hierarchy”被破坏(项目中的每个方法都为空),我该怎么办?它只显示我想查看调用层次结构的方法的名称。我尝试的所有方法都会发生这种情况,即使它们都被其他方法调用。
它对于代码导航非常有用。没有它我不知道怎么工作!
我试过了:
eclipse.exe -clean -refresh
我检查过它是否搜索了整个工作区,并且没有过滤器。
以下可能会有所帮助:
eclipse.exe -clean -refresh
强制 Eclipse 重建索引。之后,该功能再次起作用。我也尝试了上面的建议,以及这里给出的提示:http: //mschrag.blogspot.co.at/2009/01/open-type-cant-find-your-class.html
直到今天,当我发现我是一头驴子时,什么都没有起作用……我曾经在“调用层次结构”视图中配置了一个过滤器,因此没有显示任何条目,因为被过滤掉了。一旦我删除/禁用过滤器,一切都会再次正常工作。
当您查看此问题的eclipse 错误报告时,有人说,您应该在市场上安装Java 12 support
.
当我安装它时,它又可以正常工作了
此外,您可以尝试删除工作区并重新创建它。确保备份所有项目。
对于 Kepler 和 PDT (PHP IDE),它至少在 PDT 3.2.0 和 3.3.0 中被破坏(都试过了)。修复在 3.3.1 中,更新到这就是我必须做的所有事情,让调用层次结构再次工作。
(抱歉,我还不允许添加评论,但这对许多人来说应该很方便)
就我而言,我的工作空间似乎被污染了。
打开/关闭项目并从 clean 开始没有修复。我不得不开始一个新的工作空间。
Fedora 20,Eclipse 开普勒。
我对 eclipse Kepler (4.3.2) 有同样的行为。
我发现,有一个带有签名的方法的错误:
void get(Object o)
Object get(Object o)
在 eclipse错误日志视图中,我发现以下异常:
java.lang.NullPointerException
at org.eclipse.jdt.internal.core.search.matching.ClasspathSourceDirectory.directoryTable(ClasspathSourceDirectory.java:52)
at org.eclipse.jdt.internal.core.search.matching.ClasspathSourceDirectory.findClass(ClasspathSourceDirectory.java:109)
at org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment.findClass(JavaSearchNameEnvironment.java:146)
at org.eclipse.jdt.internal.core.search.matching.JavaSearchNameEnvironment.findType(JavaSearchNameEnvironment.java:185)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:145)
at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:197)
at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2799)
at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2556)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.getType(MatchLocator.java:899)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.getMethodBinding0(MatchLocator.java:955)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.getMethodBinding(MatchLocator.java:907)
at org.eclipse.jdt.internal.core.search.matching.MethodLocator.matchMethod(MethodLocator.java:327)
at org.eclipse.jdt.internal.core.search.matching.MethodLocator.resolveLevel(MethodLocator.java:664)
at org.eclipse.jdt.internal.core.search.matching.ClassFileMatchLocator.locateMatches(ClassFileMatchLocator.java:209)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.process(MatchLocator.java:1699)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1143)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1184)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1301)
at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:95)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:231)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:515)
at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:584)
at org.eclipse.jdt.internal.corext.callhierarchy.CallerMethodWrapper.findChildren(CallerMethodWrapper.java:155)
at org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper.performSearch(MethodWrapper.java:301)
at org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper.doFindChildren(MethodWrapper.java:232)
at org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper.getCalls(MethodWrapper.java:84)
at org.eclipse.jdt.internal.ui.callhierarchy.DeferredMethodWrapper.getCalls(DeferredMethodWrapper.java:65)
at org.eclipse.jdt.internal.ui.callhierarchy.DeferredMethodWrapper.fetchDeferredChildren(DeferredMethodWrapper.java:79)
at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
最后,它看起来像这个版本中的一个错误:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=401272
我认为,至少升级到版本 4.4 (Luna) 将解决这个问题。
就我而言,我试图在抽象类的派生类中获取方法的调用层次结构。请求的方法在基类中声明为抽象的。当我直接在抽象方法而不是实现的方法上打开调用层次结构时,一切正常。(日食霓虹灯)。
我的问题是 Open Call Hierarchy 只搜索项目而不是整个工作区。所以我必须在调用层次结构视图中单击小向下箭头(在右侧的调用层次结构视图窗口中;它是“视图菜单”箭头——一个向下的三角形),设置搜索范围 > 工作区。
在这里尝试了所有答案中的所有内容,但没有一个对我有用。后来我发现这是 Eclipse 2019-03 中的一个错误(https://bugs.eclipse.org/bugs/show_bug.cgi?id=545293)。尝试升级您的 Eclipse 或安装更新的版本。对我来说,安装更新版本(最新版本 Eclipse 2019-09)解决了这个问题。
如果调用 Hierarchy 没有打开,可能是因为项目没有作为 java 项目导入,而是显示在文件结构中。您可能希望通过以下方式启用项目方面:
right click on the project -> project facet.
如果您没有看到任何列出的内容,则需要
configure the project facet -> Apply -> ok.