diff --git a/lib/src/main/java/com/diffplug/spotless/LazyForwardingEquality.java b/lib/src/main/java/com/diffplug/spotless/LazyForwardingEquality.java index 05e758d586..e29464bd91 100644 --- a/lib/src/main/java/com/diffplug/spotless/LazyForwardingEquality.java +++ b/lib/src/main/java/com/diffplug/spotless/LazyForwardingEquality.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 DiffPlug + * Copyright 2016-2022 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -111,4 +111,9 @@ static byte[] toBytes(Serializable obj) { } return byteOutput.toByteArray(); } + + /** Ensures that the lazy state has been evaluated. */ + public static void unlazy(LazyForwardingEquality in) { + in.state(); + } } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLocalCache.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLocalCache.java index 9478e9e66f..3f03a5852b 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLocalCache.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLocalCache.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 DiffPlug + * Copyright 2021-2022 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import org.gradle.api.Task; import com.diffplug.spotless.FileSignature; +import com.diffplug.spotless.LazyForwardingEquality; class JvmLocalCache { private static GradleException cacheIsStale() { @@ -53,6 +54,11 @@ static class LiveCacheKeyImpl implements LiveCache, Serializable { @Override public void set(T value) { + if (value instanceof LazyForwardingEquality) { + // whenever we cache an instance of LazyForwardingEquality, we want to make sure that we give it + // a chance to null-out its initialization lambda (see https://github.com/diffplug/spotless/issues/1194#issuecomment-1120744842) + LazyForwardingEquality.unlazy((LazyForwardingEquality) value); + } daemonState.put(internalKey, value); }