On 10/10/16 7:55 PM, David Holmes wrote:
Turns out the only place changes were needed were in JDI.

Bug: https://bugs.openjdk.java.net/browse/JDK-8165827

webrev: http://cr.openjdk.java.net/~dholmes/8165827/webrev/

src/jdk.jdi/share/classes/com/sun/jdi/ObjectReference.java
    No comments. (Thanks for also fixing the typo.)

src/jdk.jdi/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java
    L352:         if (isNonVirtual(options)) {
    L353:             if (method.isAbstract()) {
L354: throw new IllegalArgumentException("Abstract method");
    L355:             }
        Any particular reason for breaking the logic into two
        distinct if-statements?

        Perhaps:

                  if (isNonVirtual(options) && method.isAbstract()) {
throw new IllegalArgumentException("Abstract method");
                  }

        Also, perhaps "unexpected Abstract method" is more clear?

test/com/sun/jdi/InterfaceMethodsTest.java
    L526:             if (t.getClass() != expectedException) {
    L527:                 System.err.println("--- FAILED");
    L528:                 failure("FAILED: " + t);
    L529:                 return null;
    L530:             }
        You should also report the expectedException value here to
        aid in failure analysis.

Thumbs up! I don't need to see another webrev if you decide to
make the above small tweaks.

Dan



The spec change in ObjectReference is very simple and there is a CCC request in progress to ratify that change.

The implementation change in ObjectReferenceImpl mirrors the updated spec and use the same format as already present in the class version of the check method.

The test is a little more complex. This is obviously an extension to what is already tested in InterfaceMethodsTest. However IMT has a number of problem with the way it is currently written [1] - specifically it doesn't properly separate method lookup from method invocation. So I've added the capability to separate lookup and invocation for use with the private interface methods - I have not tried to address shortcomings of the existing tests. Though I did fix the return value checking logic! And did some clarifying comments and renaming in a couple of place.

Still on the test I can't add the negative tests I would like to add because they actually pass due to a different long standing bug in JDI - [2]. So the actual private interface method testing is very simple: can I get the Method from the InterfaceType for the interface declaring the method? Can I then invoke that method on an instance of a class that implements the interface.

Thanks,
David

[1] https://bugs.openjdk.java.net/browse/JDK-8166453
[2] https://bugs.openjdk.java.net/browse/JDK-8167416

Reply via email to