codegen-java: Support not annotating constructor parameters (#792)

Motivation:
Spring Boot configuration classes neither require nor benefit from annotating constructor parameters with their name.
The same is true for pkl-config-java configuration classes compiled with `-parameter`.

Changes:
- Change CLI parameter `--params-annotation` to accept a `none` value.
  This is recommended in https://clig.dev/#arguments-and-flags and is how the `-F` parameter of the `ssh` command works.
- Change `paramsAnnotation` property in Gradle plugin, CliJavaCodeGeneratorOptions, and JavaCodegenOptions as follows:
  - Change meaning of `null` from "generate org.pkl.java.config.mapper.Named annotations" to "do not generate annotations".
    This is a breaking change (only) affecting users who explicitly set the property to `null` instead of omitting it.
  - Change property default from `null` to:
    `null` if `generateSpringBootConfig` is `true` and `org.pkl.java.config.mapper.Named` otherwise
- add tests
- update docs of this and other codegen options

Result:
Generated code does not contain unnecessary annotations.
This commit is contained in:
odenix
2024-12-13 14:29:18 -08:00
committed by GitHub
parent 70aaa6322e
commit 01bf844a96
13 changed files with 185 additions and 114 deletions
@@ -192,6 +192,15 @@ public class PklPlugin implements Plugin<Project> {
spec.getGenerateGetters().convention(false);
spec.getGenerateJavadoc().convention(false);
// Not using `convention()` so that users can disable generation of
// constructor parameters annotations by setting this property to `null`.
spec.getParamsAnnotation()
.set(
project.provider(
() ->
spec.getGenerateSpringBootConfig().get()
? null
: "org.pkl.config.java.mapper.Named"));
createModulesTask(JavaCodeGenTask.class, spec)
.configure(