RFR: 8376534: Source launcher instantiates wrong class on inherited instance main

Jonathan László Lampérth jlamperth at openjdk.org
Tue Feb 3 20:53:56 UTC 2026


Fix a bug where, for inherited instance main methods, the source launcher attempts to invoke main on an instance of the superclass/superinterface that declares main, instead of on an instance of the inheriting class.

<details closed>
  <summary>Failure Example</summary>


// A.java
class A extends B {}
​
// B.java
class B {
    void main() {
        System.out.println(getClass().getName());
    }
}



$ java A.java
B // expected "A" here
​
$ java B.java
B
``` 
</details>

Note: There is still an issue with inheriting main from a different package in modular mode, which will be handled separately [JDK-8377010](https://bugs.openjdk.org/browse/JDK-8377010)

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

Commit messages:
 - Ensure source launcher instantiates correct class for inherited main

Changes: https://git.openjdk.org/jdk/pull/29550/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29550&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8376534
  Stats: 62 lines in 2 files changed: 51 ins; 4 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/29550.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29550/head:pull/29550

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


More information about the compiler-dev mailing list