16
16
package com .diffplug .gradle .spotless ;
17
17
18
18
import org .gradle .api .Project ;
19
- import org .gradle .api .Task ;
20
19
import org .gradle .api .plugins .BasePlugin ;
21
20
import org .gradle .api .plugins .JavaBasePlugin ;
21
+ import org .gradle .api .tasks .TaskContainer ;
22
+ import org .gradle .api .tasks .TaskProvider ;
22
23
23
24
public class SpotlessExtensionModern extends SpotlessExtensionBase {
24
25
public SpotlessExtensionModern (Project project ) {
25
26
super (project );
26
- rootCheckTask = project .task (EXTENSION + CHECK );
27
- rootCheckTask .setGroup (TASK_GROUP );
28
- rootCheckTask .setDescription (CHECK_DESCRIPTION );
29
- rootApplyTask = project .task (EXTENSION + APPLY );
30
- rootApplyTask .setGroup (TASK_GROUP );
31
- rootApplyTask .setDescription (APPLY_DESCRIPTION );
32
- rootDiagnoseTask = project .task (EXTENSION + DIAGNOSE );
33
- rootDiagnoseTask .setGroup (TASK_GROUP ); // no description on purpose
27
+ rootCheckTask = project .getTasks ().register (EXTENSION + CHECK , task -> {
28
+ task .setGroup (TASK_GROUP );
29
+ task .setDescription (CHECK_DESCRIPTION );
30
+ });
31
+ rootApplyTask = project .getTasks ().register (EXTENSION + APPLY , task -> {
32
+ task .setGroup (TASK_GROUP );
33
+ task .setDescription (APPLY_DESCRIPTION );
34
+ });
35
+ rootDiagnoseTask = project .getTasks ().register (EXTENSION + DIAGNOSE , task -> {
36
+ task .setGroup (TASK_GROUP ); // no description on purpose
37
+ });
34
38
35
39
project .afterEvaluate (unused -> {
36
40
if (enforceCheck ) {
@@ -40,53 +44,58 @@ public SpotlessExtensionModern(Project project) {
40
44
});
41
45
}
42
46
43
- final Task rootCheckTask , rootApplyTask , rootDiagnoseTask ;
47
+ final TaskProvider <?> rootCheckTask , rootApplyTask , rootDiagnoseTask ;
44
48
45
49
@ Override
46
50
protected void createFormatTasks (String name , FormatExtension formatExtension ) {
47
- // TODO level 1: implement SpotlessExtension::createFormatTasks, but using config avoidance
48
- // TODO level 2: override configure(String name, Class<T> clazz, Action<T> configure) so that it is lazy
51
+ // TODO override configure(String name, Class<T> clazz, Action<T> configure) so that it is lazy
52
+
53
+ boolean isIdeHook = project .hasProperty (IdeHook .PROPERTY );
54
+ TaskContainer tasks = project .getTasks ();
55
+ TaskProvider <?> cleanTask = tasks .named (BasePlugin .CLEAN_TASK_NAME );
49
56
50
57
// create the SpotlessTask
51
58
String taskName = EXTENSION + SpotlessPlugin .capitalize (name );
52
- SpotlessTaskModern spotlessTask = project .getTasks ().create (taskName , SpotlessTaskModern .class );
53
- project .afterEvaluate (unused -> formatExtension .setupTask (spotlessTask ));
59
+ TaskProvider <SpotlessTaskModern > spotlessTask = tasks .register (taskName , SpotlessTaskModern .class , task -> {
60
+ task .setEnabled (!isIdeHook );
61
+ // clean removes the SpotlessCache, so we have to run after clean
62
+ task .mustRunAfter (cleanTask );
63
+ });
54
64
55
- // clean removes the SpotlessCache, so we have to run after clean
56
- Task clean = project .getTasks ().getByName (BasePlugin .CLEAN_TASK_NAME );
57
- spotlessTask .mustRunAfter (clean );
65
+ project .afterEvaluate (unused -> spotlessTask .configure (formatExtension ::setupTask ));
58
66
59
67
// create the check and apply control tasks
60
- SpotlessCheck checkTask = project .getTasks ().create (taskName + CHECK , SpotlessCheck .class );
61
- checkTask .setSpotlessOutDirectory (spotlessTask .getOutputDirectory ());
62
- checkTask .source = spotlessTask ;
63
- checkTask .dependsOn (spotlessTask );
68
+ TaskProvider <SpotlessApply > applyTask = tasks .register (taskName + APPLY , SpotlessApply .class , task -> {
69
+ task .setEnabled (!isIdeHook );
70
+ task .dependsOn (spotlessTask );
71
+ task .setSpotlessOutDirectory (spotlessTask .get ().getOutputDirectory ());
72
+ task .linkSource (spotlessTask .get ());
73
+ });
74
+ rootApplyTask .configure (task -> {
75
+ task .dependsOn (applyTask );
64
76
65
- SpotlessApply applyTask = project .getTasks ().create (taskName + APPLY , SpotlessApply .class );
66
- applyTask .setSpotlessOutDirectory (spotlessTask .getOutputDirectory ());
67
- applyTask .linkSource (spotlessTask );
68
- applyTask .dependsOn (spotlessTask );
77
+ if (isIdeHook ) {
78
+ // the rootApplyTask is no longer just a marker task, now it does a bit of work itself
79
+ task .doLast (unused -> IdeHook .performHook (spotlessTask .get ()));
80
+ }
81
+ });
69
82
70
- // if the user runs both, make sure that apply happens first,
71
- checkTask .mustRunAfter (applyTask );
83
+ TaskProvider <SpotlessCheck > checkTask = tasks .register (taskName + CHECK , SpotlessCheck .class , task -> {
84
+ task .setEnabled (!isIdeHook );
85
+ task .dependsOn (spotlessTask );
86
+ task .setSpotlessOutDirectory (spotlessTask .get ().getOutputDirectory ());
87
+ task .source = spotlessTask .get ();
72
88
73
- // the root tasks depend on the control tasks
74
- rootCheckTask .dependsOn (checkTask );
75
- rootApplyTask .dependsOn (applyTask );
89
+ // if the user runs both, make sure that apply happens first,
90
+ task .mustRunAfter (applyTask );
91
+ });
92
+ rootCheckTask .configure (task -> task .dependsOn (checkTask ));
76
93
77
94
// create the diagnose task
78
- SpotlessDiagnoseTask diagnoseTask = project .getTasks ().create (taskName + DIAGNOSE , SpotlessDiagnoseTask .class );
79
- diagnoseTask .source = spotlessTask ;
80
- rootDiagnoseTask .dependsOn (diagnoseTask );
81
- diagnoseTask .mustRunAfter (clean );
82
-
83
- if (project .hasProperty (IdeHook .PROPERTY )) {
84
- // disable the normal tasks, to disable their up-to-date checking
85
- spotlessTask .setEnabled (false );
86
- checkTask .setEnabled (false );
87
- applyTask .setEnabled (false );
88
- // the rootApplyTask is no longer just a marker task, now it does a bit of work itself
89
- rootApplyTask .doLast (unused -> IdeHook .performHook (spotlessTask ));
90
- }
95
+ TaskProvider <SpotlessDiagnoseTask > diagnoseTask = tasks .register (taskName + DIAGNOSE , SpotlessDiagnoseTask .class , task -> {
96
+ task .source = spotlessTask .get ();
97
+ task .mustRunAfter (cleanTask );
98
+ });
99
+ rootDiagnoseTask .configure (task -> task .dependsOn (diagnoseTask ));
91
100
}
92
101
}
0 commit comments