Skip to content

Commit 4e10fd4

Browse files
committed
Make KtLintStep round-trippable
1 parent 6d04f18 commit 4e10fd4

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

lib/src/main/java/com/diffplug/spotless/kotlin/KtLintStep.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.diffplug.spotless.kotlin;
1717

18-
import java.io.IOException;
1918
import java.io.Serializable;
2019
import java.lang.reflect.Constructor;
2120
import java.util.Collections;
@@ -33,17 +32,32 @@
3332
import com.diffplug.spotless.FormatterStep;
3433
import com.diffplug.spotless.JarState;
3534
import com.diffplug.spotless.Provisioner;
35+
import com.diffplug.spotless.RoundedStep;
3636

3737
/** Wraps up <a href="https://github.com/pinterest/ktlint">ktlint</a> as a FormatterStep. */
38-
public class KtLintStep {
39-
// prevent direct instantiation
40-
private KtLintStep() {}
41-
38+
public class KtLintStep implements RoundedStep {
39+
private static final long serialVersionUID = 1L;
4240
private static final String DEFAULT_VERSION = "1.1.1";
4341
private static final String NAME = "ktlint";
4442
private static final String MAVEN_COORDINATE_0_DOT = "com.pinterest:ktlint:";
4543
private static final String MAVEN_COORDINATE_1_DOT = "com.pinterest.ktlint:ktlint-cli:";
4644

45+
private final JarState.Promised jarState;
46+
@Nullable
47+
private final FileSignature.Promised config;
48+
private final Map<String, Object> editorConfigOverride;
49+
private final String version;
50+
51+
private KtLintStep(String version,
52+
JarState.Promised jarState,
53+
@Nullable FileSignature config,
54+
Map<String, Object> editorConfigOverride) {
55+
this.version = version;
56+
this.jarState = jarState;
57+
this.config = config != null ? config.asPromise() : null;
58+
this.editorConfigOverride = editorConfigOverride;
59+
}
60+
4761
public static FormatterStep create(Provisioner provisioner) {
4862
return create(defaultVersion(), provisioner);
4963
}
@@ -59,15 +73,23 @@ public static FormatterStep create(String version,
5973
List<String> customRuleSets) {
6074
Objects.requireNonNull(version, "version");
6175
Objects.requireNonNull(provisioner, "provisioner");
62-
return FormatterStep.createLazy(NAME,
63-
() -> new State(version, provisioner, editorConfig, editorConfigOverride, customRuleSets),
76+
String ktlintCoordinate = (version.startsWith("0.") ? MAVEN_COORDINATE_0_DOT : MAVEN_COORDINATE_1_DOT) + version;
77+
Set<String> mavenCoordinates = new HashSet<>(customRuleSets);
78+
mavenCoordinates.add(ktlintCoordinate);
79+
return FormatterStep.create(NAME,
80+
new KtLintStep(version, JarState.promise(() -> JarState.from(mavenCoordinates, provisioner)), editorConfig, editorConfigOverride),
81+
KtLintStep::equalityState,
6482
State::createFormat);
6583
}
6684

6785
public static String defaultVersion() {
6886
return DEFAULT_VERSION;
6987
}
7088

89+
private State equalityState() {
90+
return new State(version, jarState.get(), config != null ? config.get() : null, editorConfigOverride);
91+
}
92+
7193
private static final class State implements Serializable {
7294
private static final long serialVersionUID = 1L;
7395
/** The jar that contains the formatter. */
@@ -78,16 +100,12 @@ private static final class State implements Serializable {
78100
private final FileSignature editorConfigPath;
79101

80102
State(String version,
81-
Provisioner provisioner,
103+
JarState jarState,
82104
@Nullable FileSignature editorConfigPath,
83-
Map<String, Object> editorConfigOverride,
84-
List<String> customRuleSets) throws IOException {
105+
Map<String, Object> editorConfigOverride) {
85106
this.version = version;
107+
this.jarState = jarState;
86108
this.editorConfigOverride = new TreeMap<>(editorConfigOverride);
87-
String ktlintCoordinate = (version.startsWith("0.") ? MAVEN_COORDINATE_0_DOT : MAVEN_COORDINATE_1_DOT) + version;
88-
Set<String> mavenCoordinates = new HashSet<>(customRuleSets);
89-
mavenCoordinates.add(ktlintCoordinate);
90-
this.jarState = JarState.from(mavenCoordinates, provisioner);
91109
this.editorConfigPath = editorConfigPath;
92110
}
93111

0 commit comments

Comments
 (0)