mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
automatic transaction nesting: correct modality state checks, honor in submitTransaction (and remove "later" semantics from it, fix the only client that cares)
This commit is contained in:
@@ -43,7 +43,7 @@ public class TransactionGuardImpl extends TransactionGuard {
|
||||
public AccessToken startSynchronousTransaction(@NotNull TransactionKind kind) throws IllegalStateException {
|
||||
ModalityState modality = ModalityState.current();
|
||||
if (isInsideTransaction()) {
|
||||
if (myTransactionModality == modality) {
|
||||
if (modality.equals(myTransactionModality)) {
|
||||
return AccessToken.EMPTY_ACCESS_TOKEN;
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ public class TransactionGuardImpl extends TransactionGuard {
|
||||
}
|
||||
|
||||
protected boolean canRunTransactionNow(@NotNull TransactionKind kind) {
|
||||
return !isInsideTransaction() || myMergeableKinds.contains(kind);
|
||||
return !isInsideTransaction() || myMergeableKinds.contains(kind) || ModalityState.current().equals(myTransactionModality);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,7 +170,7 @@ public class TransactionGuardImpl extends TransactionGuard {
|
||||
public void submitTransactionAndWait(@NotNull TransactionKind kind, @NotNull final Runnable transaction) throws ProcessCanceledException {
|
||||
Application app = ApplicationManager.getApplication();
|
||||
if (app.isDispatchThread()) {
|
||||
if (!canRunTransactionNow(kind) && myTransactionModality != ModalityState.current()) {
|
||||
if (!canRunTransactionNow(kind)) {
|
||||
throw new AssertionError("Cannot run submitTransactionAndWait from another transaction, kind " + kind + " is not allowed");
|
||||
}
|
||||
runSyncTransaction(kind, transaction);
|
||||
|
||||
Reference in New Issue
Block a user