Skip to content

Commit 027aec0

Browse files
authored
Upgrade Cleanthat to 2.6, enable draft, and add support for -SNAPSHOT in JvmSupport (#1574O
2 parents 498b0c8 + 224be58 commit 027aec0

File tree

9 files changed

+90
-23
lines changed

9 files changed

+90
-23
lines changed

lib/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ dependencies {
108108

109109
gsonCompileOnly 'com.google.code.gson:gson:2.10.1'
110110

111-
cleanthatCompileOnly 'io.github.solven-eu.cleanthat:java:2.2'
112-
compatCleanthat2Dot1CompileAndTestOnly 'io.github.solven-eu.cleanthat:java:2.2'
111+
cleanthatCompileOnly 'io.github.solven-eu.cleanthat:java:2.6'
112+
compatCleanthat2Dot1CompileAndTestOnly 'io.github.solven-eu.cleanthat:java:2.6'
113113
}
114114

115115
// we'll hold the core lib to a high standard

lib/src/cleanthat/java/com/diffplug/spotless/glue/java/JavaCleanthatRefactorerFunc.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,17 @@ public class JavaCleanthatRefactorerFunc implements FormatterFunc {
4242
private String jdkVersion;
4343
private List<String> included;
4444
private List<String> excluded;
45+
private boolean includeDraft;
4546

46-
public JavaCleanthatRefactorerFunc(String jdkVersion, List<String> included, List<String> excluded) {
47+
public JavaCleanthatRefactorerFunc(String jdkVersion, List<String> included, List<String> excluded, boolean includeDraft) {
4748
this.jdkVersion = jdkVersion == null ? IJdkVersionConstants.JDK_8 : jdkVersion;
4849
this.included = included == null ? Collections.emptyList() : included;
4950
this.excluded = excluded == null ? Collections.emptyList() : excluded;
51+
this.includeDraft = includeDraft;
5052
}
5153

5254
public JavaCleanthatRefactorerFunc() {
53-
this(IJdkVersionConstants.JDK_8, Arrays.asList(JavaRefactorerProperties.WILDCARD), Arrays.asList());
55+
this(IJdkVersionConstants.JDK_8, Arrays.asList("SafeAndConsensual"), Arrays.asList(), false);
5456
}
5557

5658
@Override
@@ -79,9 +81,11 @@ private String doApply(String input) throws InterruptedException, IOException {
7981
refactorerProperties.setIncluded(included);
8082
refactorerProperties.setExcluded(excluded);
8183

84+
refactorerProperties.setIncludeDraft(includeDraft);
85+
8286
JavaRefactorer refactorer = new JavaRefactorer(engineProperties, refactorerProperties);
8387

84-
LOGGER.debug("Processing sourceJdk={} included={} excluded={}", jdkVersion, included, excluded);
88+
LOGGER.debug("Processing sourceJdk={} included={} excluded={}", jdkVersion, included, excluded, includeDraft);
8589
LOGGER.debug("Available mutators: {}", JavaRefactorer.getAllIncluded());
8690

8791
// Spotless calls steps always with LF eol.

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

+36-16
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public final class CleanthatJavaStep {
4040
private static final String MAVEN_COORDINATE = "io.github.solven-eu.cleanthat:java";
4141

4242
// CleanThat changelog is available at https://github.com/solven-eu/cleanthat/blob/master/CHANGES.MD
43-
private static final Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support(NAME).add(11, "2.2");
43+
private static final Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support(NAME).add(11, "2.6");
4444

4545
// prevent direct instantiation
4646
private CleanthatJavaStep() {}
@@ -52,7 +52,7 @@ public static FormatterStep create(Provisioner provisioner) {
5252

5353
/** Creates a step which apply default CleanThat mutators. */
5454
public static FormatterStep create(String version, Provisioner provisioner) {
55-
return create(MAVEN_COORDINATE, version, defaultSourceJdk(), defaultExcludedMutators(), defaultMutators(), provisioner);
55+
return create(MAVEN_COORDINATE, version, defaultSourceJdk(), defaultMutators(), defaultExcludedMutators(), defaultIncludeDraft(), provisioner);
5656
}
5757

5858
public static String defaultSourceJdk() {
@@ -62,16 +62,21 @@ public static String defaultSourceJdk() {
6262
return "1.7";
6363
}
6464

65-
public static List<String> defaultExcludedMutators() {
66-
return List.of();
67-
}
68-
6965
/**
70-
* By default, we include all available rules
66+
* By default, we include only safe and consensual mutators
7167
* @return
7268
*/
7369
public static List<String> defaultMutators() {
74-
return List.of("eu.solven.cleanthat.engine.java.refactorer.mutators.composite.SafeAndConsensualMutators");
70+
// see ICleanthatStepParametersProperties.SAFE_AND_CONSENSUAL
71+
return List.of("SafeAndConsensual");
72+
}
73+
74+
public static List<String> defaultExcludedMutators() {
75+
return List.of();
76+
}
77+
78+
public static boolean defaultIncludeDraft() {
79+
return false;
7580
}
7681

7782
/** Creates a step which apply selected CleanThat mutators. */
@@ -80,6 +85,7 @@ public static FormatterStep create(String groupArtifact,
8085
String sourceJdkVersion,
8186
List<String> excluded,
8287
List<String> included,
88+
boolean includeDraft,
8389
Provisioner provisioner) {
8490
Objects.requireNonNull(groupArtifact, "groupArtifact");
8591
if (groupArtifact.chars().filter(ch -> ch == ':').count() != 1) {
@@ -88,7 +94,7 @@ public static FormatterStep create(String groupArtifact,
8894
Objects.requireNonNull(version, "version");
8995
Objects.requireNonNull(provisioner, "provisioner");
9096
return FormatterStep.createLazy(NAME,
91-
() -> new JavaRefactorerState(NAME, groupArtifact, version, sourceJdkVersion, excluded, included, provisioner),
97+
() -> new JavaRefactorerState(NAME, groupArtifact, version, sourceJdkVersion, excluded, included, includeDraft, provisioner),
9298
JavaRefactorerState::createFormat);
9399
}
94100

@@ -111,9 +117,10 @@ static final class JavaRefactorerState implements Serializable {
111117
final String sourceJdkVersion;
112118
final List<String> included;
113119
final List<String> excluded;
120+
final boolean includeDraft;
114121

115122
JavaRefactorerState(String stepName, String version, Provisioner provisioner) throws IOException {
116-
this(stepName, MAVEN_COORDINATE, version, defaultSourceJdk(), defaultExcludedMutators(), defaultMutators(), provisioner);
123+
this(stepName, MAVEN_COORDINATE, version, defaultSourceJdk(), defaultExcludedMutators(), defaultMutators(), defaultIncludeDraft(), provisioner);
117124
}
118125

119126
JavaRefactorerState(String stepName,
@@ -122,8 +129,12 @@ static final class JavaRefactorerState implements Serializable {
122129
String sourceJdkVersion,
123130
List<String> included,
124131
List<String> excluded,
132+
boolean includeDraft,
125133
Provisioner provisioner) throws IOException {
126-
JVM_SUPPORT.assertFormatterSupported(version);
134+
// https://github.com/diffplug/spotless/issues/1583
135+
if (!version.endsWith("-SNAPSHOT")) {
136+
JVM_SUPPORT.assertFormatterSupported(version);
137+
}
127138
ModuleHelper.doOpenInternalPackagesIfRequired();
128139
this.jarState = JarState.from(groupArtifact + ":" + version, provisioner);
129140
this.stepName = stepName;
@@ -132,6 +143,7 @@ static final class JavaRefactorerState implements Serializable {
132143
this.sourceJdkVersion = sourceJdkVersion;
133144
this.included = included;
134145
this.excluded = excluded;
146+
this.includeDraft = includeDraft;
135147
}
136148

137149
@SuppressWarnings("PMD.UseProperClassLoader")
@@ -142,16 +154,24 @@ FormatterFunc createFormat() {
142154
Method formatterMethod;
143155
try {
144156
Class<?> formatterClazz = classLoader.loadClass("com.diffplug.spotless.glue.java.JavaCleanthatRefactorerFunc");
145-
Constructor<?> formatterConstructor = formatterClazz.getConstructor(String.class, List.class, List.class);
157+
Constructor<?> formatterConstructor = formatterClazz.getConstructor(String.class, List.class, List.class, boolean.class);
146158

147-
formatter = formatterConstructor.newInstance(sourceJdkVersion, included, excluded);
159+
formatter = formatterConstructor.newInstance(sourceJdkVersion, included, excluded, includeDraft);
148160
formatterMethod = formatterClazz.getMethod("apply", String.class);
149161
} catch (ReflectiveOperationException e) {
150162
throw new IllegalStateException("Issue executing the formatter", e);
151163
}
152-
return JVM_SUPPORT.suggestLaterVersionOnError(version, input -> {
153-
return (String) formatterMethod.invoke(formatter, input);
154-
});
164+
165+
// https://github.com/diffplug/spotless/issues/1583
166+
if (!version.endsWith("-SNAPSHOT")) {
167+
return JVM_SUPPORT.suggestLaterVersionOnError(version, input -> {
168+
return (String) formatterMethod.invoke(formatter, input);
169+
});
170+
} else {
171+
return input -> {
172+
return (String) formatterMethod.invoke(formatter, input);
173+
};
174+
}
155175
}
156176

157177
}

plugin-gradle/CHANGES.md

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`).
44

55
## [Unreleased]
6+
### Added
7+
* Add `includeDraft` option, to include draft mutators from composite mutators ([#1574](https://github.com/diffplug/spotless/pull/1574))
8+
### Changes
9+
* Bump default `cleanthat` version to latest `2.2` -> `2.6` ([#1574](https://github.com/diffplug/spotless/pull/1574))
610
* Bump default `cleanthat` version to latest `2.1` -> `2.2` ([#1569](https://github.com/diffplug/spotless/pull/1569))
711

812
## [6.15.0] - 2023-02-10

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,8 @@ public class CleanthatJavaConfig {
288288

289289
private List<String> excludedMutators = new ArrayList<>(CleanthatJavaStep.defaultExcludedMutators());
290290

291+
private boolean includeDraft = CleanthatJavaStep.defaultIncludeDraft();
292+
291293
CleanthatJavaConfig() {
292294
addStep(createStep());
293295
}
@@ -341,11 +343,17 @@ public CleanthatJavaConfig excludeMutator(String mutator) {
341343
return this;
342344
}
343345

346+
public CleanthatJavaConfig includeDraft(boolean includeDraft) {
347+
this.includeDraft = includeDraft;
348+
replaceStep(createStep());
349+
return this;
350+
}
351+
344352
private FormatterStep createStep() {
345353
return CleanthatJavaStep.create(
346354
groupArtifact,
347355
version,
348-
sourceJdk, mutators, excludedMutators, provisioner());
356+
sourceJdk, mutators, excludedMutators, includeDraft, provisioner());
349357
}
350358
}
351359

plugin-maven/CHANGES.md

+3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`).
44

55
## [Unreleased]
6+
### Added
7+
* Add `includeDraft` option, to include draft mutators from composite mutators ([#XXX](https://github.com/diffplug/spotless/pull/XXX))
68
### Changes
9+
* Bump default `cleanthat` version to latest `2.2` -> `2.6` ([#1574](https://github.com/diffplug/spotless/pull/1574))
710
* Bump default `cleanthat` version to latest `2.1` -> `2.2` ([#1569](https://github.com/diffplug/spotless/pull/1569))
811

912
## [2.33.0] - 2023-02-10

plugin-maven/src/main/java/com/diffplug/spotless/maven/java/CleanthatJava.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,14 @@ public class CleanthatJava implements FormatterStepFactory {
4141
@Parameter
4242
private List<String> excludedMutators = CleanthatJavaStep.defaultExcludedMutators();
4343

44+
@Parameter
45+
private boolean includeDraft = CleanthatJavaStep.defaultIncludeDraft();
46+
4447
@Override
4548
public FormatterStep newFormatterStep(FormatterStepConfig config) {
4649
String groupArtifact = this.groupArtifact != null ? this.groupArtifact : CleanthatJavaStep.defaultGroupArtifact();
4750
String version = this.version != null ? this.version : CleanthatJavaStep.defaultVersion();
4851

49-
return CleanthatJavaStep.create(groupArtifact, version, sourceJdk, mutators, excludedMutators, config.getProvisioner());
52+
return CleanthatJavaStep.create(groupArtifact, version, sourceJdk, mutators, excludedMutators, includeDraft, config.getProvisioner());
5053
}
5154
}

plugin-maven/src/test/java/com/diffplug/spotless/maven/java/CleanthatJavaRefactorerTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@
2525
class CleanthatJavaRefactorerTest extends MavenIntegrationHarness {
2626
private static final Logger LOGGER = LoggerFactory.getLogger(CleanthatJavaRefactorerTest.class);
2727

28+
@Test
29+
void testEnableDraft() throws Exception {
30+
writePomWithJavaSteps(
31+
"<cleanthat>",
32+
" <sourceJdk>11</sourceJdk>",
33+
" <includeDraft>true</includeDraft>",
34+
"</cleanthat>");
35+
36+
runTest("MultipleMutators.dirty.java", "MultipleMutators.clean.onlyOptionalIsPresent.java");
37+
}
38+
2839
@Test
2940
void testLiteralsFirstInComparisons() throws Exception {
3041
writePomWithJavaSteps(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package eu.solven.cleanthat.engine.java.refactorer.cases.do_not_format_me;
2+
3+
import java.util.Optional;
4+
5+
public class LiteralsFirstInComparisonsCases {
6+
7+
public boolean isHardcoded(String input) {
8+
return input.equals("hardcoded");
9+
}
10+
11+
public boolean isPresent(Optional<?> optional) {
12+
return optional.isPresent();
13+
}
14+
}

0 commit comments

Comments
 (0)