[lworld] RFR: 8377101: [lworld] Automatically generate value class sources based on source annotations [v4]

Joe Darcy darcy at openjdk.org
Fri Feb 27 23:48:49 UTC 2026


On Fri, 27 Feb 2026 18:45:27 GMT, David Beaumont <duke at openjdk.org> wrote:

>> Adds a new AnnotationProcessor to read the @MigratedValueClass on prospective value classes and generate the equivalent source file with the 'value' keyword at each annotated class declaration.
>> 
>> This adds new PROCESSOR_PATH variable to the compilation macro and use it for annotation processing.
>> This also requires moving the plugin discovery path to the new variable (was in classpath before) because the addition of a '--processor-path' flag disables using the classpath for plugin discovery.
>> 
>> For now this is all limited to `java.base` but that's expandable later easily. There was an issue just enabling it for all modules however (esp. `jdk.incubator` which might be special).
>> 
>> While there is currently no specific unit test for this code, if it were to fail to generate the correct value classes, a lot of other downstream tests would fail.
>
> David Beaumont has updated the pull request incrementally with one additional commit since the last revision:
> 
>   More tests and tidying

make/jdk/src/classes/build/tools/valhalla/valuetypes/GenValueClasses.java line 76:

> 74:  * we must generate sources for abstract classes, we only process one of them.
> 75:  * <ul>
> 76:  *     <li>{@code @jdk.internal.ValueBased} appears on concrete value classes.

I would have expected to the processor to process (and likely claim) both annotations. Can you say more here?

make/jdk/src/classes/build/tools/valhalla/valuetypes/GenValueClasses.java line 92:

> 90: 
> 91:     @Override
> 92:     public synchronized void init(ProcessingEnvironment processingEnv) {

Was there a reason using the Filer API was ruled out?

make/jdk/src/classes/build/tools/valhalla/valuetypes/GenValueClasses.java line 141:

> 139:             if (!e.getKind().isClass()) {
> 140:                 throw new IllegalStateException(
> 141:                         "Unexpected element kind (" + e.getKind() + ") for element: " + e);

Was using the Messager to emit an error here considered and rejected?

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/2180#discussion_r2866652700
PR Review Comment: https://git.openjdk.org/valhalla/pull/2180#discussion_r2866653828
PR Review Comment: https://git.openjdk.org/valhalla/pull/2180#discussion_r2866657994


More information about the valhalla-dev mailing list