From 15ca239563f2dbec9b144dac792a3aa4b20c825d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Werner=20Fouch=C3=A9?= Date: Mon, 23 Mar 2026 21:28:49 +0200 Subject: [PATCH 1/4] fix: mutated fields cannot be final --- src/main/java/dev/jbang/catalog/Alias.java | 60 +++++++++---------- src/main/java/dev/jbang/catalog/Catalog.java | 6 +- .../java/dev/jbang/catalog/CatalogRef.java | 6 +- src/main/java/dev/jbang/catalog/Template.java | 6 +- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/main/java/dev/jbang/catalog/Alias.java b/src/main/java/dev/jbang/catalog/Alias.java index d13341fae..1294eed99 100644 --- a/src/main/java/dev/jbang/catalog/Alias.java +++ b/src/main/java/dev/jbang/catalog/Alias.java @@ -20,57 +20,57 @@ public class Alias extends CatalogItem { @SerializedName(value = "script-ref", alternate = { "scriptRef" }) - public final String scriptRef; - public final String description; - public final List arguments; + public String scriptRef; + public String description; + public List arguments; @SerializedName(value = "runtime-options", alternate = { "java-options" }) - public final List runtimeOptions; - public final List sources; + public List runtimeOptions; + public List sources; @SerializedName(value = "files") - public final List resources; - public final List dependencies; - public final List repositories; - public final List classpaths; - public final Map properties; + public List resources; + public List dependencies; + public List repositories; + public List classpaths; + public Map properties; @SerializedName(value = "java") - public final String javaVersion; + public String javaVersion; @SerializedName(value = "main") - public final String mainClass; + public String mainClass; @SerializedName(value = "module") - public final String moduleName; + public String moduleName; @SerializedName(value = "compile-options") - public final List compileOptions; + public List compileOptions; @SerializedName(value = "native-image") - public final Boolean nativeImage; + public Boolean nativeImage; @SerializedName(value = "native-options") - public final List nativeOptions; + public List nativeOptions; @SerializedName(value = "source-type") - public final String forceType; - public final Boolean integrations; - public final String jfr; - public final Map debug; - public final Boolean cds; - public final Boolean interactive; + public String forceType; + public Boolean integrations; + public String jfr; + public Map debug; + public Boolean cds; + public Boolean interactive; @SerializedName(value = "enable-preview") - public final Boolean enablePreview; + public Boolean enablePreview; @SerializedName(value = "enable-assertions") - public final Boolean enableAssertions; + public Boolean enableAssertions; @SerializedName(value = "enable-system-assertions") - public final Boolean enableSystemAssertions; + public Boolean enableSystemAssertions; @SerializedName(value = "manifest-options") - public final Map manifestOptions; + public Map manifestOptions; @SerializedName(value = "java-agents") @JsonAdapter(Catalog.SkipEmptyListSerializer.class) - public final List javaAgents; + public List javaAgents; @JsonAdapter(Catalog.SkipEmptyListSerializer.class) - public final List docs; + public List docs; public static class JavaAgent { @SerializedName(value = "agent-ref") @NonNull - public final String agentRef; + public String agentRef; @NonNull - public final String options; + public String options; public JavaAgent() { // to make gson happy in native image this(null, null); diff --git a/src/main/java/dev/jbang/catalog/Catalog.java b/src/main/java/dev/jbang/catalog/Catalog.java index 0d41e23b3..adcb52d04 100644 --- a/src/main/java/dev/jbang/catalog/Catalog.java +++ b/src/main/java/dev/jbang/catalog/Catalog.java @@ -61,7 +61,7 @@ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationConte static final String JBANG_CATALOG_REPO = "jbang-catalog"; - // HEAD at least on github gives you latest commit on default branch + // HEAD at least on GitHub gives you latest commit on default branch static final String DEFAULT_REF = "HEAD"; private static final String CACHE_BUILTIN = ":::BUILTIN:::"; @@ -74,8 +74,8 @@ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationConte public Map templates = new HashMap<>(); @SerializedName(value = "base-ref", alternate = { "baseRef" }) - public final String baseRef; - public final String description; + public String baseRef; + public String description; public transient ResourceRef catalogRef; public Catalog(String baseRef, String description, ResourceRef catalogRef, Map catalogs, diff --git a/src/main/java/dev/jbang/catalog/CatalogRef.java b/src/main/java/dev/jbang/catalog/CatalogRef.java index a54d26cd3..ff3f342b0 100644 --- a/src/main/java/dev/jbang/catalog/CatalogRef.java +++ b/src/main/java/dev/jbang/catalog/CatalogRef.java @@ -14,10 +14,10 @@ public class CatalogRef extends CatalogItem { @SerializedName(value = "catalog-ref", alternate = { "catalogRef" }) - public final String catalogRef; - public final String description; + public String catalogRef; + public String description; @SerializedName(value = "import") - public final Boolean importItems; + public Boolean importItems; CatalogRef(String catalogRef, String description, Boolean importItems, Catalog catalog) { super(catalog); diff --git a/src/main/java/dev/jbang/catalog/Template.java b/src/main/java/dev/jbang/catalog/Template.java index ba5449d6b..04d83c945 100644 --- a/src/main/java/dev/jbang/catalog/Template.java +++ b/src/main/java/dev/jbang/catalog/Template.java @@ -12,9 +12,9 @@ public class Template extends CatalogItem { @SerializedName(value = "file-refs") - public final Map fileRefs; - public final String description; - public final Map properties; + public Map fileRefs; + public String description; + public Map properties; public Template(Map fileRefs, String description, Map properties, Catalog catalog) { From ac20ebf194a9ba0965d6c12b85e97c49af5afa3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Werner=20Fouch=C3=A9?= Date: Mon, 23 Mar 2026 21:33:39 +0200 Subject: [PATCH 2/4] Spotless formatting updates --- src/main/java/dev/jbang/catalog/Alias.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/jbang/catalog/Alias.java b/src/main/java/dev/jbang/catalog/Alias.java index 1294eed99..bc9416fac 100644 --- a/src/main/java/dev/jbang/catalog/Alias.java +++ b/src/main/java/dev/jbang/catalog/Alias.java @@ -21,7 +21,7 @@ public class Alias extends CatalogItem { @SerializedName(value = "script-ref", alternate = { "scriptRef" }) public String scriptRef; - public String description; + public String description; public List arguments; @SerializedName(value = "runtime-options", alternate = { "java-options" }) public List runtimeOptions; From 06ed038d8e94c4db647665d72dc89ac12c64bb63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Werner=20Fouch=C3=A9?= Date: Tue, 24 Mar 2026 09:19:02 +0200 Subject: [PATCH 3/4] Reverted changes --- src/main/java/dev/jbang/catalog/Alias.java | 60 +++++++++---------- src/main/java/dev/jbang/catalog/Catalog.java | 6 +- .../java/dev/jbang/catalog/CatalogRef.java | 6 +- src/main/java/dev/jbang/catalog/Template.java | 6 +- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/main/java/dev/jbang/catalog/Alias.java b/src/main/java/dev/jbang/catalog/Alias.java index bc9416fac..d13341fae 100644 --- a/src/main/java/dev/jbang/catalog/Alias.java +++ b/src/main/java/dev/jbang/catalog/Alias.java @@ -20,57 +20,57 @@ public class Alias extends CatalogItem { @SerializedName(value = "script-ref", alternate = { "scriptRef" }) - public String scriptRef; - public String description; - public List arguments; + public final String scriptRef; + public final String description; + public final List arguments; @SerializedName(value = "runtime-options", alternate = { "java-options" }) - public List runtimeOptions; - public List sources; + public final List runtimeOptions; + public final List sources; @SerializedName(value = "files") - public List resources; - public List dependencies; - public List repositories; - public List classpaths; - public Map properties; + public final List resources; + public final List dependencies; + public final List repositories; + public final List classpaths; + public final Map properties; @SerializedName(value = "java") - public String javaVersion; + public final String javaVersion; @SerializedName(value = "main") - public String mainClass; + public final String mainClass; @SerializedName(value = "module") - public String moduleName; + public final String moduleName; @SerializedName(value = "compile-options") - public List compileOptions; + public final List compileOptions; @SerializedName(value = "native-image") - public Boolean nativeImage; + public final Boolean nativeImage; @SerializedName(value = "native-options") - public List nativeOptions; + public final List nativeOptions; @SerializedName(value = "source-type") - public String forceType; - public Boolean integrations; - public String jfr; - public Map debug; - public Boolean cds; - public Boolean interactive; + public final String forceType; + public final Boolean integrations; + public final String jfr; + public final Map debug; + public final Boolean cds; + public final Boolean interactive; @SerializedName(value = "enable-preview") - public Boolean enablePreview; + public final Boolean enablePreview; @SerializedName(value = "enable-assertions") - public Boolean enableAssertions; + public final Boolean enableAssertions; @SerializedName(value = "enable-system-assertions") - public Boolean enableSystemAssertions; + public final Boolean enableSystemAssertions; @SerializedName(value = "manifest-options") - public Map manifestOptions; + public final Map manifestOptions; @SerializedName(value = "java-agents") @JsonAdapter(Catalog.SkipEmptyListSerializer.class) - public List javaAgents; + public final List javaAgents; @JsonAdapter(Catalog.SkipEmptyListSerializer.class) - public List docs; + public final List docs; public static class JavaAgent { @SerializedName(value = "agent-ref") @NonNull - public String agentRef; + public final String agentRef; @NonNull - public String options; + public final String options; public JavaAgent() { // to make gson happy in native image this(null, null); diff --git a/src/main/java/dev/jbang/catalog/Catalog.java b/src/main/java/dev/jbang/catalog/Catalog.java index adcb52d04..0d41e23b3 100644 --- a/src/main/java/dev/jbang/catalog/Catalog.java +++ b/src/main/java/dev/jbang/catalog/Catalog.java @@ -61,7 +61,7 @@ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationConte static final String JBANG_CATALOG_REPO = "jbang-catalog"; - // HEAD at least on GitHub gives you latest commit on default branch + // HEAD at least on github gives you latest commit on default branch static final String DEFAULT_REF = "HEAD"; private static final String CACHE_BUILTIN = ":::BUILTIN:::"; @@ -74,8 +74,8 @@ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationConte public Map templates = new HashMap<>(); @SerializedName(value = "base-ref", alternate = { "baseRef" }) - public String baseRef; - public String description; + public final String baseRef; + public final String description; public transient ResourceRef catalogRef; public Catalog(String baseRef, String description, ResourceRef catalogRef, Map catalogs, diff --git a/src/main/java/dev/jbang/catalog/CatalogRef.java b/src/main/java/dev/jbang/catalog/CatalogRef.java index ff3f342b0..a54d26cd3 100644 --- a/src/main/java/dev/jbang/catalog/CatalogRef.java +++ b/src/main/java/dev/jbang/catalog/CatalogRef.java @@ -14,10 +14,10 @@ public class CatalogRef extends CatalogItem { @SerializedName(value = "catalog-ref", alternate = { "catalogRef" }) - public String catalogRef; - public String description; + public final String catalogRef; + public final String description; @SerializedName(value = "import") - public Boolean importItems; + public final Boolean importItems; CatalogRef(String catalogRef, String description, Boolean importItems, Catalog catalog) { super(catalog); diff --git a/src/main/java/dev/jbang/catalog/Template.java b/src/main/java/dev/jbang/catalog/Template.java index 04d83c945..ba5449d6b 100644 --- a/src/main/java/dev/jbang/catalog/Template.java +++ b/src/main/java/dev/jbang/catalog/Template.java @@ -12,9 +12,9 @@ public class Template extends CatalogItem { @SerializedName(value = "file-refs") - public Map fileRefs; - public String description; - public Map properties; + public final Map fileRefs; + public final String description; + public final Map properties; public Template(Map fileRefs, String description, Map properties, Catalog catalog) { From 962d5768e8ca5ecf92636efc030b41b66c1a42be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Werner=20Fouch=C3=A9?= Date: Tue, 24 Mar 2026 09:20:16 +0200 Subject: [PATCH 4/4] Suppress final field warnings --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index f137a8aa2..5356c1ca8 100644 --- a/build.gradle +++ b/build.gradle @@ -303,6 +303,7 @@ jar { manifest { attributes( 'Main-Class': 'dev.jbang.Main', + 'Enable-Final-Field-Mutation': 'ALL-UNNAMED', 'JBang-Version': project.version ) }