Here is my sample java code:
public class Test {
public static void main(String[] args) {
methodDepth0(
()->
methodDe
As the second picture clearly shows, Eclipse is able to trace the call hierarchy through the method call myIf.call()
inside methodDepth0
. This is correct, because the (outer) lambda implements method MyIF.call()
.
The fact that the same pattern does not work in the next nesting level looks like a bug. Please consider filing a bug for JDT/UI. TIA.
Just note, that for lambdas implementing library types like Consumer<T>
, the number of callers into accept(T)
in a workspace may easily become unmanageable, similar to any call hierarchy through, e.g, Runnable.run()
- but that doesn't question the general usefulness of call hierarchies through lambdas.
From what I can tell the lack of call hierarchy depth is due to (re)evaluation of code at runtime. It is explained in 15.27.4 Run-Time Evaluation of Lambda Expressions in the Java Language Specification.
At run time, evaluation of a lambda expression is similar to evaluation of a class instance creation expression, insofar as normal completion produces a reference to an object. Evaluation of a lambda expression is distinct from execution of the lambda body.