【问题标题】:Eclipse IDE - Open Call Hierarchy is empty/brokenEclipse IDE - 打开调用层次结构为空/损坏
【发布时间】:2013-03-10 15:29:07
【问题描述】:

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

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

我试过了:

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

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

【问题讨论】:

  • 我还发现它在编辑器中不起作用,但在 PHP Explorer 中仍然有效。这很烦人,但可行。

标签: eclipse eclipse-juno call-hierarchy


【解决方案1】:

以下可能会有所帮助:

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

【讨论】:

  • 我今天遇到了这个问题,这个解决方案对我有用,版本:Kepler Service Release 1 Build id: 20130919-0819。
  • 我正在使用 vrapper 插件来制作类似 vim 的编辑体验,并发现在安装此插件后,您必须在编辑器中突出显示整个函数名称(双击它),然后它有效
  • 不适用于我:版本:Luna Release (4.4.0) Build id:20140612-0600
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    (抱歉,我还不能添加 cmets,但这对很多人来说应该很方便)

    【讨论】:

      【解决方案4】:

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

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

      Fedora 20,Eclipse 开普勒。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 谢谢。我的问题很相似,只是由于某种原因,它将搜索范围更改为我的其他项目之一。我将其设置为 Workspace 并解决了问题。
        • 我有类似的问题,但甚至是“donkier”。我没有创建项目,但这对我来说并不明显,因为我已经从另一台计算机迁移了代码,并且我有一个远程资源管理器,正在查看源文件,源树,我什至能够进行一些调试.. . 但这并不意味着我创建了一个项目!我现在创建了项目。顺便说一句,我不得不等待很长时间才能完成所有DLTK Indexing
        • 奇怪的是,我多次看到这个答案并想,“不可能。不是我。”但不知何故,我之前设置的过滤器变得疯狂。我之前已将其设置为过滤掉来自 JUnit 的所有调用,但不知何故它现在正在剥离实际调用。我想我得看看那里发生了什么。
        【解决方案6】:

        我与 eclipse Kepler (4.3.2) 有相同的行为。

        我发现,签名为:

        void get(Object o)
        Object get(Object o)
        

        在 eclipse Error Log 视图中我发现以下异常:

        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)
        

        最后看来这个版本有bug:

        https://bugs.eclipse.org/bugs/show_bug.cgi?id=401272

        我认为,至少升级到版本 4.4 (Luna) 可以解决这个问题。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              right click on the project -> project facet.  
              

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

              configure the project facet -> Apply -> ok. 
              

              【讨论】:

              • 我的项目方面本身仍然显示错误..我已将其作为一般项目导入..它会导致问题吗?
              【解决方案10】:

              当您针对此问题访问 eclipse bug report 时,有人说,您应该在市场上安装 Java 12 support
              当我安装它时,它又可以正常工作了

              【讨论】:

              • 对于较新版本的 Eclipse,一切都再次运行,无需安装 Java 12 support
              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

                我尝试了很多答案,都很好,除了少数人之外,它帮助了很多人,而我在少数人中。

                我的eclipse版本是2019-03(4.11.0)。这是有错误的。可以通过插件修复。

                转到 Eclipse Marketplace 并搜索插件 java 12 Support for Eclipse 2019-03(4.11)… 并安装它。安装完成后重启eclipse。希望这能解决问题。祝你有美好的一天。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-01-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-21
                  • 2012-07-18
                  相关资源
                  最近更新 更多