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