From 303cfefa999126b1d37bb14dbf210654ce34c6ed Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 11 Jan 2024 09:35:34 +0100 Subject: [PATCH] [jOOQ/jOOQ#15966] [jOOQ/jOOQ#15974] Copy default configuration MiniJAXB doesn't deep clone the appended objects, so we end up using shared mutable state (see [jOOQ/jOOQ#16056]). This must be avoided, otherwise, each execution updates the common shared default configuration, which is certainly not what we want. --- .../java/org/jooq/codegen/gradle/NamedConfiguration.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/NamedConfiguration.java b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/NamedConfiguration.java index c69a65edb7..5761db41d0 100644 --- a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/NamedConfiguration.java +++ b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/NamedConfiguration.java @@ -100,11 +100,15 @@ public class NamedConfiguration { void configuration0(Configuration configuration) { if (!unnamed) - MiniJAXB.append(this.configuration, project.getExtensions().getByType(CodegenPluginExtension.class).defaultConfiguration().configuration); + MiniJAXB.append(this.configuration, copy(project.getExtensions().getByType(CodegenPluginExtension.class).defaultConfiguration().configuration)); MiniJAXB.append(this.configuration, configuration); } + static Configuration copy(Configuration configuration) { + return MiniJAXB.unmarshal(MiniJAXB.marshal(configuration), Configuration.class); + } + public void configuration(Action action) { ConfigurationExtension c = objects.newInstance(ConfigurationExtension.class, objects); action.execute(c);