diff --git a/src/main/java/dev/jbang/catalog/Catalog.java b/src/main/java/dev/jbang/catalog/Catalog.java index 0d41e23b3..85c4bf593 100644 --- a/src/main/java/dev/jbang/catalog/Catalog.java +++ b/src/main/java/dev/jbang/catalog/Catalog.java @@ -20,12 +20,16 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; import dev.jbang.Settings; import dev.jbang.cli.ExitException; @@ -54,6 +58,202 @@ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationConte } } + // Custom deserializers to avoid final field mutation warnings in Java 26+ + + public static class CatalogRefDeserializer implements JsonDeserializer { + @Override + public CatalogRef deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + JsonObject obj = json.getAsJsonObject(); + + String catalogRef = obj.has("catalog-ref") ? obj.get("catalog-ref").getAsString() + : obj.has("catalogRef") ? obj.get("catalogRef").getAsString() + : null; + String description = obj.has("description") ? obj.get("description").getAsString() : null; + Boolean importItems = obj.has("import") ? obj.get("import").getAsBoolean() : null; + + // Catalog will be set manually after deserialization (it's transient) + return new CatalogRef(catalogRef, description, importItems, null); + } + } + + public static class TemplateDeserializer implements JsonDeserializer