15
15
*/
16
16
package com .diffplug .spotless .kotlin ;
17
17
18
- import java .io .IOException ;
19
18
import java .io .Serializable ;
20
19
import java .lang .reflect .Constructor ;
21
20
import java .util .Collections ;
33
32
import com .diffplug .spotless .FormatterStep ;
34
33
import com .diffplug .spotless .JarState ;
35
34
import com .diffplug .spotless .Provisioner ;
35
+ import com .diffplug .spotless .RoundedStep ;
36
36
37
37
/** 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 ;
42
40
private static final String DEFAULT_VERSION = "1.1.1" ;
43
41
private static final String NAME = "ktlint" ;
44
42
private static final String MAVEN_COORDINATE_0_DOT = "com.pinterest:ktlint:" ;
45
43
private static final String MAVEN_COORDINATE_1_DOT = "com.pinterest.ktlint:ktlint-cli:" ;
46
44
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
+
47
61
public static FormatterStep create (Provisioner provisioner ) {
48
62
return create (defaultVersion (), provisioner );
49
63
}
@@ -59,15 +73,23 @@ public static FormatterStep create(String version,
59
73
List <String > customRuleSets ) {
60
74
Objects .requireNonNull (version , "version" );
61
75
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 ,
64
82
State ::createFormat );
65
83
}
66
84
67
85
public static String defaultVersion () {
68
86
return DEFAULT_VERSION ;
69
87
}
70
88
89
+ private State equalityState () {
90
+ return new State (version , jarState .get (), config != null ? config .get () : null , editorConfigOverride );
91
+ }
92
+
71
93
private static final class State implements Serializable {
72
94
private static final long serialVersionUID = 1L ;
73
95
/** The jar that contains the formatter. */
@@ -78,16 +100,12 @@ private static final class State implements Serializable {
78
100
private final FileSignature editorConfigPath ;
79
101
80
102
State (String version ,
81
- Provisioner provisioner ,
103
+ JarState jarState ,
82
104
@ Nullable FileSignature editorConfigPath ,
83
- Map <String , Object > editorConfigOverride ,
84
- List <String > customRuleSets ) throws IOException {
105
+ Map <String , Object > editorConfigOverride ) {
85
106
this .version = version ;
107
+ this .jarState = jarState ;
86
108
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 );
91
109
this .editorConfigPath = editorConfigPath ;
92
110
}
93
111
0 commit comments