Skip to content

Commit

Permalink
GH-9702: Add CheckedCallable.uncheckedCallable
Browse files Browse the repository at this point in the history
Fixes: #9702
Issue link: #9702

The current `CheckedCallable.unchecked()` returns `Runnable`, which is not an expectation.

* Deprecate `CheckedCallable.unchecked()` in favor of newly introduced `CheckedCallable.uncheckedCallable()`.
We cannot call it `unchecked()` as well, since `Callable` after erasure becomes similar to class signature as `Runnable`.

**Auto-cherry-pick to `6.3.x`**
  • Loading branch information
artembilan committed Dec 9, 2024
1 parent 954cdac commit 8c22bf6
Showing 1 changed file with 23 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -16,6 +16,8 @@

package org.springframework.integration.util;

import java.util.concurrent.Callable;

/**
* A Callable-like interface which allows throwing any Throwable.
* Checked exceptions are wrapped in an IllegalStateException.
Expand All @@ -32,10 +34,29 @@ public interface CheckedCallable<T, E extends Throwable> {

T call() throws E;

/**
* Wrap the {@link #call()} into unchecked {@link Runnable} (by mistake).
* Re-throw its exception wrapped with a {@link IllegalStateException}.
* @return the Runnable (by mistake).
* @deprecated since 6.3.7 in favor of {@link #uncheckedCallable()}.
* Will be restored back, but with a proper {@link Callable<T>} return type.
*/
@Deprecated
default Runnable unchecked() {
return this::uncheckedCallable;
}

/**
* Wrap the {@link #call()} into unchecked {@link Callable<T>}.
* Re-throw its exception wrapped with a {@link IllegalStateException}.
* Will be replaced with a proper {@link #unchecked()} implementation in 6.5.
* @return the unchecked {@link Callable<T>}.
* @since 6.3.7
*/
default Callable<T> uncheckedCallable() {
return () -> {
try {
call();
return call();
}
catch (Throwable t) { // NOSONAR
if (t instanceof RuntimeException runtimeException) { // NOSONAR
Expand Down

0 comments on commit 8c22bf6

Please sign in to comment.