Consider these classes:

package p;
public class Lib {
    void main(String... args) {
        System.err.println("Lib!");
    }
}

and:

import p.Lib;
public class Main extends Lib {
    public void main() {
        System.err.println("Main!");
    }
}


Note the classes are in different packages. Running this on JDK 26 yields:

$ jdk-26/bin/java Main.java
Lib!


that is not correct - the method `Lib.main(String[])` is package private, and 
is not inherited to `Main`, i.e. not a member of `Main`, and hence the launcher 
should not use it. The launcher should only inspect methods that are members 
(direct or inherited) of `Main`.

This PR fixes that by only using package-private methods in they are declared 
in the same class as is the main class. Testing is enhanced to cover all 
related cases I/we were able to find.

-------------

Commit messages:
 - Adding bug number.
 - Merge remote-tracking branch 'upstream-ssh/master' into JDK-8377004
 - Adding more testcases.
 - 8377004: Java Launcher allows inheriting a package-private main from another 
package

Changes: https://git.openjdk.org/jdk/pull/30221/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30221&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8377004
  Stats: 227 lines in 2 files changed: 211 ins; 5 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/30221.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/30221/head:pull/30221

PR: https://git.openjdk.org/jdk/pull/30221

Reply via email to