Skip to content

Commit

Permalink
Merge pull request #25631 from glefloch/fix/delayed-property-extension
Browse files Browse the repository at this point in the history
Leverage delayed property in Gradle extension plugin
  • Loading branch information
aloubyansky authored May 18, 2022
2 parents 8e15ed6 + ad086f9 commit 850fbd9
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,99 +4,113 @@

import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;

import io.quarkus.extension.gradle.dsl.Capabilities;
import io.quarkus.extension.gradle.dsl.Capability;

public class QuarkusExtensionConfiguration {

private boolean disableValidation;
private String deploymentArtifact;
private String deploymentModule;
private List<String> excludedArtifacts;
private List<String> parentFirstArtifacts;
private List<String> runnerParentFirstArtifacts;
private List<String> lesserPriorityArtifacts;
private List<String> conditionalDependencies;
private List<String> dependencyCondition;
private Property<Boolean> disableValidation;
private Property<String> deploymentArtifact;
private Property<String> deploymentModule;
private ListProperty<String> excludedArtifacts;
private ListProperty<String> parentFirstArtifacts;
private ListProperty<String> runnerParentFirstArtifacts;
private ListProperty<String> lesserPriorityArtifacts;
private ListProperty<String> conditionalDependencies;
private ListProperty<String> dependencyCondition;
private Capabilities capabilities = new Capabilities();

private Project project;

public QuarkusExtensionConfiguration(Project project) {
this.project = project;
disableValidation = project.getObjects().property(Boolean.class);
disableValidation.convention(false);
deploymentArtifact = project.getObjects().property(String.class);
deploymentModule = project.getObjects().property(String.class);
deploymentModule.convention("deployment");

excludedArtifacts = project.getObjects().listProperty(String.class);
parentFirstArtifacts = project.getObjects().listProperty(String.class);
runnerParentFirstArtifacts = project.getObjects().listProperty(String.class);
lesserPriorityArtifacts = project.getObjects().listProperty(String.class);
conditionalDependencies = project.getObjects().listProperty(String.class);
dependencyCondition = project.getObjects().listProperty(String.class);
}

public void setDisableValidation(boolean disableValidation) {
this.disableValidation = disableValidation;
this.disableValidation.set(disableValidation);
}

public boolean isValidationDisabled() {
public Property<Boolean> isValidationDisabled() {
return disableValidation;
}

public String getDeploymentArtifact() {
public Property<String> getDeploymentArtifact() {
return deploymentArtifact;
}

public void setDeploymentArtifact(String deploymentArtifact) {
this.deploymentArtifact = deploymentArtifact;
this.deploymentArtifact.set(deploymentArtifact);
}

public String getDeploymentModule() {
public Property<String> getDeploymentModule() {
return deploymentModule;
}

public void setDeploymentModule(String deploymentModule) {
this.deploymentModule = deploymentModule;
this.deploymentModule.set(deploymentModule);
}

public List<String> getExcludedArtifacts() {
public ListProperty<String> getExcludedArtifacts() {
return excludedArtifacts;
}

public void setExcludedArtifacts(List<String> excludedArtifacts) {
this.excludedArtifacts = excludedArtifacts;
this.excludedArtifacts.addAll(excludedArtifacts);
}

public List<String> getParentFirstArtifacts() {
public ListProperty<String> getParentFirstArtifacts() {
return parentFirstArtifacts;
}

public void setParentFirstArtifacts(List<String> parentFirstArtifacts) {
this.parentFirstArtifacts = parentFirstArtifacts;
this.parentFirstArtifacts.addAll(parentFirstArtifacts);
}

public List<String> getRunnerParentFirstArtifacts() {
public ListProperty<String> getRunnerParentFirstArtifacts() {
return runnerParentFirstArtifacts;
}

public void setRunnerParentFirstArtifacts(List<String> runnerParentFirstArtifacts) {
this.runnerParentFirstArtifacts = runnerParentFirstArtifacts;
this.runnerParentFirstArtifacts.addAll(runnerParentFirstArtifacts);
}

public List<String> getLesserPriorityArtifacts() {
public ListProperty<String> getLesserPriorityArtifacts() {
return lesserPriorityArtifacts;
}

public void setLesserPriorityArtifacts(List<String> lesserPriorityArtifacts) {
this.lesserPriorityArtifacts = lesserPriorityArtifacts;
this.lesserPriorityArtifacts.addAll(lesserPriorityArtifacts);
}

public List<String> getConditionalDependencies() {
public ListProperty<String> getConditionalDependencies() {
return conditionalDependencies;
}

public void setConditionalDependencies(List<String> conditionalDependencies) {
this.conditionalDependencies = conditionalDependencies;
this.conditionalDependencies.addAll(conditionalDependencies);
}

public List<String> getDependencyConditions() {
public ListProperty<String> getDependencyConditions() {
return dependencyCondition;
}

public void setDependencyConditions(List<String> dependencyCondition) {
this.dependencyCondition = dependencyCondition;
this.dependencyCondition.addAll(dependencyCondition);
}

public List<Capability> getProvidedCapabilities() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,17 @@ public void apply(Project project) {

private void registerTasks(Project project, QuarkusExtensionConfiguration quarkusExt) {
TaskContainer tasks = project.getTasks();

JavaPluginConvention convention = project.getConvention().getPlugin(JavaPluginConvention.class);
SourceSet mainSourceSet = convention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
Configuration runtimeModuleClasspath = project.getConfigurations()
.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);

TaskProvider<ExtensionDescriptorTask> extensionDescriptorTask = tasks.register(EXTENSION_DESCRIPTOR_TASK_NAME,
ExtensionDescriptorTask.class, task -> {
JavaPluginConvention convention = project.getConvention().getPlugin(JavaPluginConvention.class);
SourceSet mainSourceSet = convention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
task.setOutputResourcesDir(mainSourceSet.getOutput().getResourcesDir());
task.setInputResourcesDir(mainSourceSet.getResources().getSourceDirectories().getAsPath());
task.setQuarkusExtensionConfiguration(quarkusExt);
task.setClasspath(runtimeModuleClasspath);
});
ExtensionDescriptorTask.class, quarkusExt, mainSourceSet, runtimeModuleClasspath);

TaskProvider<ValidateExtensionTask> validateExtensionTask = tasks.register(VALIDATE_EXTENSION_TASK_NAME,
ValidateExtensionTask.class, task -> {
task.setRuntimeModuleClasspath(runtimeModuleClasspath);
task.setQuarkusExtensionConfiguration(quarkusExt);
task.onlyIf(t -> !quarkusExt.isValidationDisabled());
});
ValidateExtensionTask.class, quarkusExt, runtimeModuleClasspath);

project.getPlugins().withType(
JavaPlugin.class,
Expand Down Expand Up @@ -131,7 +123,7 @@ private void addAnnotationProcessorDependency(Project project) {

private Project findDeploymentProject(Project project, QuarkusExtensionConfiguration configuration) {

String deploymentProjectName = configuration.getDeploymentModule();
String deploymentProjectName = configuration.getDeploymentModule().get();
if (deploymentProjectName == null) {
deploymentProjectName = DEFAULT_DEPLOYMENT_PROJECT_NAME;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@
import java.util.Properties;
import java.util.Set;

import javax.inject.Inject;

import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ModuleVersionIdentifier;
import org.gradle.api.artifacts.ResolvedArtifact;
import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.TaskAction;

import com.fasterxml.jackson.core.util.DefaultIndenter;
Expand All @@ -44,34 +47,26 @@
*/
public class ExtensionDescriptorTask extends DefaultTask {

private QuarkusExtensionConfiguration quarkusExtensionConfiguration;
private Configuration classpath;
private File outputResourcesDir;
private String inputResourcesDir;
private final QuarkusExtensionConfiguration quarkusExtensionConfiguration;
private final Configuration classpath;
private final File outputResourcesDir;
private final String inputResourcesDir;

private static final String GROUP_ID = "group-id";
private static final String ARTIFACT_ID = "artifact-id";
private static final String METADATA = "metadata";

public ExtensionDescriptorTask() {
@Inject
public ExtensionDescriptorTask(QuarkusExtensionConfiguration quarkusExtensionConfiguration, SourceSet mainSourceSet,
Configuration runtimeClasspath) {

setDescription("Generate extension descriptor file");
setGroup("quarkus");
}

public void setOutputResourcesDir(File outputResourcesDir) {
this.outputResourcesDir = outputResourcesDir;
}

public void setInputResourcesDir(String inputResourcesDir) {
this.inputResourcesDir = inputResourcesDir;
}

public void setQuarkusExtensionConfiguration(QuarkusExtensionConfiguration quarkusExtensionConfiguration) {
this.quarkusExtensionConfiguration = quarkusExtensionConfiguration;
}

public void setClasspath(Configuration classpath) {
this.classpath = classpath;
this.outputResourcesDir = mainSourceSet.getOutput().getResourcesDir();
this.inputResourcesDir = mainSourceSet.getResources().getSourceDirectories().getAsPath();
this.classpath = runtimeClasspath;
}

@Classpath
Expand All @@ -90,13 +85,12 @@ public void generateExtensionDescriptor() throws IOException {

private void generateQuarkusExtensionProperties(Path metaInfDir) {
final Properties props = new Properties();
String deploymentArtifact = quarkusExtensionConfiguration.getDeploymentArtifact();
if (quarkusExtensionConfiguration.getDeploymentArtifact() == null) {
deploymentArtifact = quarkusExtensionConfiguration.getDefaultDeployementArtifactName();
}
String deploymentArtifact = quarkusExtensionConfiguration.getDeploymentArtifact()
.getOrElse(quarkusExtensionConfiguration.getDefaultDeployementArtifactName());

props.setProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT, deploymentArtifact);

List<String> conditionalDependencies = quarkusExtensionConfiguration.getConditionalDependencies();
List<String> conditionalDependencies = quarkusExtensionConfiguration.getConditionalDependencies().get();
if (conditionalDependencies != null && !conditionalDependencies.isEmpty()) {
final StringBuilder buf = new StringBuilder();
int i = 0;
Expand All @@ -107,7 +101,7 @@ private void generateQuarkusExtensionProperties(Path metaInfDir) {
props.setProperty(BootstrapConstants.CONDITIONAL_DEPENDENCIES, buf.toString());
}

List<String> dependencyConditions = quarkusExtensionConfiguration.getDependencyConditions();
List<String> dependencyConditions = quarkusExtensionConfiguration.getDependencyConditions().get();
if (dependencyConditions != null && !dependencyConditions.isEmpty()) {
final StringBuilder buf = new StringBuilder();
int i = 0;
Expand All @@ -118,25 +112,25 @@ private void generateQuarkusExtensionProperties(Path metaInfDir) {
props.setProperty(BootstrapConstants.DEPENDENCY_CONDITION, buf.toString());
}

List<String> parentFirstArtifacts = quarkusExtensionConfiguration.getParentFirstArtifacts();
List<String> parentFirstArtifacts = quarkusExtensionConfiguration.getParentFirstArtifacts().get();
if (parentFirstArtifacts != null && !parentFirstArtifacts.isEmpty()) {
String val = String.join(",", parentFirstArtifacts);
props.put(AppModel.PARENT_FIRST_ARTIFACTS, val);
}

List<String> runnerParentFirstArtifacts = quarkusExtensionConfiguration.getRunnerParentFirstArtifacts();
List<String> runnerParentFirstArtifacts = quarkusExtensionConfiguration.getRunnerParentFirstArtifacts().get();
if (runnerParentFirstArtifacts != null && !runnerParentFirstArtifacts.isEmpty()) {
String val = String.join(",", runnerParentFirstArtifacts);
props.put(AppModel.RUNNER_PARENT_FIRST_ARTIFACTS, val);
}

List<String> excludedArtifacts = quarkusExtensionConfiguration.getExcludedArtifacts();
List<String> excludedArtifacts = quarkusExtensionConfiguration.getExcludedArtifacts().get();
if (excludedArtifacts != null && !excludedArtifacts.isEmpty()) {
String val = String.join(",", excludedArtifacts);
props.put(AppModel.EXCLUDED_ARTIFACTS, val);
}

List<String> lesserPriorityArtifacts = quarkusExtensionConfiguration.getLesserPriorityArtifacts();
List<String> lesserPriorityArtifacts = quarkusExtensionConfiguration.getLesserPriorityArtifacts().get();
if (lesserPriorityArtifacts != null && !lesserPriorityArtifacts.isEmpty()) {
String val = String.join(",", lesserPriorityArtifacts);
props.put(AppModel.LESSER_PRIORITY_ARTIFACTS, val);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import java.util.List;
import java.util.Set;

import javax.inject.Inject;

import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.artifacts.Configuration;
Expand All @@ -20,28 +22,24 @@

public class ValidateExtensionTask extends DefaultTask {

private QuarkusExtensionConfiguration extensionConfiguration;
private Configuration runtimeModuleClasspath;
private Configuration deploymentModuleClasspath;

public ValidateExtensionTask() {
@Inject
public ValidateExtensionTask(QuarkusExtensionConfiguration quarkusExtensionConfiguration,
Configuration runtimeModuleClasspath) {
setDescription("Validate extension dependencies");
setGroup("quarkus");
}

public void setQuarkusExtensionConfiguration(QuarkusExtensionConfiguration extensionConfiguration) {
this.extensionConfiguration = extensionConfiguration;
this.runtimeModuleClasspath = runtimeModuleClasspath;
this.onlyIf(t -> !quarkusExtensionConfiguration.isValidationDisabled().get());
}

@Internal
public Configuration getRuntimeModuleClasspath() {
return this.runtimeModuleClasspath;
}

public void setRuntimeModuleClasspath(Configuration runtimeModuleClasspath) {
this.runtimeModuleClasspath = runtimeModuleClasspath;
}

@Internal
public Configuration getDeploymentModuleClasspath() {
return this.deploymentModuleClasspath;
Expand Down

0 comments on commit 850fbd9

Please sign in to comment.