RFR: 8347826: Introspector shows wrong method list after 8071693 [v9]
Roman Marchenko
rmarchenko at openjdk.org
Thu Mar 27 08:14:12 UTC 2025
On Thu, 27 Mar 2025 02:26:34 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
>> The last question I have is about the module system when the interface is not exported.
>
> I have tried to check various cases using the script below:
>
> #!/bin/bash
>
> rm -rf app/ bean/ classes/ bean.jar app.jar
> mkdir -p bean/closed bean/exported app/app
>
> cat <<EOF > bean/module-info.java
> module bean {
> exports bean.exported;
> }
> EOF
>
> ########################
> # non-exported classes
> ########################
> cat <<EOF > bean/closed/ClosedI.java
> package bean.closed;
>
> public interface ClosedI {
> default int getBoo() { return 0; }
> default void setBoo(int a) { }
> }
> EOF
>
> cat <<EOF > bean/closed/ClosedP.java
> package bean.closed;
>
> public class ClosedP {
> public int getToo() { return 0; }
> public void setToo(int a) { }
> }
> EOF
>
> cat <<EOF > bean/closed/ClosedNonPublic.java
> package bean.closed;
>
> class ClosedNonPublic {
> public int getNoo() { return 0; }
> public void setNoo(int a) { }
> }
> EOF
>
> ########################
> # exported classes
> ########################
> cat <<EOF > bean/exported/OpenClass.java
> package bean.exported;
>
> import bean.closed.ClosedI;
>
> public class OpenClass implements OpenI, ClosedI {
> }
> EOF
>
> cat <<EOF > bean/exported/ClassCP.java
> package bean.exported;
>
> import bean.closed.ClosedP;
>
> public class ClassCP extends ClosedP {
> }
> EOF
>
> cat <<EOF > bean/exported/OpenP.java
> package bean.exported;
>
> public class OpenP {
> public int getZoo() { return 0; }
> public void setZoo(int a) { }
> }
> EOF
>
> cat <<EOF > bean/exported/ClassOP.java
> package bean.exported;
>
> import bean.exported.OpenP;
>
> public class ClassOP extends OpenP {
> }
> EOF
>
> cat <<EOF > bean/exported/OpenI.java
> package bean.exported;
>
> public interface OpenI {
> default int getFoo() { return 0; }
> default void setFoo(int a) { }
> }
> EOF
>
> ########################
> # main app
> ########################
> cat <<EOF > app/module-info.java
> module app {
> requires bean;
> requires java.desktop;
> exports app;
> }
> EOF
>
>
> cat <<EOF > app/app/TestBean.java
> package app;
>
> import bean.exported.ClassCP;
> import bean.exported.ClassOP;
> import bean.exported.OpenClass;
>
> import java.beans.*;
> import java.io.IOException;
> import java.lang.reflect.Method;
> import java.util.Arrays;
>
> public final class TestBean {
> public static void main(String[] args) throws Exception {
> System.out.println("\n*** Check exported class implementing two interfaces: exported and closed ***");
> test(OpenClass.class);
>
> System.out.println("\n*** Check exported class extended from an exported class ***");
> test(ClassOP.class);
>
> System.out.println("\n*** Check exported class exten...
@mrserb
> getMethodDescriptors() returns all methods of the class, **including static ones**, but static methods are not considered properties
I'd like to clarify the behavior:
- Should `getMethodDescriptors()` return static methods defined in the interfaces the class extends?
- If yes, should it recursively find static methods defined in interfaces? For example, the test scenario 1 defines `static int getStaticValue()` in `A1` interface hidden in the inheritance chain. Should it be included to the method descriptor list?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/23443#discussion_r2015889794
More information about the client-libs-dev
mailing list