From 7ed4df20a85cd90b35b2d367fb57da92af20d618 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sun, 5 May 2019 16:46:11 +0200 Subject: [PATCH] Ensure AbstractReactiveTransactionManager compiles in Eclipse IDE --- .../AbstractReactiveTransactionManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-tx/src/main/java/org/springframework/transaction/reactive/AbstractReactiveTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/reactive/AbstractReactiveTransactionManager.java index 2613d3afbd4..fc556d310b8 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/reactive/AbstractReactiveTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/reactive/AbstractReactiveTransactionManager.java @@ -439,13 +439,16 @@ public abstract class AbstractReactiveTransactionManager implements ReactiveTran return Mono.empty(); })).then(Mono.empty().onErrorResume(ex -> { Mono propagateException = Mono.error(ex); + // Store result in a local variable in order to appease the + // Eclipse compiler with regard to inferred generics. + Mono result = propagateException; if (ErrorPredicates.UNEXPECTED_ROLLBACK.test(ex)) { - return triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_ROLLED_BACK).then(propagateException); + result = triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_ROLLED_BACK).then(propagateException); } - if (ErrorPredicates.TRANSACTION_EXCEPTION.test(ex)) { - return triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_UNKNOWN).then(propagateException); + else if (ErrorPredicates.TRANSACTION_EXCEPTION.test(ex)) { + result = triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_UNKNOWN).then(propagateException); } - if (ErrorPredicates.RUNTIME_OR_ERROR.test(ex)) { + else if (ErrorPredicates.RUNTIME_OR_ERROR.test(ex)) { Mono mono; if (!beforeCompletionInvoked.get()) { mono = triggerBeforeCompletion(synchronizationManager, status); @@ -453,10 +456,10 @@ public abstract class AbstractReactiveTransactionManager implements ReactiveTran else { mono = Mono.empty(); } - return mono.then(doRollbackOnCommitException(synchronizationManager, status, ex)).then(propagateException); + result = mono.then(doRollbackOnCommitException(synchronizationManager, status, ex)).then(propagateException); } - return propagateException; + return result; })).then(Mono.defer(() -> triggerAfterCommit(synchronizationManager, status).onErrorResume(ex -> triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_COMMITTED).then(Mono.error(ex))) .then(triggerAfterCompletion(synchronizationManager, status, TransactionSynchronization.STATUS_COMMITTED))));