Skip to content

Commit 27b4b7f

Browse files
committed
Make JacksonJsonStep round-trippable
1 parent 4dd6db4 commit 27b4b7f

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

lib/src/main/java/com/diffplug/spotless/json/JacksonJsonStep.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2021-2023 DiffPlug
2+
* Copyright 2021-2024 DiffPlug
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
1515
*/
1616
package com.diffplug.spotless.json;
1717

18-
import java.io.IOException;
1918
import java.io.Serializable;
2019
import java.lang.reflect.Constructor;
2120
import java.lang.reflect.InvocationTargetException;
@@ -25,48 +24,57 @@
2524
import com.diffplug.spotless.FormatterStep;
2625
import com.diffplug.spotless.JarState;
2726
import com.diffplug.spotless.Provisioner;
27+
import com.diffplug.spotless.RoundedStep;
2828

2929
/**
3030
* Simple YAML formatter which reformats the file according to Jackson YAMLFactory.
3131
*/
3232
// https://stackoverflow.com/questions/14515994/convert-json-string-to-pretty-print-json-output-using-jackson
33-
public class JacksonJsonStep {
34-
static final String MAVEN_COORDINATE = "com.fasterxml.jackson.core:jackson-databind:";
35-
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
36-
static final String DEFAULT_VERSION = "2.14.2";
33+
public class JacksonJsonStep implements RoundedStep {
34+
private static final long serialVersionUID = 1L;
35+
private static final String MAVEN_COORDINATE = "com.fasterxml.jackson.core:jackson-databind:";
36+
private static final String DEFAULT_VERSION = "2.14.2";
37+
public static final String NAME = "jacksonJson";
3738

38-
private JacksonJsonStep() {}
39+
private final JarState.Promised jarState;
40+
private final JacksonConfig jacksonConfig;
41+
42+
private JacksonJsonStep(JarState.Promised jarState, JacksonConfig jacksonConfig) {
43+
this.jarState = jarState;
44+
this.jacksonConfig = jacksonConfig;
45+
}
3946

4047
public static String defaultVersion() {
4148
return DEFAULT_VERSION;
4249
}
4350

51+
public static FormatterStep create(Provisioner provisioner) {
52+
return create(new JacksonJsonConfig(), defaultVersion(), provisioner);
53+
}
54+
4455
public static FormatterStep create(JacksonJsonConfig jacksonConfig,
4556
String jacksonVersion,
4657
Provisioner provisioner) {
4758
Objects.requireNonNull(provisioner, "provisioner cannot be null");
48-
return FormatterStep.createLazy("json",
49-
() -> new State(jacksonConfig, jacksonVersion, provisioner),
59+
return FormatterStep.create(NAME,
60+
new JacksonJsonStep(JarState.promise(() -> JarState.from(MAVEN_COORDINATE + jacksonVersion, provisioner)), jacksonConfig),
61+
JacksonJsonStep::equalityState,
5062
State::toFormatter);
5163
}
5264

53-
public static FormatterStep create(Provisioner provisioner) {
54-
return create(new JacksonJsonConfig(), defaultVersion(), provisioner);
65+
private State equalityState() {
66+
return new State(jarState.get(), jacksonConfig);
5567
}
5668

5769
private static final class State implements Serializable {
5870
private static final long serialVersionUID = 1L;
5971

6072
private final JacksonConfig jacksonConfig;
61-
6273
private final JarState jarState;
6374

64-
private State(JacksonConfig jacksonConfig,
65-
String jacksonVersion,
66-
Provisioner provisioner) throws IOException {
75+
State(JarState jarState, JacksonConfig jacksonConfig) {
76+
this.jarState = jarState;
6777
this.jacksonConfig = jacksonConfig;
68-
69-
this.jarState = JarState.from(JacksonJsonStep.MAVEN_COORDINATE + jacksonVersion, provisioner);
7078
}
7179

7280
FormatterFunc toFormatter() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ protected StepHarnessBase(Formatter formatter) {
5151
supportsRoundTrip = true;
5252
} else if (Set.of("black", "buf", "clang", "ktlint", "ktfmt", "scalafmt", "palantir-java-format", "google-java-format",
5353
"removeUnusedImports", "cleanthat", "No line break between type annotation and type",
54-
"gson",
54+
"gson", "jacksonJson",
5555
"importOrder", "Remove unnecessary semicolons").contains(onlyStepName)) {
5656
supportsRoundTrip = true;
5757
}

0 commit comments

Comments
 (0)