[jOOQ/jOOQ#15966] [jOOQ/jOOQ#15974] Another iteration
Correct order of registering tasks and configuring them. We mustn't rely on any implicit ordering of the NamedDomainObjectContainer as that might be an implementation detail subject to change at any time.
This commit is contained in:
parent
9d8d793c97
commit
ab8b9dff1e
@ -83,41 +83,40 @@ public class CodegenPlugin implements Plugin<Project> {
|
||||
configuration.configuration = NamedConfiguration.newConfiguration();
|
||||
});
|
||||
|
||||
AtomicReference<CodegenTask> all = new AtomicReference<>();
|
||||
List<NamedConfiguration> named = new ArrayList<>();
|
||||
|
||||
jooq.getExecutions().configureEach(configuration -> {
|
||||
if (configuration.unnamed) {
|
||||
all.set(project.getTasks().create(
|
||||
CodegenTask.taskName(configuration),
|
||||
CodegenTask.class,
|
||||
configuration,
|
||||
runtimeClasspath,
|
||||
codegenClasspath
|
||||
));
|
||||
configureTask(source, configuration).execute(all.get());
|
||||
}
|
||||
else {
|
||||
project.getTasks().register(
|
||||
CodegenTask.taskName(configuration),
|
||||
CodegenTask.class,
|
||||
configuration,
|
||||
runtimeClasspath,
|
||||
codegenClasspath
|
||||
).configure(configureTask(source, configuration));
|
||||
if (!configuration.unnamed)
|
||||
named.add(configuration);
|
||||
|
||||
all.get().dependsOn(CodegenTask.taskName(configuration));
|
||||
all.get().allTask.set(true);
|
||||
}
|
||||
project.getTasks().register(
|
||||
CodegenTask.taskName(configuration),
|
||||
CodegenTask.class,
|
||||
configuration,
|
||||
runtimeClasspath,
|
||||
codegenClasspath
|
||||
).configure(configureTask(named, source, configuration));
|
||||
});
|
||||
}
|
||||
|
||||
private static Action<CodegenTask> configureTask(SourceSetContainer source, NamedConfiguration configuration) {
|
||||
private static Action<CodegenTask> configureTask(
|
||||
List<NamedConfiguration> named,
|
||||
SourceSetContainer source,
|
||||
NamedConfiguration configuration
|
||||
) {
|
||||
return task -> {
|
||||
if (configuration.unnamed) {
|
||||
task.named.addAll(named);
|
||||
|
||||
for (NamedConfiguration other : named)
|
||||
task.dependsOn(CodegenTask.taskName(other));
|
||||
}
|
||||
|
||||
task.setDescription("jOOQ code generation" + (configuration.unnamed ? " for all executions" : " for the " + configuration.name + " execution"));
|
||||
task.setGroup("jOOQ");
|
||||
|
||||
source.configureEach(sourceSet -> {
|
||||
if (sourceSet.getName().equals("main") && task.getOutputDirectory() != null)
|
||||
if (sourceSet.getName().equals("main"))
|
||||
sourceSet.getJava().srcDir(task.getOutputDirectory());
|
||||
});
|
||||
};
|
||||
|
||||
@ -37,10 +37,7 @@
|
||||
*/
|
||||
package org.jooq.codegen.gradle;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.Named;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.*;
|
||||
import org.gradle.api.file.ProjectLayout;
|
||||
import org.gradle.api.model.ObjectFactory;
|
||||
import org.gradle.api.provider.ProviderFactory;
|
||||
|
||||
@ -65,11 +65,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@CacheableTask
|
||||
public class CodegenTask extends DefaultTask {
|
||||
|
||||
private final NamedConfiguration configuration;
|
||||
private final FileCollection runtimeClasspath;
|
||||
private final FileCollection codegenClasspath;
|
||||
private final ProviderFactory providers;
|
||||
AtomicBoolean allTask = new AtomicBoolean();
|
||||
final NamedConfiguration configuration;
|
||||
final FileCollection runtimeClasspath;
|
||||
final FileCollection codegenClasspath;
|
||||
final ProviderFactory providers;
|
||||
final List<NamedConfiguration> named;
|
||||
|
||||
@Inject
|
||||
public CodegenTask(
|
||||
@ -82,6 +82,7 @@ public class CodegenTask extends DefaultTask {
|
||||
this.providers = providers;
|
||||
this.runtimeClasspath = runtimeClasspath;
|
||||
this.codegenClasspath = codegenClasspath;
|
||||
this.named = new ArrayList<>();
|
||||
|
||||
// TODO: Can we optimise this without using internals?
|
||||
getOutputs().upToDateWhen(task -> false);
|
||||
@ -89,7 +90,7 @@ public class CodegenTask extends DefaultTask {
|
||||
|
||||
@TaskAction
|
||||
public void execute(InputChanges changes) throws Exception {
|
||||
if (!allTask.get()) {
|
||||
if (named.isEmpty()) {
|
||||
ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
|
||||
URLClassLoader pluginClassLoader = getClassLoader();
|
||||
|
||||
@ -121,7 +122,7 @@ public class CodegenTask extends DefaultTask {
|
||||
}
|
||||
|
||||
@OutputDirectory @Optional
|
||||
public Directory getOutputDirectory() {
|
||||
public Property<Directory> getOutputDirectory() {
|
||||
return configuration.outputDirectory;
|
||||
}
|
||||
|
||||
|
||||
@ -42,6 +42,7 @@ import org.gradle.api.Project;
|
||||
import org.gradle.api.file.Directory;
|
||||
import org.gradle.api.file.ProjectLayout;
|
||||
import org.gradle.api.model.ObjectFactory;
|
||||
import org.gradle.api.provider.Property;
|
||||
import org.jooq.codegen.GenerationTool;
|
||||
import org.jooq.meta.jaxb.Configuration;
|
||||
import org.jooq.meta.jaxb.Generator;
|
||||
@ -65,7 +66,7 @@ public class NamedConfiguration {
|
||||
final String name;
|
||||
boolean unnamed;
|
||||
Configuration configuration;
|
||||
Directory outputDirectory;
|
||||
Property<Directory> outputDirectory;
|
||||
|
||||
@Inject
|
||||
public NamedConfiguration(
|
||||
@ -80,6 +81,7 @@ public class NamedConfiguration {
|
||||
this.name = name;
|
||||
this.unnamed = false;
|
||||
this.configuration = newConfiguration();
|
||||
this.outputDirectory = objects.directoryProperty();
|
||||
}
|
||||
|
||||
static final Configuration newConfiguration() {
|
||||
@ -117,7 +119,7 @@ public class NamedConfiguration {
|
||||
if (defaultTarget())
|
||||
configuration.getGenerator().getTarget().setDirectory("build/generated-sources/jooq");
|
||||
|
||||
outputDirectory = layout.getProjectDirectory().dir(target.getDirectory());
|
||||
outputDirectory.value(layout.getProjectDirectory().dir(target.getDirectory()));
|
||||
}
|
||||
|
||||
boolean defaultTarget() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user