[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: Re: RFR: 8216324: GetClassMethods is confused by the presence of default methods in super interfaces
From: Alex Menkov <alexey.menkov () oracle ! com>
Date: 2020-07-23 19:50:53
Message-ID: 40766da3-17ea-3226-ecd6-cee3fa5528dd () oracle ! com
[Download RAW message or body]
+1
--alex
On 07/23/2020 12:28, serguei.spitsyn@oracle.com wrote:
> Hi Daniil,
>
> The update looks good to me.
>
> Thanks,
> Serguei
>
>
> On 7/23/20 11:32, Daniil Titov wrote:
> > Hi Serguei and Alex,
> >
> > Please review a new version of the webrev [1] that includes the
> > changes Serguei suggested. This version also has new test renamed
> > from DefaultMethods.java to OverpassMethods.java to avoid warnings
> > during the build about conflict with native library for
> > runtime/jni/8033445/DefaultMethods.java test.
> >
> > [1] http://cr.openjdk.java.net/~dtitov/8216324/webrev.04/
> >
> > Thank you,
> > Daniil
> >
> > From: "serguei.spitsyn@oracle.com" <serguei.spitsyn@oracle.com>
> > Date: Tuesday, July 21, 2020 at 10:53 PM
> > To: Daniil Titov <daniil.x.titov@oracle.com>, Alex Menkov
> > <alexey.menkov@oracle.com>, serviceability-dev
> > <serviceability-dev@openjdk.java.net>
> > Subject: Re: RFR: 8216324: GetClassMethods is confused by the presence
> > of default methods in super interfaces
> >
> > Hi Daniil,
> >
> > Thank you for the update!
> > It looks good to me.
> >
> > Just two more minor comments and no need for another webrev you
> > address them.
> > 2519 int skipped = 0; // skip default methods
> > Saying "overpass methods" would be more precise.
> > 47 printf("Enabled capability: maintain_original_method_order:
> > true\n");
> > It is better to get rid of ": true" at the end (sorry, I missed this
> > in my previous suggestion).
> > Enabling capability means it is set to true.
> >
> >
> > Thanks,
> > Serguei
> >
> >
> > On 7/21/20 20:25, Daniil Titov wrote:
> > Hi Serguei and Alex,
> >
> > Please, review new version of the change [1] that includes changes as
> > Serguei suggested.
> >
> > 114 default void default_method() { } // should never be seen
> > The comment above is not clear. Should never be seen in what context?
> > This method should not be included in the list of methods
> > GetClassMethods returns for the sub-interface or implementing class.
> > I don't think we want to comment each method in the test interfaces
> > declared in this test when they should be seen in this test and when
> > they should not. This information already exists in getclmthd007.cpp,
> > thus I decided to omit this comment.
> >
> > Please see below the output from the new test.
> >
> > <skipped>
> > ----------messages:(4/215)----------
> > command: main -agentlib:DefaultMethods DefaultMethods
> > reason: User specified action: run main/othervm/native
> > -agentlib:DefaultMethods DefaultMethods
> > Mode: othervm [/othervm specified]
> > elapsed time (seconds): 0.241
> > ----------configuration:(0/0)----------
> > ----------System.out:(3/265)----------
> > Reflection getDeclaredMethods returned: [public abstract
> > java.lang.String DefaultMethods$Child.method2()]
> > JVMTI GetClassMethods returned: [public abstract java.lang.String
> > DefaultMethods$Child.method2()]
> > Test passed: Got expected output from JVMTI GetClassMethods!
> > ----------System.err:(1/15)----------
> > STATUS:Passed.
> >
> > <skipped>
> >
> > ----------messages:(4/276)----------
> > command: main -agentlib:DefaultMethods=maintain_original_method_order
> > DefaultMethods
> > reason: User specified action: run main/othervm/native
> > -agentlib:DefaultMethods=maintain_original_method_order DefaultMethods
> > Mode: othervm [/othervm specified]
> > elapsed time (seconds): 0.25
> > ----------configuration:(0/0)----------
> > ----------System.out:(4/322)----------
> > Enabled capability: maintain_original_method_order: true
> > Reflection getDeclaredMethods returned: [public abstract
> > java.lang.String DefaultMethods$Child.method2()]
> > JVMTI GetClassMethods returned: [public abstract java.lang.String
> > DefaultMethods$Child.method2()]
> > Test passed: Got expected output from JVMTI GetClassMethods!
> > ----------System.err:(1/15)----------
> > STATUS:Passed.
> >
> >
> > [1] http://cr.openjdk.java.net/~dtitov/8216324/webrev.02/
> >
> > Thanks,
> > Daniil
> >
> > From: mailto:serguei.spitsyn@oracle.com mailto:serguei.spitsyn@oracle.com
> > Date: Monday, July 20, 2020 at 6:48 PM
> > To: Alex Menkov mailto:alexey.menkov@oracle.com, Daniil Titov
> > mailto:daniil.x.titov@oracle.com, serviceability-dev
> > mailto:serviceability-dev@openjdk.java.net
> > Subject: Re: RFR: 8216324: GetClassMethods is confused by the presence
> > of default methods in super interfaces
> >
> > Hi Daniil,
> >
> > The fix looks pretty good to me.
> >
> > Just minor comments.
> >
> >
> > http://cr.openjdk.java.net/~dtitov/8216324/webrev.01/src/hotspot/share/prims/jvmtiEnv.cpp.frames.html \
> >
> > 2519 int skipped = 0; // skip default methods from superinterface
> > (see JDK-8216324)
> >
> > You can say just: // skip overpass methods
> > There is probably no need to list the bug number.
> >
> > 2523 // Depending on can_maintain_original_method_order capability
> > 2524 // use the original method ordering indices stored in the
> > class, so we can emit
> > 2525 // jmethodIDs in the order they appeared in the class file
> > 2526 // or just copy in any order
> > Could you, please re-balance the comment a little bit?
> > Also, the comment has to be terminated with a dot.
> > Replace: "or just copy in any order" => "or just copy in current order".
> >
> >
> > http://cr.openjdk.java.net/~dtitov/8216324/webrev.01/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassMethods/getclmthd007.java.frames.html \
> >
> > 114 default void default_method() { } // should never be seen
> > The comment above is not clear. Should never be seen in what context?
> > 117 interface OuterInterface1 extends DefaultInterface {
> > An extra space before "extends".
> >
> >
> > http://cr.openjdk.java.net/~dtitov/8216324/webrev.01/test/hotspot/jtreg/serviceability/jvmti/GetClassMethods/InterfaceDefMethods.java.html \
> >
> >
> > I like the test simplicity.
> > Default methods are always in interfaces.
> > I'd suggest to rename the test to something like: DefaultMethods.java
> > or OverpassMethods.java.
> >
> >
> > http://cr.openjdk.java.net/~dtitov/8216324/webrev.01/test/hotspot/jtreg/serviceability/jvmti/GetClassMethods/libInterfaceDefMethods.cpp.html \
> >
> > 44 if (options != NULL && strcmp(options,
> > "maintain_original_method_order") == 0) {
> > 45 printf("maintain_original_method_order: true\n");
> > ...
> > 54 } else {
> > 55 printf("maintain_original_method_order: false\n");
> > I'd suggest to remove the lines 54 and 55 and adjust the line 45:
> > printf("Enabled capability: maintain_original_method_order: true\n");
> > 88 jobject m = env->ToReflectedMethod(klass, methods[i],
> > (modifiers & 8) == 8);
> > It is better to replace 8 with a symbolic constant.
> >
> >
> > Thanks,
> > Serguei
> >
> >
> > On 7/20/20 16:57, Alex Menkov wrote:
> > Looks good to me :)
> > Thanks for handling this.
> >
> > --alex
> >
> > On 07/20/2020 12:00, Daniil Titov wrote:
> >
> > Please review change [1] that fixes GetClassMethods behavior in cases
> > if a default method is present in a super interface. Currently for
> > such cases the information GetClassMethods returns for the
> > sub-interface or implementing class incorrectly includes inherited
> > not default methods.
> >
> > The fix ( thanks to Alex for providing this patch) ensures that
> > overpass methods are filtered out in the returns. The fix also
> > applies a change in the existing test as David suggested in the
> > comments to the issue [2].
> >
> > Testing: Mach5 tier1-tier3 tests successfully passed.
> >
> > [1] http://cr.openjdk.java.net/~dtitov/8216324/webrev.01/
> > [2] https://bugs.openjdk.java.net/browse/JDK-8216324
> >
> > Thank you,
> > Daniil
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic