diff --git a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java index cb2cfdb0d4b..bda735c6f41 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java @@ -16,17 +16,15 @@ package org.springframework.boot.build.architecture; -import java.util.ArrayList; -import java.util.List; - import org.gradle.api.Plugin; import org.gradle.api.Project; -import org.gradle.api.Task; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.language.base.plugins.LifecycleBasePlugin; +import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool; import org.springframework.util.StringUtils; @@ -44,26 +42,39 @@ public class ArchitecturePlugin implements Plugin { private void registerTasks(Project project) { JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class); - List> packageTangleChecks = new ArrayList<>(); for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { - TaskProvider checkPackageTangles = project.getTasks() - .register("checkArchitecture" + StringUtils.capitalize(sourceSet.getName()), ArchitectureCheck.class, - (task) -> { - task.getSourceSet().set(sourceSet.getName()); - task.getCompileClasspath().from(sourceSet.getCompileClasspath()); - task.setClasses(sourceSet.getOutput().getClassesDirs()); - task.getResourcesDirectory().set(sourceSet.getOutput().getResourcesDir()); - task.dependsOn(sourceSet.getProcessResourcesTaskName()); - task.setDescription("Checks the architecture of the classes of the " + sourceSet.getName() - + " source set."); - task.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP); - }); - packageTangleChecks.add(checkPackageTangles); - } - if (!packageTangleChecks.isEmpty()) { - TaskProvider checkTask = project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME); - checkTask.configure((check) -> check.dependsOn(packageTangleChecks)); + registerArchitectureCheck(sourceSet, "java", project) + .configure((task) -> task.setClasses(project.files(project.getTasks() + .named(sourceSet.getCompileTaskName("java"), JavaCompile.class) + .flatMap((compile) -> compile.getDestinationDirectory())))); + project.getPlugins() + .withId("org.jetbrains.kotlin.jvm", + (kotlinPlugin) -> registerArchitectureCheck(sourceSet, "kotlin", project) + .configure((task) -> task.setClasses(project.files(project.getTasks() + .named(sourceSet.getCompileTaskName("kotlin"), KotlinCompileTool.class) + .flatMap((compile) -> compile.getDestinationDirectory()))))); } } + private TaskProvider registerArchitectureCheck(SourceSet sourceSet, String language, + Project project) { + TaskProvider checkArchitecture = project.getTasks() + .register( + "checkArchitecture" + + StringUtils.capitalize(sourceSet.getName() + StringUtils.capitalize(language)), + ArchitectureCheck.class, (task) -> { + task.getSourceSet().set(sourceSet.getName()); + task.getCompileClasspath().from(sourceSet.getCompileClasspath()); + task.getResourcesDirectory().set(sourceSet.getOutput().getResourcesDir()); + task.dependsOn(sourceSet.getProcessResourcesTaskName()); + task.setDescription("Checks the architecture of the " + language + " classes of the " + + sourceSet.getName() + " source set."); + task.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP); + }); + project.getTasks() + .named(LifecycleBasePlugin.CHECK_TASK_NAME) + .configure((check) -> check.dependsOn(checkArchitecture)); + return checkArchitecture; + } + } diff --git a/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java b/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java index 1063fb3e42b..a0bbaa615b2 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java @@ -381,7 +381,7 @@ class ArchitectureCheckTests { @Override public String toString() { - return "checkArchitecture" + StringUtils.capitalize(this.sourceSetName); + return "checkArchitecture" + StringUtils.capitalize(this.sourceSetName) + "Java"; } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle index 13d0f96ffc5..b7cb330ab53 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle @@ -38,7 +38,7 @@ dependencies { } tasks.configureEach { - if ("checkArchitectureMain".equals(it.name)) { + if ("checkArchitectureMainJava".equals(it.name)) { prohibitObjectsRequireNonNull = false } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle index 5fcd983a6b3..ce3be44baa4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle @@ -38,7 +38,7 @@ dependencies { } tasks.configureEach { - if ("checkArchitectureMain".equals(it.name)) { + if ("checkArchitectureMainJava".equals(it.name)) { prohibitObjectsRequireNonNull = false } }