Skip to content

Commit

Permalink
Workaround to preserve instanceof BuildServiceProvider (blech, see #…
Browse files Browse the repository at this point in the history
…1260 for my complaint).
  • Loading branch information
nedtwigg committed Jul 27, 2022
1 parent 9ab5fe7 commit 3d12cb0
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
Expand Up @@ -24,7 +24,7 @@
import javax.inject.Inject;

import org.gradle.api.DefaultTask;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.services.BuildServiceRegistry;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Internal;
Expand Down Expand Up @@ -63,9 +63,9 @@ void setup() {
Preconditions.checkArgument(getProject().getRootProject() == getProject(), "Can only be used on the root project");
String compositeBuildSuffix = getName().substring(TASK_NAME.length()); // see https://github.com/diffplug/spotless/pull/1001
BuildServiceRegistry buildServices = getProject().getGradle().getSharedServices();
getTaskService().set(buildServices.registerIfAbsent("SpotlessTaskService" + compositeBuildSuffix, SpotlessTaskService.class, spec -> {}));
usesService(getTaskService());
getBuildEventsListenerRegistry().onTaskCompletion(getTaskService());
taskService = buildServices.registerIfAbsent("SpotlessTaskService" + compositeBuildSuffix, SpotlessTaskService.class, spec -> {});
usesService(taskService);
getBuildEventsListenerRegistry().onTaskCompletion(taskService);
unitOutput = new File(getProject().getBuildDir(), "tmp/spotless-register-dependencies");
}

Expand All @@ -89,8 +89,13 @@ public void trivialFunction() throws IOException {
Files.write(Integer.toString(1), unitOutput, StandardCharsets.UTF_8);
}

// this field is stupid, but we need it, see https://github.com/diffplug/spotless/issues/1260
private Provider<SpotlessTaskService> taskService;

@Internal
abstract Property<SpotlessTaskService> getTaskService();
public Provider<SpotlessTaskService> getTaskService() {
return taskService;
}

@Inject
protected abstract BuildEventsListenerRegistry getBuildEventsListenerRegistry();
Expand Down
Expand Up @@ -46,11 +46,20 @@ public abstract class SpotlessTaskImpl extends SpotlessTask {
abstract DirectoryProperty getProjectDir();

void init(Provider<SpotlessTaskService> service) {
taskServiceProvider = service;
usesService(service);
getTaskService().set(service);
getProjectDir().set(getProject().getProjectDir());
}

// this field is stupid, but we need it, see https://github.com/diffplug/spotless/issues/1260
private transient Provider<SpotlessTaskService> taskServiceProvider;

@Internal
Provider<SpotlessTaskService> getTaskServiceProvider() {
return taskServiceProvider;
}

@Inject
protected abstract FileSystemOperations getFs();

Expand Down
Expand Up @@ -105,7 +105,7 @@ static abstract class ClientTask extends DefaultTask {
protected abstract ObjectFactory getConfigCacheWorkaround();

void init(SpotlessTaskImpl impl) {
usesService(impl.getTaskService());
usesService(impl.getTaskServiceProvider());
getSpotlessOutDirectory().set(impl.getOutputDirectory());
getTaskService().set(impl.getTaskService());
getProjectDir().set(impl.getProjectDir());
Expand Down

0 comments on commit 3d12cb0

Please sign in to comment.