diff --git a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenPlugin.java b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenPlugin.java index 980f95f495..c94eb9b9f8 100644 --- a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenPlugin.java +++ b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenPlugin.java @@ -75,7 +75,6 @@ public class CodegenPlugin implements Plugin { jooq.getExecutions().create("", configuration -> { configuration.unnamed = true; - configuration.configuration = NamedConfiguration.init(new org.jooq.meta.jaxb.Configuration()); }); List named = new ArrayList<>(); diff --git a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenTask.java b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenTask.java index d35d7dbf88..fcc3f6fe2e 100644 --- a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenTask.java +++ b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/CodegenTask.java @@ -98,7 +98,7 @@ public class CodegenTask extends DefaultTask { // This is the approach that worked well for the Maven plugin. // There's probably a better way in Gradle. Thread.currentThread().setContextClassLoader(pluginClassLoader); - GenerationTool.generate(configuration.configuration); + GenerationTool.generate(configuration.getConfiguration()); } finally { @@ -111,7 +111,7 @@ public class CodegenTask extends DefaultTask { @Input public Provider getInput() { return providers.provider(() -> - configuration.configuration.toString() + configuration.getConfiguration().toString() ); } @@ -122,8 +122,8 @@ public class CodegenTask extends DefaultTask { @OutputDirectories public List getOutputDirectory() { - if (named.isEmpty() && configuration.outputDirectorySet) - return Arrays.asList(configuration.outputDirectory); + if (named.isEmpty() && configuration.getOutputDirectory() != null) + return Arrays.asList(configuration.getOutputDirectory()); else return Arrays.asList(); } 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 c4cd382f97..bde982ab64 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 @@ -63,14 +63,15 @@ import java.io.File; */ public class NamedConfiguration { - final ObjectFactory objects; - final Project project; - final ProjectLayout layout; - final String name; - boolean unnamed; - Configuration configuration; - DirectoryProperty outputDirectory; - boolean outputDirectorySet; + final ObjectFactory objects; + final Project project; + final ProjectLayout layout; + final String name; + Action action; + boolean unnamed; + private Configuration configuration; + private DirectoryProperty outputDirectory; + private boolean outputDirectorySet; @Inject public NamedConfiguration( @@ -98,13 +99,22 @@ public class NamedConfiguration { return name; } + DirectoryProperty getOutputDirectory() { + executeAction(); + return outputDirectorySet ? outputDirectory : null; + } + public Configuration getConfiguration() { + executeAction(); return configuration; } void configuration0(Configuration configuration) { - if (!unnamed) - this.configuration = MiniJAXB.append(copy(project.getExtensions().getByType(CodegenPluginExtension.class).defaultConfiguration().configuration), copy(this.configuration)); + if (!unnamed) { + NamedConfiguration defaultConfiguration = project.getExtensions().getByType(CodegenPluginExtension.class).defaultConfiguration(); + defaultConfiguration.executeAction(); + this.configuration = MiniJAXB.append(copy(defaultConfiguration.configuration), copy(this.configuration)); + } this.configuration = MiniJAXB.append(copy(configuration), copy(this.configuration)); } @@ -114,30 +124,37 @@ public class NamedConfiguration { } public void configuration(Action action) { - ConfigurationExtension c = objects.newInstance(ConfigurationExtension.class, objects); - init(c); - action.execute(c); - configuration0(c); - - // [#15944] Override default target directory - Target target = configuration.getGenerator().getTarget(); - - if (defaultTarget()) - target.setDirectory("build/generated-sources/jooq"); - - String directory = target.getDirectory(); - - // [#16133] Make sure the CodegenTask's OutputDirectory takes into account any basedir config - if (configuration.getBasedir() == null) - configuration.setBasedir(layout.getProjectDirectory().getAsFile().getAbsolutePath()); - else if (!new File(directory).isAbsolute()) - directory = new File(configuration.getBasedir(), directory).getAbsolutePath(); - - outputDirectory.value(layout.getProjectDirectory().dir(directory)); - outputDirectorySet = true; + this.action = action; } - boolean defaultTarget() { + void executeAction() { + if (action != null) { + ConfigurationExtension c = objects.newInstance(ConfigurationExtension.class, objects); + init(c); + action.execute(c); + configuration0(c); + + // [#15944] Override default target directory + Target target = configuration.getGenerator().getTarget(); + + if (defaultTarget()) + target.setDirectory("build/generated-sources/jooq"); + + String directory = target.getDirectory(); + + // [#16133] Make sure the CodegenTask's OutputDirectory takes into account any basedir config + if (configuration.getBasedir() == null) + configuration.setBasedir(layout.getProjectDirectory().getAsFile().getAbsolutePath()); + else if (!new File(directory).isAbsolute()) + directory = new File(configuration.getBasedir(), directory).getAbsolutePath(); + + outputDirectory.value(layout.getProjectDirectory().dir(directory)); + outputDirectorySet = true; + action = null; + } + } + + private boolean defaultTarget() { // [#15944] Override default target directory Target target = configuration.getGenerator().getTarget();