Skip to content

Commit 55dda5f

Browse files
committed
Add forUseAtConfigurationTime compatibility helper
1 parent dec96fe commit 55dda5f

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@
1515
*/
1616
package com.diffplug.gradle.spotless;
1717

18+
import java.lang.reflect.Method;
19+
20+
import javax.annotation.Nonnull;
21+
1822
import org.gradle.api.GradleException;
1923
import org.gradle.api.JavaVersion;
2024
import org.gradle.api.Plugin;
2125
import org.gradle.api.Project;
2226
import org.gradle.api.plugins.BasePlugin;
27+
import org.gradle.api.provider.Provider;
2328
import org.gradle.util.GradleVersion;
2429

2530
import com.diffplug.spotless.Jvm;
@@ -42,7 +47,9 @@ public void apply(Project project) {
4247
+ "https://docs.gradle.org/current/userguide/building_java_projects.html#sec:java_cross_compilation");
4348
}
4449
// if -PspotlessModern=true, then use the modern stuff instead of the legacy stuff
45-
if (project.getProviders().gradleProperty(SPOTLESS_MODERN).isPresent()) {
50+
Provider<String> spotlessModernProperty = safeForUseAtConfigurationTime(
51+
project.getProviders().gradleProperty(SPOTLESS_MODERN));
52+
if (spotlessModernProperty.isPresent()) {
4653
project.getLogger().warn("'spotlessModern' has no effect as of Spotless 5.0, recommend removing it.");
4754
}
4855
// make sure there's a `clean` and a `check`
@@ -64,4 +71,15 @@ public void apply(Project project) {
6471
static String capitalize(String input) {
6572
return Character.toUpperCase(input.charAt(0)) + input.substring(1);
6673
}
74+
75+
static <T> Provider<T> safeForUseAtConfigurationTime(@Nonnull Provider<T> provider) {
76+
try {
77+
Method method = Provider.class.getMethod("forUseAtConfigurationTime");
78+
@SuppressWarnings("unchecked")
79+
Provider<T> configuredProvider = (Provider<T>) method.invoke(provider);
80+
return configuredProvider;
81+
} catch (ReflectiveOperationException e) {
82+
return provider;
83+
}
84+
}
6785
}

0 commit comments

Comments
 (0)