Eclipse IDE - Open Call Hierarchy为空/已损坏

问题描述 投票:29回答:9

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

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

我试过了:

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

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

eclipse eclipse-juno call-hierarchy
9个回答
33
投票

以下可能有所帮助:

  • eclipse.exe -clean -refresh调用eclipse迫使Eclipse重建索引。之后,该功能再次起作用。
  • 关闭并重新开放项目。

-1
投票

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

right click on the project -> project facet.  

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

configure the project facet -> Apply -> ok. 

14
投票

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

直到今天我发现自己是驴子时没有任何工作......我曾在“调用层次结构”视图中配置过滤器,因此没有显示任何条目,因为已过滤掉。一旦我删除/禁用过滤器,一切都工作正常。


6
投票

当你去问这个问题的eclipse bug report时,有人说,你应该在市场上安装Java 12 support。 当我安装它时,它再次正常工作


1
投票

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


1
投票

对于Kepler和PDT(PHP IDE),它至少在PDT 3.2.0和3.3.0中被破解(两者都尝试过)。修复程序在3.3.1中,并且更新到那是我所要做的就是让调用层次结构再次运行。

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


1
投票

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

打开/关闭项目并从干净开始没有解决。我不得不开始一个新的工作区。

Fedora 20,Eclipse Kepler。


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


0
投票

在我的例子中,我试图在抽象类的派生类中获取方法的调用层次结构。请求的方法在基类中声明为abstract。当我直接在抽象方法而不是实现的方法上打开调用层次结构时,一切都运行良好。 (Eclipse Neon)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.