Затмение иерархии вызовов лямбда - PullRequest
3 голосов
/ 10 марта 2019

Я думаю, что прошло 5 лет с тех пор, как Lambda была выпущена для Java.

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) {

}

Когда я нажимаю CTRL-ALT-H - (открытая иерархия вызовов) в методе inner1, я ожидаю увидеть трассировку всего стека от метода inner1 до main. Вместо этого мой staktrace обрезается по методу inner. Я только что загрузил новейшее Eclipse, я думаю, это 2018-12, ранее я использовал Mars.

enter image description here Intellij может показать мне ожидаемую иерархию вызовов, и я не совсем понимаю, почему Eclipse все еще не может этого сделать. Не уверен, что кто-то еще использует Eclipse в 2019 году, но, возможно, вы можете посоветовать плагин или что-то еще.

Переключение на Intellij не вариант, я пробовал пару раз, но эту привычку трудно преодолеть.

UPDATE

Есть похожее - ТАК вопрос

Во время выполнения вычисление лямбда-выражения аналогично вычисление выражения создания экземпляра класса, насколько обычно Завершение производит ссылку на объект. Оценка лямбды выражение отличается от выполнения лямбда-тела.

и

Просто обратите внимание, что для лямбда-выражений, реализующих такие типы библиотек, как Потребитель, количество звонящих в accept (T) в рабочей области может легко становится неуправляемым, похожим на любую иерархию вызовов, например, Runnable.run () - но это не ставит под сомнение общую полезность иерархий вызовов через лямбды.

Меня не волнует внутреннее лямбда-выражение, каким-то образом другая IDE способна показать ожидаемую трассировку стека

1 Ответ

2 голосов
/ 10 марта 2019

Существует существующая старая ошибка для затмения, о которой было сообщено в 2016 году, и которая по-прежнему находится в НОВОМ состоянии

Ошибка 498498 - [1.8] [поиск] [иерархия вызовов] Не используется дляlambdas

Иерархия вызовов на методе bar правильно показывает использование в accept, а для accept использование не показано.Эта проблема уже существовала на Марсе.

Есть 3 голоса, чтобы исправить ее, вы можете голосовать тоже

Из ссылок вашего редактирования есть ещесоответствующая старая ошибка в статусе NEW

Ошибка 468561 - [поиск] Иерархия вызовов прекращает поиск в цепочке лямбда с двойным вложением

при 3 голосах тоже ...

...