Skip to content

Commit f0ff576

Browse files
committed
Fix serialization problems in custom steps.
1 parent 2a37684 commit f0ff576

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,8 @@ public interface SerializedFunction<T, R> extends Serializable, ThrowingEx.Funct
2222
static <T> SerializedFunction<T, T> identity() {
2323
return t -> t;
2424
}
25+
26+
static <T, R> SerializedFunction<T, R> alwaysReturns(R value) {
27+
return unused -> value;
28+
}
2529
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.diffplug.spotless.LineEnding;
5454
import com.diffplug.spotless.OnMatch;
5555
import com.diffplug.spotless.Provisioner;
56+
import com.diffplug.spotless.SerializedFunction;
5657
import com.diffplug.spotless.biome.BiomeFlavor;
5758
import com.diffplug.spotless.cpp.ClangFormatStep;
5859
import com.diffplug.spotless.extra.EclipseBasedStepBuilder;
@@ -427,7 +428,21 @@ protected Integer calculateState() throws Exception {
427428
*/
428429
public void custom(String name, Closure<String> formatter) {
429430
requireNonNull(formatter, "formatter");
430-
custom(name, formatter::call);
431+
Closure<String> dehydrated = formatter.dehydrate();
432+
custom(name, new ClosureFormatterFunc(dehydrated));
433+
}
434+
435+
static class ClosureFormatterFunc implements FormatterFunc, Serializable {
436+
private final Closure<String> closure;
437+
438+
ClosureFormatterFunc(Closure<String> closure) {
439+
this.closure = closure;
440+
}
441+
442+
@Override
443+
public String apply(String unixNewlines) {
444+
return closure.call(unixNewlines);
445+
}
431446
}
432447

433448
/**
@@ -436,7 +451,7 @@ public void custom(String name, Closure<String> formatter) {
436451
*/
437452
public void custom(String name, FormatterFunc formatter) {
438453
requireNonNull(formatter, "formatter");
439-
addStep(FormatterStep.createLazy(name, () -> globalState, unusedState -> formatter));
454+
addStep(FormatterStep.createLazy(name, () -> globalState, SerializedFunction.alwaysReturns(formatter)));
440455
}
441456

442457
/** Highly efficient find-replace char sequence. */

0 commit comments

Comments
 (0)