Default methods: Possible problem with JDWP sendMethod resolution semantics
David Holmes
david.holmes at oracle.com
Mon Jan 27 22:06:06 PST 2014
Hi Jesper,
This seems more of an issue with the hotspot runtime so cc'd hotspot-dev.
David
On 27/01/2014 11:37 PM, Jesper Steen Møller wrote:
> Hi list
>
> I realize that this is possibly not the right list, but I'm having a lambda-related problem with the JDWP protocol (from the Eclipse Java Debugger)
> The problem is that I cannot invoke the default method of an interface using the equivalent of the superclass invocation syntax. Consider this example:
>
> public interface A {
> default int getOne() {
> return 1;
> }
> }
>
> public interface B {
> default int getOne() {
> return 2;
> }
> }
>
> public class Impl implements A, B {
> public int getOne() {
> return B.super.getOne() + 3; // stop here and inspect B.super.getOne()
> }
> public static void main(String[] args) {
> Impl i = new Impl();
> System.out.println(i.getOne());
> }
> }
>
> Now, consider the line with the comment "stop here ...". Assume I have a suspended thread on that line, and I wish to inspect "B.super.getOne()", i.e. invoke the method B.getOne, using the 'this' reference as the receiver. So, I'm sending a "Invoke Method" command under the ObjectReference Command Set, like this:
>
> object - objectID of 'this'
> thread - threadID of suspended thread
> clazz - classID of 'B'
> method - methodID of 'B.getOne'
> arguments - 0
> option - 3 (this INVOKE_SINGLE_THREADED + INVOKE_NONVIRTUALINVOKE_NONVIRTUAL)
>
> However, the return value is '5' which indicates that the usual virtual call semantics were used on 'this'. Is this supposed to work? Have anyone tried this?
>
> TIA,
> Jesper
>
>
More information about the lambda-dev
mailing list