Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Java Module Dependencies Gradle Plugin - Changelog

## Version 1.8
* [#141](https://github.com/gradlex-org/java-module-dependencies/pull/141) Introduce `org.gradlex.java-module-dependencies.register-help-tasks` property
* [#127](https://github.com/gradlex-org/java-module-dependencies/issues/127) Less configuration cache misses when modifying `module-info.java` (Thanks [TheGoesen](https://github.com/TheGoesen))
* [#128](https://github.com/gradlex-org/java-module-dependencies/issues/128) Less configuration cache misses when using Settings plugin (Thanks [TheGoesen](https://github.com/TheGoesen))
* [#135](https://github.com/gradlex-org/java-module-dependencies/issues/135) Improve performance of ApplyPluginsAction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
public abstract class JavaModuleDependenciesPlugin implements Plugin<ExtensionAware> {

private static final String EXTRA_JAVA_MODULE_INFO_PLUGIN_ID = "org.gradlex.extra-java-module-info";
private static final String REGISTER_HELP_TASKS_PROPERTY = "org.gradlex.java-module-dependencies.register-help-tasks";

@Override
public void apply(ExtensionAware projectOrSettings) {
Expand All @@ -92,6 +93,10 @@ private void applyProject(Project project) {
}

private void setupForJavaProject(Project project, JavaModuleDependenciesExtension javaModuleDependencies) {
boolean registerHelpTasks = Boolean.parseBoolean(project.getProviders()
.gradleProperty(REGISTER_HELP_TASKS_PROPERTY)
.getOrElse("true"));

SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
sourceSets.all(sourceSet -> {
process(REQUIRES, sourceSet.getImplementationConfigurationName(), sourceSet, project, javaModuleDependencies);
Expand All @@ -103,21 +108,22 @@ private void setupForJavaProject(Project project, JavaModuleDependenciesExtensio
javaModuleDependencies.doAddRequiresRuntimeSupport(sourceSet, sourceSet);
});

TaskProvider<Task> checkAllModuleInfo = project.getTasks().register("checkAllModuleInfo", t -> {
setupDirectivesDSL(project, javaModuleDependencies);

TaskProvider<Task> checkAllModuleInfo = registerHelpTasks ? project.getTasks().register("checkAllModuleInfo", t -> {
t.setGroup(VERIFICATION_GROUP);
t.setDescription("Check scope and order of directives in 'module-info.java' files");
});
}) : null;

setupDirectivesDSL(project, javaModuleDependencies);

setupOrderingCheckTasks(project, checkAllModuleInfo, javaModuleDependencies);
setupModuleDependenciesTask(project);
setupReportTasks(project, javaModuleDependencies);
setupMigrationTasks(project, javaModuleDependencies);
if (registerHelpTasks) {
setupOrderingCheckTasks(project, checkAllModuleInfo, javaModuleDependencies);
setupModuleDependenciesTask(project);
setupReportTasks(project, javaModuleDependencies);
setupMigrationTasks(project, javaModuleDependencies);
}

project.getPlugins().withId("com.autonomousapps.dependency-analysis", analysisPlugin -> {
DependencyAnalysisBridge.registerDependencyAnalysisPostProcessingTask(project, checkAllModuleInfo);
});
project.getPlugins().withId("com.autonomousapps.dependency-analysis", analysisPlugin ->
DependencyAnalysisBridge.registerDependencyAnalysisPostProcessingTask(project, checkAllModuleInfo));
}

private void setupExtraJavaModulePluginBridge(Project project, JavaModuleDependenciesExtension javaModuleDependencies) {
Expand All @@ -143,17 +149,15 @@ private void setupDirectivesDSL(Project project, JavaModuleDependenciesExtension
private void setupModuleDependenciesTask(Project project) {
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
TaskProvider<ModuleDependencyReport> moduleDependencies = project.getTasks().register("moduleDependencies", ModuleDependencyReport.class, t -> t.setGroup(HELP_GROUP));
sourceSets.all(sourceSet -> {
moduleDependencies.configure(t -> {
HashSet<Configuration> joined = new HashSet<>();
if (t.getConfigurations() != null) {
joined.addAll(t.getConfigurations());
}
joined.add(project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()));
joined.add(project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()));
t.setConfigurations(joined);
});
});
sourceSets.all(sourceSet -> moduleDependencies.configure(t -> {
HashSet<Configuration> joined = new HashSet<>();
if (t.getConfigurations() != null) {
joined.addAll(t.getConfigurations());
}
joined.add(project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()));
joined.add(project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()));
t.setConfigurations(joined);
}));
}

private void setupReportTasks(Project project, JavaModuleDependenciesExtension javaModuleDependencies) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@
import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesOrderingCheck;
import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesScopeCheck;

import javax.annotation.Nullable;
import java.io.File;

public class DependencyAnalysisBridge {

public static void registerDependencyAnalysisPostProcessingTask(Project project, TaskProvider<Task> checkAllModuleInfo) {
public static void registerDependencyAnalysisPostProcessingTask(Project project, @Nullable TaskProvider<Task> checkAllModuleInfo) {
TaskContainer tasks = project.getTasks();
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);

Expand All @@ -54,7 +55,9 @@ public static void registerDependencyAnalysisPostProcessingTask(Project project,
project.getExtensions().getByType(AbstractExtension.class)
.registerPostProcessingTask(checkModuleDirectivesScope);

checkAllModuleInfo.configure(t -> t.dependsOn(checkModuleDirectivesScope));
if (checkAllModuleInfo != null) {
checkAllModuleInfo.configure(t -> t.dependsOn(checkModuleDirectivesScope));
}
tasks.withType(ModuleDirectivesOrderingCheck.class).configureEach(t -> t.mustRunAfter(checkModuleDirectivesScope));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import spock.lang.Specification
class BasicFunctionalityTest extends Specification {

@Delegate
GradleBuild build = new GradleBuild()
GradleBuild build = new GradleBuild(true)

def "can configure all tasks in a build without error"() {
given:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import spock.lang.Specification
class OrderingCheckTest extends Specification {

@Delegate
GradleBuild build = new GradleBuild()
GradleBuild build = new GradleBuild(true)

def "order is expected to be alphabetic for each scope individually"() {
when:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import java.nio.file.Files

class GradleBuild {

final boolean withHelpTasks
final File projectDir
final File settingsFile
final File appBuildFile
Expand All @@ -17,7 +18,8 @@ class GradleBuild {

final String gradleVersionUnderTest = System.getProperty("gradleVersionUnderTest")

GradleBuild(File projectDir = Files.createTempDirectory("gradle-build").toFile()) {
GradleBuild(boolean withHelpTasks = false, File projectDir = Files.createTempDirectory("gradle-build").toFile()) {
this.withHelpTasks = withHelpTasks
this.projectDir = projectDir
this.settingsFile = file("settings.gradle.kts")
this.appBuildFile = file("app/build.gradle.kts")
Expand Down Expand Up @@ -98,7 +100,8 @@ class GradleBuild {
.forwardOutput()
.withPluginClasspath()
.withProjectDir(projectDir)
.withArguments(Arrays.asList(args) + latestFeaturesArgs + '-s' + '--warning-mode=all')
.withArguments(Arrays.asList(args) + latestFeaturesArgs + '-s' + '--warning-mode=all'
+ "-Porg.gradlex.java-module-dependencies.register-help-tasks=$withHelpTasks".toString())
.withDebug(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().contains("-agentlib:jdwp")).with {
gradleVersionUnderTest ? it.withGradleVersion(gradleVersionUnderTest) : it
}
Expand Down