Skip to content

Commit 88a1ad7

Browse files
committed
Support GJF own import order
1 parent 8b1713d commit 88a1ad7

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

Diff for: lib/src/googleJavaFormat/java/com/diffplug/spotless/glue/java/GoogleJavaFormatFormatterFunc.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
import com.diffplug.spotless.FormatterFunc;
3131

32+
// Used via reflection by the Gradle plugin.
33+
@SuppressWarnings("unused")
3234
public class GoogleJavaFormatFormatterFunc implements FormatterFunc {
3335

3436
@Nonnull
@@ -42,10 +44,13 @@ public class GoogleJavaFormatFormatterFunc implements FormatterFunc {
4244

4345
private final boolean reflowStrings;
4446

45-
public GoogleJavaFormatFormatterFunc(@Nonnull String version, @Nonnull String style, boolean reflowStrings) {
47+
private final boolean reorderImports;
48+
49+
public GoogleJavaFormatFormatterFunc(@Nonnull String version, @Nonnull String style, boolean reflowStrings, boolean reorderImports) {
4650
this.version = Objects.requireNonNull(version);
4751
this.formatterStyle = Style.valueOf(Objects.requireNonNull(style));
4852
this.reflowStrings = reflowStrings;
53+
this.reorderImports = reorderImports;
4954

5055
this.formatter = new Formatter(JavaFormatterOptions.builder()
5156
.style(formatterStyle)
@@ -60,7 +65,7 @@ public String apply(@Nonnull String input) throws Exception {
6065
// Issue #1679: we used to call ImportOrderer.reorderImports(String) here, but that is deprecated.
6166
// Replacing the call with (the correct) reorderImports(String, Style) causes issues for Style.AOSP,
6267
// so we force the style to GOOGLE for now (which is what the deprecated method did)
63-
String sortedImports = ImportOrderer.reorderImports(removedUnused, Style.GOOGLE);
68+
String sortedImports = ImportOrderer.reorderImports(removedUnused, reorderImports ? formatterStyle : Style.GOOGLE);
6469
return reflowLongStrings(sortedImports);
6570
}
6671

Diff for: lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,12 @@ public static FormatterStep create(String version, String style, Provisioner pro
5555
return create(MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings);
5656
}
5757

58-
/** Creates a step which formats everything - groupArtifact, code, import order, and unused imports - and optionally reflows long strings. */
5958
public static FormatterStep create(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings) {
59+
return create(groupArtifact, version, style, provisioner, reflowLongStrings, false);
60+
}
61+
62+
/** Creates a step which formats everything - groupArtifact, code, import order, and unused imports - and optionally reflows long strings. */
63+
public static FormatterStep create(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports) {
6064
Objects.requireNonNull(groupArtifact, "groupArtifact");
6165
if (groupArtifact.chars().filter(ch -> ch == ':').count() != 1) {
6266
throw new IllegalArgumentException("groupArtifact must be in the form 'groupId:artifactId'");
@@ -65,7 +69,7 @@ public static FormatterStep create(String groupArtifact, String version, String
6569
Objects.requireNonNull(style, "style");
6670
Objects.requireNonNull(provisioner, "provisioner");
6771
return FormatterStep.createLazy(NAME,
68-
() -> new State(NAME, groupArtifact, version, style, provisioner, reflowLongStrings),
72+
() -> new State(NAME, groupArtifact, version, style, provisioner, reflowLongStrings, reorderImports),
6973
State::createFormat);
7074
}
7175

@@ -101,6 +105,7 @@ static final class State implements Serializable {
101105
final String version;
102106
final String style;
103107
final boolean reflowLongStrings;
108+
final boolean reorderImports;
104109

105110
State(String stepName, String version, Provisioner provisioner) throws Exception {
106111
this(stepName, version, DEFAULT_STYLE, provisioner);
@@ -111,24 +116,25 @@ static final class State implements Serializable {
111116
}
112117

113118
State(String stepName, String version, String style, Provisioner provisioner, boolean reflowLongStrings) throws Exception {
114-
this(stepName, MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings);
119+
this(stepName, MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings, false);
115120
}
116121

117-
State(String stepName, String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings) throws Exception {
122+
State(String stepName, String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports) throws Exception {
118123
JVM_SUPPORT.assertFormatterSupported(version);
119124
ModuleHelper.doOpenInternalPackagesIfRequired();
120125
this.jarState = JarState.from(groupArtifact + ":" + version, provisioner);
121126
this.stepName = stepName;
122127
this.version = version;
123128
this.style = style;
124129
this.reflowLongStrings = reflowLongStrings;
130+
this.reorderImports = reorderImports;
125131
}
126132

127133
FormatterFunc createFormat() throws Exception {
128134
final ClassLoader classLoader = jarState.getClassLoader();
129135
Class<?> formatterFunc = classLoader.loadClass("com.diffplug.spotless.glue.java.GoogleJavaFormatFormatterFunc");
130-
Constructor<?> constructor = formatterFunc.getConstructor(String.class, String.class, boolean.class);
131-
FormatterFunc googleJavaFormatFormatterFunc = (FormatterFunc) constructor.newInstance(version, style, reflowLongStrings);
136+
Constructor<?> constructor = formatterFunc.getConstructor(String.class, String.class, boolean.class, boolean.class);
137+
FormatterFunc googleJavaFormatFormatterFunc = (FormatterFunc) constructor.newInstance(version, style, reflowLongStrings, reorderImports);
132138

133139
return JVM_SUPPORT.suggestLaterVersionOnError(version, googleJavaFormatFormatterFunc);
134140
}

Diff for: plugin-gradle/CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
55
## [Unreleased]
66
### Added
77
* Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753))
8+
* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780))
89
### Fixed
910
* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751))
1011
* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750))

Diff for: plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ public class GoogleJavaFormatConfig {
173173
String groupArtifact;
174174
String style;
175175
boolean reflowLongStrings;
176+
boolean reorderImports;
176177

177178
GoogleJavaFormatConfig(String version) {
178179
this.version = Objects.requireNonNull(version);
@@ -207,13 +208,19 @@ public GoogleJavaFormatConfig reflowLongStrings(boolean reflowLongStrings) {
207208
return this;
208209
}
209210

211+
public GoogleJavaFormatConfig reorderImports(boolean reorderImports) {
212+
this.reorderImports = reorderImports;
213+
return this;
214+
}
215+
210216
private FormatterStep createStep() {
211217
return GoogleJavaFormatStep.create(
212218
groupArtifact,
213219
version,
214220
style,
215221
provisioner(),
216-
reflowLongStrings);
222+
reflowLongStrings,
223+
reorderImports);
217224
}
218225
}
219226

0 commit comments

Comments
 (0)