From 0f9d0d09a38d62b80dcecb71cfbf5f0fe0b93b00 Mon Sep 17 00:00:00 2001
From: iamdanfox <iamdanfox@gmail.com>
Date: Thu, 9 Jan 2020 17:47:51 +0000
Subject: [PATCH] baseline-class-uniqueness is updated by `./gradlew
 --write-locks` (#1153)

Running `./gradlew --write-locks` will now update the baseline-class-uniqueness.lock file.
---
 changelog/@unreleased/pr-1153.v2.yml          |  6 ++++++
 .../BaselineClassUniquenessPlugin.java        | 20 ++++++++++++++++---
 ...lassUniquenessPluginIntegrationTest.groovy |  2 +-
 3 files changed, 24 insertions(+), 4 deletions(-)
 create mode 100644 changelog/@unreleased/pr-1153.v2.yml

diff --git a/changelog/@unreleased/pr-1153.v2.yml b/changelog/@unreleased/pr-1153.v2.yml
new file mode 100644
index 000000000..4fa03fb4b
--- /dev/null
+++ b/changelog/@unreleased/pr-1153.v2.yml
@@ -0,0 +1,6 @@
+type: fix
+fix:
+  description: Running `./gradlew --write-locks` will now update the baseline-class-uniqueness.lock
+    file.
+  links:
+  - https://github.com/palantir/gradle-baseline/pull/1153
diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java
index b57a4ce80..69daec35c 100644
--- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java
+++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java
@@ -16,7 +16,10 @@
 
 package com.palantir.baseline.plugins;
 
+import com.google.common.collect.ImmutableList;
 import com.palantir.baseline.tasks.CheckClassUniquenessLockTask;
+import java.util.List;
+import org.gradle.StartParameter;
 import org.gradle.api.Project;
 import org.gradle.api.plugins.JavaPlugin;
 import org.gradle.api.tasks.TaskProvider;
@@ -32,14 +35,25 @@
 public class BaselineClassUniquenessPlugin extends AbstractBaselinePlugin {
     @Override
     public final void apply(Project project) {
-        TaskProvider<CheckClassUniquenessLockTask> lockTask =
+        TaskProvider<CheckClassUniquenessLockTask> checkClassUniqueness =
                 project.getTasks().register("checkClassUniqueness", CheckClassUniquenessLockTask.class);
         project.getPlugins().apply(LifecycleBasePlugin.class);
-        project.getTasks().getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(lockTask);
+        project.getTasks().getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(checkClassUniqueness);
 
         project.getPlugins().withId("java", plugin -> {
-            lockTask.configure(t -> t.configurations.add(
+            checkClassUniqueness.configure(t -> t.configurations.add(
                     project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)));
         });
+
+        // Wire up dependencies so running `./gradlew --write-locks` will update the lock file
+        StartParameter startParam = project.getGradle().getStartParameter();
+        if (startParam.isWriteDependencyLocks()
+                && !startParam.getTaskNames().contains(checkClassUniqueness.getName())) {
+            List<String> taskNames = ImmutableList.<String>builder()
+                    .addAll(startParam.getTaskNames())
+                    .add(checkClassUniqueness.getName())
+                    .build();
+            startParam.setTaskNames(taskNames);
+        }
     }
 }
diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineClassUniquenessPluginIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineClassUniquenessPluginIntegrationTest.groovy
index 61a727ecc..b314fb1fc 100644
--- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineClassUniquenessPluginIntegrationTest.groovy
+++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineClassUniquenessPluginIntegrationTest.groovy
@@ -57,7 +57,7 @@ class BaselineClassUniquenessPluginIntegrationTest extends AbstractPluginTest {
         result.getOutput().contains("javax.el.ArrayELResolver");
         !lockfile.exists()
 
-        with("checkClassUniqueness", "--write-locks").build()
+        with("--write-locks").build()
         lockfile.exists()
 
         File expected = new File("src/test/resources/com/palantir/baseline/baseline-class-uniqueness.expected.lock")