Skip to content

Commit 7fb2333

Browse files
authored
Merge pull request #607 from bigdaz/dd/inputchanges
Convert `SpotlessTaskModern` to use `InputChanges` API
2 parents 495aa3f + 536709b commit 7fb2333

File tree

9 files changed

+80
-49
lines changed

9 files changed

+80
-49
lines changed

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTaskModern.java

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,16 @@
2424
import java.util.stream.Collectors;
2525

2626
import org.gradle.api.GradleException;
27+
import org.gradle.api.file.FileCollection;
2728
import org.gradle.api.tasks.CacheableTask;
29+
import org.gradle.api.tasks.InputFiles;
30+
import org.gradle.api.tasks.PathSensitive;
31+
import org.gradle.api.tasks.PathSensitivity;
2832
import org.gradle.api.tasks.TaskAction;
29-
import org.gradle.api.tasks.incremental.IncrementalTaskInputs;
33+
import org.gradle.work.ChangeType;
34+
import org.gradle.work.FileChange;
35+
import org.gradle.work.Incremental;
36+
import org.gradle.work.InputChanges;
3037

3138
import com.diffplug.common.base.Errors;
3239
import com.diffplug.common.base.Preconditions;
@@ -35,10 +42,17 @@
3542

3643
@CacheableTask
3744
public class SpotlessTaskModern extends SpotlessTask {
38-
@TaskAction
39-
public void performAction(IncrementalTaskInputs inputs) throws Exception {
40-
// TODO: implement using the InputChanges api
4145

46+
@PathSensitive(PathSensitivity.RELATIVE)
47+
@Incremental
48+
@InputFiles
49+
@Override
50+
public FileCollection getTarget() {
51+
return super.getTarget();
52+
}
53+
54+
@TaskAction
55+
public void performAction(InputChanges inputs) throws Exception {
4256
if (target == null) {
4357
throw new GradleException("You must specify 'Iterable<File> target'");
4458
}
@@ -68,27 +82,27 @@ public void performAction(IncrementalTaskInputs inputs) throws Exception {
6882
}
6983

7084
try (Formatter formatter = buildFormatter()) {
71-
inputs.outOfDate(inputDetails -> {
72-
File input = inputDetails.getFile();
73-
try {
74-
if (shouldInclude.test(input) && input.isFile()) {
75-
processInputFile(formatter, input);
85+
for (FileChange fileChange : inputs.getFileChanges(target)) {
86+
File input = fileChange.getFile();
87+
if (fileChange.getChangeType() == ChangeType.REMOVED) {
88+
try {
89+
if (shouldInclude.test(input)) {
90+
deletePreviousResult(input);
91+
}
92+
} catch (IOException e) {
93+
throw Errors.asRuntime(e);
7694
}
77-
} catch (IOException e) {
78-
throw Errors.asRuntime(e);
79-
}
80-
});
81-
}
8295

83-
inputs.removed(removedDetails -> {
84-
File input = removedDetails.getFile();
85-
try {
86-
if (shouldInclude.test(input)) {
87-
deletePreviousResult(input);
96+
} else {
97+
try {
98+
if (shouldInclude.test(input) && input.isFile()) {
99+
processInputFile(formatter, input);
100+
}
101+
} catch (IOException e) {
102+
throw Errors.asRuntime(e);
103+
}
88104
}
89-
} catch (IOException e) {
90-
throw Errors.asRuntime(e);
91105
}
92-
});
106+
}
93107
}
94108
}

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/ConfigAvoidanceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public class ConfigAvoidanceTest extends GradleIntegrationHarness {
2525
protected final GradleRunner gradleRunnerConfigAvoidance() throws IOException {
26-
return gradleRunner().withGradleVersion(SpotlessPluginPreConfigAvoidance.CONFIG_AVOIDANCE_INTRODUCED.getVersion());
26+
return gradleRunner().withGradleVersion(GradleVersionSupport.CONFIG_AVOIDANCE.version);
2727
}
2828

2929
@Test

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/ErrorShouldRethrowJre8Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,15 @@ private void runWithSuccess(String... messages) throws Exception {
123123
if (JreVersion.thisVm() != JreVersion._8) {
124124
return;
125125
}
126-
BuildResult result = gradleRunner().withGradleVersion(SpotlessPluginModern.MINIMUM_GRADLE).withArguments("check").build();
126+
BuildResult result = gradleRunner().withGradleVersion(GradleVersionSupport.MODERN.version).withArguments("check").build();
127127
assertResultAndMessages(result, TaskOutcome.SUCCESS, messages);
128128
}
129129

130130
private void runWithFailure(String... messages) throws Exception {
131131
if (JreVersion.thisVm() != JreVersion._8) {
132132
return;
133133
}
134-
BuildResult result = gradleRunner().withGradleVersion(SpotlessPluginModern.MINIMUM_GRADLE).withArguments("check").buildAndFail();
134+
BuildResult result = gradleRunner().withGradleVersion(GradleVersionSupport.MODERN.version).withArguments("check").buildAndFail();
135135
assertResultAndMessages(result, TaskOutcome.FAILED, messages);
136136
}
137137

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,39 @@
3939
import com.diffplug.spotless.ResourceHarness;
4040

4141
public class GradleIntegrationHarness extends ResourceHarness {
42+
public enum GradleVersionSupport {
43+
LEGACY("2.14"), KOTLIN("4.0"), CONFIG_AVOIDANCE("4.9"), MODERN(SpotlessPluginModern.MINIMUM_GRADLE), SETTINGS_PLUGINS("6.0");
44+
45+
final String version;
46+
47+
GradleVersionSupport(String version) {
48+
this.version = adaptGradleVersionForJdk(adaptGradleVersionForModern(version));
49+
}
50+
}
51+
52+
protected static String adaptGradleVersionForModern(String ver) {
53+
if ("true".equals(System.getProperty(SpotlessPluginModern.SPOTLESS_MODERN))) {
54+
return Double.parseDouble(ver) < Double.parseDouble(SpotlessPluginModern.MINIMUM_GRADLE) ? SpotlessPluginModern.MINIMUM_GRADLE : ver;
55+
}
56+
return ver;
57+
}
58+
59+
/**
60+
* For Java 11+, Gradle 5 is the minimum.
61+
* So if you ask for less than Gradle 5, you get it on Java 8, but on Java 11 you get promoted to Gradle 5.
62+
* If you ask for more than Gradle 5, you'll definitely get it.
63+
*/
64+
protected static String adaptGradleVersionForJdk(String ver) {
65+
JreVersion jre = JreVersion.thisVm();
66+
// @formatter:off
67+
switch (jre) {
68+
case _8: return ver;
69+
case _11: return Double.parseDouble(ver) < 5.0 ? "5.0" : ver;
70+
default: throw new IllegalStateException("Spotless build is only supported on Java 8 and Java 11");
71+
}
72+
// @formatter:on
73+
}
74+
4275
/**
4376
* Each test gets its own temp folder, and we create a gradle
4477
* build there and run it.
@@ -58,30 +91,14 @@ public void gitAttributes() throws IOException {
5891
setFile(".gitattributes").toContent("* text eol=lf");
5992
}
6093

61-
/**
62-
* For Java 11+, Gradle 5 is the minimum.
63-
* So if you ask for less than Gradle 5, you get it on Java 8, but on Java 11 you get promoted to Gradle 5.
64-
* If you ask for more than Gradle 5, you'll definitely get it.
65-
*/
66-
protected static String requestGradleForJre8and11(String ver) {
67-
JreVersion jre = JreVersion.thisVm();
68-
// @formatter:off
69-
switch (jre) {
70-
case _8: return ver;
71-
case _11: return Double.parseDouble(ver) < 5.0 ? "5.0" : ver;
72-
default: throw new IllegalStateException("Spotless build is only supported on Java 8 and Java 11");
73-
}
74-
// @formatter:on
75-
}
76-
7794
protected final GradleRunner gradleRunner() throws IOException {
7895
GradleRunner runner = GradleRunner.create()
79-
.withGradleVersion(requestGradleForJre8and11("2.14"))
96+
.withGradleVersion(GradleVersionSupport.LEGACY.version)
8097
.withProjectDir(rootFolder())
8198
.withPluginClasspath();
8299
if ("true".equals(System.getProperty(SpotlessPluginModern.SPOTLESS_MODERN))) {
83100
runner.withEnvironment(ImmutableMap.of("ORG_GRADLE_PROJECT_" + SpotlessPluginModern.SPOTLESS_MODERN, "true"));
84-
runner.withGradleVersion(SpotlessPluginModern.MINIMUM_GRADLE);
101+
runner.withGradleVersion(GradleVersionSupport.MODERN.version);
85102
}
86103
return runner;
87104
}

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/IdeHookTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private void runWith(String... arguments) throws IOException {
7070
// gradle 4.7 -> 5.1 don't work in tooling API because of https://github.com/gradle/gradle/issues/7617
7171
// gradle 5.1 -> current confirmed to work
7272
gradleRunner()
73-
.withGradleVersion(SpotlessPluginModern.MINIMUM_GRADLE)
73+
.withGradleVersion(GradleVersionSupport.MODERN.version)
7474
.withProjectDir(rootFolder())
7575
.withPluginClasspath()
7676
.withArguments(arguments)

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/MultiProjectAfterEvaluate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ public void failureDoesntTriggerAll() throws IOException {
3939
}
4040

4141
private final GradleRunner gradleRunner6() throws IOException {
42-
return gradleRunner().withGradleVersion("6.0");
42+
return gradleRunner().withGradleVersion(GradleVersionSupport.MODERN.version);
4343
}
4444
}

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RatchetFromTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,11 @@ private void assertDirty() throws Exception {
116116
}
117117

118118
private BuildResultAssertion assertPass(String... tasks) throws Exception {
119-
return new BuildResultAssertion(gradleRunner().withGradleVersion("6.0").withArguments(tasks).build());
119+
return new BuildResultAssertion(gradleRunner().withGradleVersion(GradleVersionSupport.SETTINGS_PLUGINS.version).withArguments(tasks).build());
120120
}
121121

122122
private BuildResultAssertion assertFail(String... tasks) throws Exception {
123-
return new BuildResultAssertion(gradleRunner().withGradleVersion("6.0").withArguments(tasks).buildAndFail());
123+
return new BuildResultAssertion(gradleRunner().withGradleVersion(GradleVersionSupport.SETTINGS_PLUGINS.version).withArguments(tasks).buildAndFail());
124124
}
125125

126126
private static final String BASELINE_ROOT = "ebb03d6940ee0254010e71917735efa203c27e16";

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RegisterDependenciesTaskTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void registerDependencies() throws IOException {
3939
"}");
4040

4141
setFile("gradle.properties").toLines();
42-
String newestSupported = gradleRunner().withGradleVersion(SpotlessPluginModern.MINIMUM_GRADLE)
42+
String newestSupported = gradleRunner().withGradleVersion(GradleVersionSupport.MODERN.version)
4343
.withArguments("spotlessCheck").build().getOutput();
4444
Assertions.assertThat(newestSupported.replace("\r", ""))
4545
.startsWith("> Task :spotlessCheck UP-TO-DATE\n" +

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private void integration(String patterns,
116116
GradleRunner runner = gradleRunner()
117117
.withArguments("spotlessApply", "-PspotlessFiles=" + patterns);
118118
if (isKotlin) {
119-
runner.withGradleVersion(requestGradleForJre8and11("4.0"));
119+
runner.withGradleVersion(GradleVersionSupport.KOTLIN.version);
120120
}
121121
runner.build();
122122

0 commit comments

Comments
 (0)