I'm worry that we are missing the big picture here, bridging by the VM is one way to patch the vtable, there is another feature we need which is also equivalent to paching the vtable, the where condition, the method specialization where a generic method is replaced by a specific version depending on the value of the type arguments.

We're not missing that picture; we're just separating the two issues.

But, bridging is _not_ just about patching the vtable.  As outlined here, it is about _redirecting_ before selection time. Compiler-generated bridges can only operate at selection time; forwarding bridges can also operate at resolution time, eliminating the problem of "stale" bridging code (and enabling bridging for fields.)


Note that if instead of a forwardeeType being a descriptor, we use a constant method handle, we have the semantics of the lambda metafactory when there is no captured values.

Right, but that only handles the part where you actually want to invoke the bridge.  It doesn't address the resolution-time option of not calling that method _at all_, but instead calling a different method.  (Method handles already have their invocation mode built in.)


Reply via email to