繁体   English   中英

Eclipse 调用层次结构 lambda

[英]Eclipse call hierarchy lambda

我认为自 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) {

}

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

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

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

更新

有类似的 - 所以问题

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

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

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

2016年报道的eclipse存在旧的bug ,仍然处于NEW状态

错误498498 - [1.8] [搜索] [调用层次结构] lambda没有用法

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

有3票可以解决它,你也可以投票

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

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

还有3票......

Eclipse 4.22(2021 年第四季度)应该有助于:

改进了调用层次结构视图中的 lambda 支持

Call Hierarchy 视图得到了增强,不仅显示了 lambda 函数的调用者,还显示了声明函数的调用者。

对于以下代码:

示例代码

检查 function() 的调用者将显示:

CallHierarchy 结果

树中的[declaration]节点是新添加的,它显示了definer()函数的调用definer() ,在这种情况下,只有main()函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM