On Thu, 27 Mar 2025 02:26:34 GMT, Sergey Bylokhov <s...@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

Reply via email to