On 10/11/16 19:50, David Holmes wrote:
Hi Serguei,

Thanks for looking at this.

On 12/10/2016 12:37 PM, serguei.spit...@oracle.com wrote:
Hi David,

It looks good, thank you for test improvements.

One minor comment.

http://cr.openjdk.java.net/~dholmes/8165827/webrev/test/com/sun/jdi/InterfaceMethodsTest.java.frames.html

511 private Method testLookup(ReferenceType targetClass, String
methodName, String methodSig,
512 boolean declaredOnly, Class<?> expectedException) {
513
514 System.err.println("Looking up " + targetClass.name() + "." +
methodName + methodSig);
515 try {
516 Method m = declaredOnly ?
517 lookupDeclaredMethod(targetClass, methodName, methodSig) :
518 lookupMethod(targetClass, methodName, methodSig);
519
520 if (expectedException == null) {
521 System.err.println("--- PASSED");
522 return m;
523 }
524 }
525 catch (Throwable t) {
526 if (t.getClass() != expectedException) {
527 System.err.println("--- FAILED");
528 failure("FAILED: got exception " + t + " but expected exception "
529 + expectedException.getSimpleName());
530 return null;
531 }
532 else {
533 System.err.println("--- PASSED");
534 return null;
535 }
536 }
537 System.err.println("--- FAILED");
538 failure("FAILED: lookup succeeded but expected exception "
539 + expectedException.getSimpleName());
540 return null;
541 }

  I'd be better to keep the fragments 520-523 and 537-540 together as
they are logically bound.
  Perhaps, it is better to move the 520-523 to move before the L537.

You're right - but I prefer to move the code from L537 into an else for the if at L520. Webrev updated in place.

It's up to you.



  There are more cases to use the testLookup() in this test but it is
probably for future improvements.

Yes - see the bugs I linked as [1] and [2].

Right. Perhaps, the it is a part of the JDK-8166453.


There are even more bugs related to static interface method handling that impact this test. Bit of a can-of-worms.




  BTW, would it make sense to consider one more test case ?

  private void testImplementationClass(ReferenceType targetClass, 
ObjectReference thisObject) {
      . . .

      testInvokeNeg(targetClass,thisObject, "privateMethodB", "()I", 
vm().mirrorOf(RESULT_B),
              "private interface methods are not inheritable");

Thanks, Serguei
Thanks, David -----
Thanks, Serguei On 10/10/16 18:55, 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/ 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