Skip to content

Commit 0b66cca

Browse files
committed
Make RemoveUnusedImportsStep round-trippable
1 parent 4747a73 commit 0b66cca

File tree

3 files changed

+36
-25
lines changed

3 files changed

+36
-25
lines changed

lib/src/main/java/com/diffplug/spotless/java/CleanthatJavaStep.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ private State equalityState() {
131131
return new State(jarState.get(), version, sourceJdkVersion, included, excluded, includeDraft);
132132
}
133133

134-
static final class State implements Serializable {
134+
private static final class State implements Serializable {
135135
private static final long serialVersionUID = 1L;
136136

137137
private final JarState jarState;

lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,34 @@ public static FormatterStep create(String groupArtifact, String version, String
8888

8989
/** Creates a step which formats everything - groupArtifact, code, import order, and unused imports - and optionally reflows long strings. */
9090
public static FormatterStep create(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports, boolean formatJavadoc) {
91+
return createInternally(groupArtifact, version, style, provisioner, reflowLongStrings, reorderImports, formatJavadoc, false);
92+
}
93+
94+
static FormatterStep createRemoveUnusedImportsOnly(Provisioner provisioner) {
95+
return createInternally(MAVEN_COORDINATE, defaultVersion(), defaultStyle(), provisioner, defaultReflowLongStrings(), defaultReorderImports(), defaultFormatJavadoc(), true);
96+
}
97+
98+
private static FormatterStep createInternally(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports, boolean formatJavadoc, boolean removeImports) {
9199
Objects.requireNonNull(groupArtifact, "groupArtifact");
92100
if (groupArtifact.chars().filter(ch -> ch == ':').count() != 1) {
93101
throw new IllegalArgumentException("groupArtifact must be in the form 'groupId:artifactId'");
94102
}
95103
Objects.requireNonNull(version, "version");
96104
Objects.requireNonNull(style, "style");
97105
Objects.requireNonNull(provisioner, "provisioner");
98-
return FormatterStep.create(NAME,
99-
new GoogleJavaFormatStep(JarState.promise(() -> JarState.from(groupArtifact + ":" + version, provisioner)), version, style, reflowLongStrings, reorderImports, formatJavadoc),
100-
GoogleJavaFormatStep::equalityState,
101-
State::createFormat);
106+
107+
GoogleJavaFormatStep step = new GoogleJavaFormatStep(JarState.promise(() -> JarState.from(groupArtifact + ":" + version, provisioner)), version, style, reflowLongStrings, reorderImports, formatJavadoc);
108+
if (removeImports) {
109+
return FormatterStep.create(NAME,
110+
step,
111+
GoogleJavaFormatStep::equalityState,
112+
State::createRemoveUnusedImportsOnly);
113+
} else {
114+
return FormatterStep.create(NAME,
115+
step,
116+
GoogleJavaFormatStep::equalityState,
117+
State::createFormat);
118+
}
102119
}
103120

104121
private static final Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support(NAME)
@@ -136,7 +153,7 @@ private State equalityState() {
136153
return new State(version, style, jarState.get(), reflowLongStrings, reorderImports, formatJavadoc);
137154
}
138155

139-
static final class State implements Serializable {
156+
private static final class State implements Serializable {
140157
private static final long serialVersionUID = 1L;
141158

142159
private final JarState jarState;
@@ -146,10 +163,6 @@ static final class State implements Serializable {
146163
private final boolean reorderImports;
147164
private final boolean formatJavadoc;
148165

149-
State(String version, JarState jarState) {
150-
this(version, DEFAULT_STYLE, jarState, DEFAULT_REFLOW_LONG_STRINGS, DEFAULT_REORDER_IMPORTS, DEFAULT_FORMAT_JAVADOC);
151-
}
152-
153166
State(String version,
154167
String style,
155168
JarState jarState,

lib/src/main/java/com/diffplug/spotless/java/RemoveUnusedImportsStep.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016-2023 DiffPlug
2+
* Copyright 2016-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,15 +15,17 @@
1515
*/
1616
package com.diffplug.spotless.java;
1717

18-
import java.util.Arrays;
18+
import java.util.List;
1919
import java.util.Objects;
2020

2121
import com.diffplug.spotless.FormatterStep;
2222
import com.diffplug.spotless.Provisioner;
23+
import com.diffplug.spotless.RoundedStep;
2324

2425
/** Uses google-java-format or cleanthat.UnnecessaryImport, but only to remove unused imports. */
25-
public class RemoveUnusedImportsStep {
26-
static final String NAME = "removeUnusedImports";
26+
public class RemoveUnusedImportsStep implements RoundedStep {
27+
private static final long serialVersionUID = 1L;
28+
private static final String NAME = "removeUnusedImports";
2729

2830
static final String GJF = "google-java-format";
2931
static final String CLEANTHAT = "cleanthat-javaparser-unnecessaryimport";
@@ -34,7 +36,7 @@ public class RemoveUnusedImportsStep {
3436
// prevent direct instantiation
3537
private RemoveUnusedImportsStep() {}
3638

37-
public static final String defaultFormatter() {
39+
public static String defaultFormatter() {
3840
return GJF;
3941
}
4042

@@ -45,16 +47,12 @@ public static FormatterStep create(Provisioner provisioner) {
4547

4648
public static FormatterStep create(String unusedImportRemover, Provisioner provisioner) {
4749
Objects.requireNonNull(provisioner, "provisioner");
48-
49-
if (GJF.equals(unusedImportRemover)) {
50-
return FormatterStep.createLazy(NAME,
51-
() -> new GoogleJavaFormatStep.State(NAME, GoogleJavaFormatStep.defaultVersion(), provisioner),
52-
GoogleJavaFormatStep.State::createRemoveUnusedImportsOnly);
53-
} else if (CLEANTHAT.equals(unusedImportRemover)) {
54-
return FormatterStep.createLazy(NAME,
55-
() -> new CleanthatJavaStep.State(NAME, CleanthatJavaStep.defaultGroupArtifact(), CleanthatJavaStep.defaultVersion(), "99.9", Arrays.asList(CLEANTHAT_MUTATOR), Arrays.asList(), false, provisioner),
56-
CleanthatJavaStep.State::createFormat);
57-
} else {
50+
switch (unusedImportRemover) {
51+
case GJF:
52+
return GoogleJavaFormatStep.createRemoveUnusedImportsOnly(provisioner);
53+
case CLEANTHAT:
54+
return CleanthatJavaStep.create(CleanthatJavaStep.defaultGroupArtifact(), CleanthatJavaStep.defaultVersion(), "99.9", List.of(CLEANTHAT_MUTATOR), List.of(), false, provisioner);
55+
default:
5856
throw new IllegalArgumentException("Invalid unusedImportRemover: " + unusedImportRemover);
5957
}
6058
}

0 commit comments

Comments
 (0)