36

如果“Open Call Hierarchy”被破坏(项目中的每个方法都为空),我该怎么办?它只显示我想查看调用层次结构的方法的名称。我尝试的所有方法都会发生这种情况,即使它们都被其他方法调用。

它对于代码导航非常有用。没有它我不知道怎么工作!

我试过了:

  1. 开幕式eclipse.exe -clean -refresh
  2. 重启 Eclipse
  3. 关闭和重新打开项目
  4. 更新项目
  5. 重命名 .metadata 文件

我检查过它是否搜索了整个工作区,并且没有过滤器。

4

12 回答 12

34

以下可能会有所帮助:

  • 调用 eclipse 会eclipse.exe -clean -refresh强制 Eclipse 重建索引。之后,该功能再次起作用。
  • 关闭并重新打开项目。
于 2013-08-16T07:32:03.863 回答
16

我也尝试了上面的建议,以及这里给出的提示:http: //mschrag.blogspot.co.at/2009/01/open-type-cant-find-your-class.html

直到今天,当我发现我是一头驴子时,什么都没有起作用……我曾经在“调用层次结构”视图中配置了一个过滤器,因此没有显示任何条目,因为被过滤掉了。一旦我删除/禁用过滤器,一切都会再次正常工作。

于 2014-10-13T07:17:21.687 回答
7

当您查看此问题的eclipse 错误报告时,有人说,您应该在市场上安装Java 12 support.
当我安装它时,它又可以正常工作了

于 2019-05-23T12:23:52.053 回答
1

此外,您可以尝试删除工作区并重新创建它。确保备份所有项目。

于 2014-01-17T09:17:52.353 回答
1

对于 Kepler 和 PDT (PHP IDE),它至少在 PDT 3.2.0 和 3.3.0 中被破坏(都试过了)。修复在 3.3.1 中,更新到这就是我必须做的所有事情,让调用层次结构再次工作。

(抱歉,我还不允许添加评论,但这对许多人来说应该很方便)

于 2014-09-19T13:15:47.067 回答
1

就我而言,我的工作空间似乎被污染了。

打开/关闭项目并从 clean 开始没有修复。我不得不开始一个新的工作空间。

Fedora 20,Eclipse 开普勒。

于 2014-10-10T14:46:10.000 回答
0

我对 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) 将解决这个问题。

于 2016-01-12T12:36:24.000 回答
0

就我而言,我试图在抽象类的派生类中获取方法的调用层次结构。请求的方法在基类中声明为抽象的。当我直接在抽象方法而不是实现的方法上打开调用层次结构时,一切正常。(日食霓虹灯)。

于 2016-08-30T11:58:20.623 回答
0

我的问题是 Open Call Hierarchy 只搜索项目而不是整个工作区。所以我必须在调用层次结构视图中单击小向下箭头(在右侧的调用层次结构视图窗口中;它是“视图菜单”箭头——一个向下的三角形),设置搜索范围 > 工作区。

于 2017-01-04T16:00:22.630 回答
0

在这里尝试了所有答案中的所有内容,但没有一个对我有用。后来我发现这是 Eclipse 2019-03 中的一个错误(https://bugs.eclipse.org/bugs/show_bug.cgi?id=545293)。尝试升级您的 Eclipse 或安装更新的版本。对我来说,安装更新版本(最新版本 Eclipse 2019-09)解决了这个问题。

于 2019-10-17T09:35:52.803 回答
0
于 2020-01-10T15:57:01.663 回答
-1

如果调用 Hierarchy 没有打开,可能是因为项目没有作为 java 项目导入,而是显示在文件结构中。您可能希望通过以下方式启用项目方面:

right click on the project -> project facet.  

如果您没有看到任何列出的内容,则需要

configure the project facet -> Apply -> ok. 
于 2019-03-27T09:06:50.797 回答