Eclipse 调用层次结构 lambda

Ant*_*ton 7 eclipse java-8 java-stream

我认为自 Lambda 为 Java 发布以来已经过去了 5 年。

public static void main(String[] args) {
    go();
}

private static void go() {
    Set<String> set = new HashSet<>();
    set.stream().forEach((s) -> {
        inner(s);
    });
}

private static void inner(String s) {
    inner1(s);
}

private static void inner1(String s) {

}
Run Code Online (Sandbox Code Playgroud)

当我在inner1方法上按 CTRL-ALT-H -(打开调用层次结构)时,我希望看到从 in inner1tomain方法的整个堆栈跟踪。相反,我的 staktrace 是在inner方法上修剪的。我刚刚下载了最新的 Eclipse,我认为是 2018-12 年,之前我使用的是 Mars。

在此处输入图片说明 Intellij 可以向我展示预期的调用层次结构,我真的不明白为什么 Eclipse 仍然不能做到这一点。不确定是否还有其他人在 2019 年使用 Eclipse,但也许您可以建议一个插件或其他东西。

切换到 Intellij 不是一种选择,我尝试了几次,但这个习惯很难克服。

更新

有类似的 - 所以问题

在运行时,对 lambda 表达式的求值类似于对类实例创建表达式的求值,因为正常完成会生成对对象的引用。对 lambda 表达式的评估与 lambda 主体的执行不同。

请注意,对于实现诸如 Consumer 之类的库类型的 lambda,工作区中进入 accept(T) 的调用者数量可能很容易变得无法管理,类似于通过例如 Runnable.run() 的任何调用层次结构 - 但这并没有问题通过 lambda 调用层次结构的一般用途。

我并不真正关心 lambda 内部,不知何故其他 IDE 能够显示预期的堆栈跟踪

use*_*900 3

Eclipse存在一个旧 bug ,于 2016 年报告,仍处于 NEW 状态

Bug 498498 - [1.8][搜索][调用层次]没有使用 lambda

bar 方法上的调用层次结构正确显示了接受中的用法,并且对于接受,没有显示用法。这个问题在火星上已经存在。

有 3 票修复,你也可以投票

从您的编辑链接中,还有另一个处于新状态的相关旧错误

Bug 468561 - [搜索]调用层次结构停止在双重嵌套 lambda 链中搜索

也有3票...