Skip to content

Commit 6f7edd3

Browse files
committed
Make DiktatStep round-trippable.
1 parent e4d6c49 commit 6f7edd3

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

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

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,16 @@
2525
import com.diffplug.spotless.*;
2626

2727
/** Wraps up <a href="https://github.com/cqfn/diKTat">diktat</a> as a FormatterStep. */
28-
public class DiktatStep {
29-
30-
// prevent direct instantiation
31-
private DiktatStep() {}
28+
public class DiktatStep extends FormatterStepEqualityOnStateSerialization<DiktatStep.State> {
29+
private final JarState.Promised jarState;
30+
private final boolean isScript;
31+
private final @Nullable FileSignature.RoundTrippable config;
32+
33+
private DiktatStep(JarState.Promised jarState, boolean isScript, @Nullable FileSignature config) {
34+
this.jarState = jarState;
35+
this.isScript = isScript;
36+
this.config = FileSignature.roundTrippableNullable(config);
37+
}
3238

3339
private static final String MIN_SUPPORTED_VERSION = "1.2.1";
3440

@@ -59,26 +65,35 @@ public static FormatterStep create(String versionDiktat, Provisioner provisioner
5965
}
6066
Objects.requireNonNull(versionDiktat, "versionDiktat");
6167
Objects.requireNonNull(provisioner, "provisioner");
62-
return FormatterStep.createLazy(NAME,
63-
() -> new DiktatStep.State(versionDiktat, provisioner, isScript, config),
64-
DiktatStep.State::createFormat);
68+
return new DiktatStep(JarState.promise(() -> JarState.from(MAVEN_COORDINATE + versionDiktat, provisioner)), isScript, config);
69+
}
70+
71+
@Override
72+
public String getName() {
73+
return NAME;
74+
}
75+
76+
@Override
77+
protected State stateSupplier() throws Exception {
78+
return new State(jarState.get(), isScript, FileSignature.stripAbsolutePathsNullable(config));
79+
}
80+
81+
@Override
82+
protected FormatterFunc stateToFormatter(State state) throws Exception {
83+
return state.createFormat();
6584
}
6685

6786
static final class State implements Serializable {
6887

6988
private static final long serialVersionUID = 1L;
7089

90+
final JarState jar;
7191
/** Are the files being linted Kotlin script files. */
7292
private final boolean isScript;
7393
private final @Nullable FileSignature config;
74-
final JarState jar;
75-
76-
State(String versionDiktat, Provisioner provisioner, boolean isScript, @Nullable FileSignature config) throws IOException {
77-
78-
HashSet<String> pkgSet = new HashSet<>();
79-
pkgSet.add(MAVEN_COORDINATE + versionDiktat);
8094

81-
this.jar = JarState.from(pkgSet, provisioner);
95+
State(JarState jar, boolean isScript, @Nullable FileSignature config) throws IOException {
96+
this.jar = jar;
8297
this.isScript = isScript;
8398
this.config = config;
8499
}

testlib/src/main/java/com/diffplug/spotless/StepHarnessBase.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ protected StepHarnessBase(Formatter formatter) {
4141
String onlyStepName = formatter.getSteps().get(0).getName();
4242
if (onlyStepName.startsWith("indentWith")) {
4343
supportsRoundTrip = true;
44+
} else if (onlyStepName.equals("diktat")) {
45+
supportsRoundTrip = true;
4446
}
4547
}
4648
}

0 commit comments

Comments
 (0)