1616
1717package org .springframework .boot .build .architecture ;
1818
19- import java .util .ArrayList ;
20- import java .util .List ;
19+ import java .util .Collections ;
2120
2221import org .gradle .api .Plugin ;
2322import org .gradle .api .Project ;
24- import org .gradle .api .Task ;
2523import org .gradle .api .plugins .JavaPlugin ;
2624import org .gradle .api .plugins .JavaPluginExtension ;
2725import org .gradle .api .tasks .SourceSet ;
2826import org .gradle .api .tasks .TaskProvider ;
27+ import org .gradle .api .tasks .compile .JavaCompile ;
2928import org .gradle .language .base .plugins .LifecycleBasePlugin ;
29+ import org .jetbrains .kotlin .gradle .tasks .KotlinCompileTool ;
3030
3131import org .springframework .util .StringUtils ;
3232
@@ -46,28 +46,45 @@ public void apply(Project project) {
4646
4747 private void registerTasks (Project project , ArchitectureCheckExtension extension ) {
4848 JavaPluginExtension javaPluginExtension = project .getExtensions ().getByType (JavaPluginExtension .class );
49- List <TaskProvider <ArchitectureCheck >> packageTangleChecks = new ArrayList <>();
5049 for (SourceSet sourceSet : javaPluginExtension .getSourceSets ()) {
51- TaskProvider <ArchitectureCheck > checkPackageTangles = project .getTasks ()
52- .register ("checkArchitecture" + StringUtils .capitalize (sourceSet .getName ()), ArchitectureCheck .class ,
53- (task ) -> {
54- task .getSourceSet ().set (sourceSet .getName ());
55- task .getCompileClasspath ().from (sourceSet .getCompileClasspath ());
56- task .setClasses (sourceSet .getOutput ().getClassesDirs ());
57- task .getResourcesDirectory ().set (sourceSet .getOutput ().getResourcesDir ());
58- task .dependsOn (sourceSet .getProcessResourcesTaskName ());
59- task .setDescription ("Checks the architecture of the classes of the " + sourceSet .getName ()
60- + " source set." );
61- task .setGroup (LifecycleBasePlugin .VERIFICATION_GROUP );
62- task .getNullMarkedEnabled ().set (extension .getNullMarked ().getEnabled ());
63- task .getNullMarkedIgnoredPackages ().set (extension .getNullMarked ().getIgnoredPackages ());
64- });
65- packageTangleChecks .add (checkPackageTangles );
66- }
67- if (!packageTangleChecks .isEmpty ()) {
68- TaskProvider <Task > checkTask = project .getTasks ().named (LifecycleBasePlugin .CHECK_TASK_NAME );
69- checkTask .configure ((check ) -> check .dependsOn (packageTangleChecks ));
50+ registerArchitectureCheck (sourceSet , "java" , project ).configure ((task ) -> {
51+ task .setClasses (project .files (project .getTasks ()
52+ .named (sourceSet .getCompileTaskName ("java" ), JavaCompile .class )
53+ .flatMap ((compile ) -> compile .getDestinationDirectory ())));
54+ task .getNullMarkedEnabled ().set (extension .getNullMarked ().getEnabled ());
55+ task .getNullMarkedIgnoredPackages ().set (extension .getNullMarked ().getIgnoredPackages ());
56+ });
57+ project .getPlugins ()
58+ .withId ("org.jetbrains.kotlin.jvm" ,
59+ (kotlinPlugin ) -> registerArchitectureCheck (sourceSet , "kotlin" , project ).configure ((task ) -> {
60+ task .setClasses (project .files (project .getTasks ()
61+ .named (sourceSet .getCompileTaskName ("kotlin" ), KotlinCompileTool .class )
62+ .flatMap ((compile ) -> compile .getDestinationDirectory ())));
63+ task .getNullMarkedEnabled ().set (false );
64+ task .getNullMarkedIgnoredPackages ().set (Collections .emptySet ());
65+ }));
7066 }
7167 }
7268
69+ private TaskProvider <ArchitectureCheck > registerArchitectureCheck (SourceSet sourceSet , String language ,
70+ Project project ) {
71+ TaskProvider <ArchitectureCheck > checkArchitecture = project .getTasks ()
72+ .register (
73+ "checkArchitecture"
74+ + StringUtils .capitalize (sourceSet .getName () + StringUtils .capitalize (language )),
75+ ArchitectureCheck .class , (task ) -> {
76+ task .getSourceSet ().set (sourceSet .getName ());
77+ task .getCompileClasspath ().from (sourceSet .getCompileClasspath ());
78+ task .getResourcesDirectory ().set (sourceSet .getOutput ().getResourcesDir ());
79+ task .dependsOn (sourceSet .getProcessResourcesTaskName ());
80+ task .setDescription ("Checks the architecture of the " + language + " classes of the "
81+ + sourceSet .getName () + " source set." );
82+ task .setGroup (LifecycleBasePlugin .VERIFICATION_GROUP );
83+ });
84+ project .getTasks ()
85+ .named (LifecycleBasePlugin .CHECK_TASK_NAME )
86+ .configure ((check ) -> check .dependsOn (checkArchitecture ));
87+ return checkArchitecture ;
88+ }
89+
7390}
0 commit comments