24
24
import com .diffplug .spotless .JarState ;
25
25
import com .diffplug .spotless .Jvm ;
26
26
import com .diffplug .spotless .Provisioner ;
27
+ import com .diffplug .spotless .RoundedStep ;
27
28
28
29
/** Wraps up <a href="https://github.com/google/google-java-format">google-java-format</a> as a FormatterStep. */
29
- public class GoogleJavaFormatStep {
30
- // prevent direct instantiation
31
- private GoogleJavaFormatStep () {}
32
-
30
+ public class GoogleJavaFormatStep implements RoundedStep {
31
+ private static final long serialVersionUID = 1L ;
33
32
private static final String DEFAULT_STYLE = "GOOGLE" ;
34
33
private static final boolean DEFAULT_REFLOW_LONG_STRINGS = false ;
35
34
private static final boolean DEFAULT_REORDER_IMPORTS = false ;
36
35
private static final boolean DEFAULT_FORMAT_JAVADOC = true ;
37
- static final String NAME = "google-java-format" ;
38
- public static final String MAVEN_COORDINATE = "com.google.googlejavaformat:google-java-format" ;
36
+ private static final String NAME = "google-java-format" ;
37
+ private static final String MAVEN_COORDINATE = "com.google.googlejavaformat:google-java-format" ;
38
+
39
+ /** The jar that contains the formatter. */
40
+ private final JarState .Promised jarState ;
41
+ private final String version ;
42
+ private final String style ;
43
+ private final boolean reflowLongStrings ;
44
+ private final boolean reorderImports ;
45
+ private final boolean formatJavadoc ;
46
+
47
+ private GoogleJavaFormatStep (JarState .Promised jarState ,
48
+ String version ,
49
+ String style ,
50
+ boolean reflowLongStrings ,
51
+ boolean reorderImports ,
52
+ boolean formatJavadoc ) {
53
+ this .jarState = jarState ;
54
+ this .version = version ;
55
+ this .style = style ;
56
+ this .reflowLongStrings = reflowLongStrings ;
57
+ this .reorderImports = reorderImports ;
58
+ this .formatJavadoc = formatJavadoc ;
59
+ }
39
60
40
61
/** Creates a step which formats everything - code, import order, and unused imports. */
41
62
public static FormatterStep create (Provisioner provisioner ) {
@@ -74,12 +95,13 @@ public static FormatterStep create(String groupArtifact, String version, String
74
95
Objects .requireNonNull (version , "version" );
75
96
Objects .requireNonNull (style , "style" );
76
97
Objects .requireNonNull (provisioner , "provisioner" );
77
- return FormatterStep .createLazy (NAME ,
78
- () -> new State (NAME , groupArtifact , version , style , provisioner , reflowLongStrings , reorderImports , formatJavadoc ),
98
+ return FormatterStep .create (NAME ,
99
+ new GoogleJavaFormatStep (JarState .promise (() -> JarState .from (groupArtifact + ":" + version , provisioner )), version , style , reflowLongStrings , reorderImports , formatJavadoc ),
100
+ GoogleJavaFormatStep ::equalityState ,
79
101
State ::createFormat );
80
102
}
81
103
82
- static final Jvm .Support <String > JVM_SUPPORT = Jvm .<String > support (NAME )
104
+ private static final Jvm .Support <String > JVM_SUPPORT = Jvm .<String > support (NAME )
83
105
.addMin (11 , "1.8" ) // we only support google-java-format >= 1.8 due to api changes
84
106
.addMin (16 , "1.10.0" ) // java 16 requires at least 1.10.0 due to jdk api changes in JavaTokenizer
85
107
.addMin (21 , "1.17.0" ) // java 21 requires at least 1.17.0 due to https://github.com/google/google-java-format/issues/898
@@ -91,7 +113,7 @@ public static String defaultGroupArtifact() {
91
113
92
114
/** Get default formatter version */
93
115
public static String defaultVersion () {
94
- return JVM_SUPPORT .getRecommendedFormatterVersion ();
116
+ return Objects . requireNonNull ( JVM_SUPPORT .getRecommendedFormatterVersion () );
95
117
}
96
118
97
119
public static String defaultStyle () {
@@ -110,39 +132,33 @@ public static boolean defaultFormatJavadoc() {
110
132
return DEFAULT_FORMAT_JAVADOC ;
111
133
}
112
134
135
+ private State equalityState () {
136
+ return new State (version , style , jarState .get (), reflowLongStrings , reorderImports , formatJavadoc );
137
+ }
138
+
113
139
static final class State implements Serializable {
114
140
private static final long serialVersionUID = 1L ;
115
141
116
- /** The jar that contains the formatter. */
117
- final JarState jarState ;
118
- final String stepName ;
119
- final String version ;
120
- final String style ;
121
- final boolean reflowLongStrings ;
122
- final boolean reorderImports ;
123
- final boolean formatJavadoc ;
124
-
125
- State (String stepName , String version , Provisioner provisioner ) throws Exception {
126
- this (stepName , version , DEFAULT_STYLE , provisioner );
127
- }
142
+ private final JarState jarState ;
143
+ private final String version ;
144
+ private final String style ;
145
+ private final boolean reflowLongStrings ;
146
+ private final boolean reorderImports ;
147
+ private final boolean formatJavadoc ;
128
148
129
- State (String stepName , String version , String style , Provisioner provisioner ) throws Exception {
130
- this (stepName , version , style , provisioner , DEFAULT_REFLOW_LONG_STRINGS );
149
+ State (String version , JarState jarState ) {
150
+ this (version , DEFAULT_STYLE , jarState , DEFAULT_REFLOW_LONG_STRINGS , DEFAULT_REORDER_IMPORTS , DEFAULT_FORMAT_JAVADOC );
131
151
}
132
152
133
- State (String stepName , String version , String style , Provisioner provisioner , boolean reflowLongStrings ) throws Exception {
134
- this (stepName , version , style , provisioner , reflowLongStrings , DEFAULT_REORDER_IMPORTS );
135
- }
136
-
137
- State (String stepName , String version , String style , Provisioner provisioner , boolean reflowLongStrings , boolean reorderImports ) throws Exception {
138
- this (stepName , MAVEN_COORDINATE , version , style , provisioner , reflowLongStrings , reorderImports , DEFAULT_FORMAT_JAVADOC );
139
- }
140
-
141
- State (String stepName , String groupArtifact , String version , String style , Provisioner provisioner , boolean reflowLongStrings , boolean reorderImports , boolean formatJavadoc ) throws Exception {
153
+ State (String version ,
154
+ String style ,
155
+ JarState jarState ,
156
+ boolean reflowLongStrings ,
157
+ boolean reorderImports ,
158
+ boolean formatJavadoc ) {
142
159
JVM_SUPPORT .assertFormatterSupported (version );
143
160
ModuleHelper .doOpenInternalPackagesIfRequired ();
144
- this .jarState = JarState .from (groupArtifact + ":" + version , provisioner );
145
- this .stepName = stepName ;
161
+ this .jarState = jarState ;
146
162
this .version = version ;
147
163
this .style = style ;
148
164
this .reflowLongStrings = reflowLongStrings ;
@@ -167,7 +183,5 @@ FormatterFunc createRemoveUnusedImportsOnly() throws Exception {
167
183
168
184
return JVM_SUPPORT .suggestLaterVersionOnError (version , googleJavaFormatRemoveUnusedImporterFormatterFunc );
169
185
}
170
-
171
186
}
172
-
173
187
}
0 commit comments