Ok, adding notes here for what I ran into.
The problem with adding the methods to the proxy modules is fairly simple: they interfere with dispatch. Interface methods do not really exist for dispatch purposes; they're only used for Java method resolution at compile time.
I tried a number of approaches:
- If I install dummy methods on the proxies that just redispatch to super, it interferes with class hierarchies where the same interface is implemented at different levels in different ways. It also fails to work for class hierarchies where the implementation is inherited from a class that does not implement the interface.
- If I install special methods that can't be used for dispatch purposes, method caching breaks because we have "false" methods in the lookup chain.
There were other variations but ultimately having the methods exist on the proxies as real Ruby methods always ran into chicken/egg scenarios that broke dispatching.
The best we might be able to do is provide standard class-level utilities for querying Java methods separate from Ruby methods. This is still an open question...I'll leave it up to Tom whether to keep it an open bug.