From f3d9a3595c11d0d166dff8e4a4dd72e11675176d Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 3 Mar 2017 09:13:15 +0100 Subject: [PATCH] assert that refactoring dialogs are shown in transactions, and add one in the drag&drop handling --- .../ide/projectView/impl/ProjectViewDropTarget.java | 7 +++++-- .../com/intellij/refactoring/ui/RefactoringDialog.java | 9 +++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java index 03cfabe0a5fa..63e9c83416f7 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewDropTarget.java @@ -23,6 +23,7 @@ import com.intellij.ide.dnd.TransferableWrapper; import com.intellij.ide.projectView.impl.nodes.DropTargetNode; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -320,7 +321,7 @@ class ProjectViewDropTarget implements DnDNativeTarget { if (!sourceElement.isValid()) return; } - getActionHandler().invoke(myProject, sourceElements, new DataContext() { + DataContext context = new DataContext() { @Override @Nullable public Object getData(@NonNls String dataId) { @@ -334,7 +335,9 @@ class ProjectViewDropTarget implements DnDNativeTarget { return externalDrop ? null : dataContext.getData(dataId); } } - }); + }; + TransactionGuard.getInstance().submitTransactionAndWait( + () -> getActionHandler().invoke(myProject, sourceElements, context)); } private RefactoringActionHandler getActionHandler() { diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/RefactoringDialog.java b/platform/lang-impl/src/com/intellij/refactoring/ui/RefactoringDialog.java index 653db59613b2..edef6049d0dd 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/ui/RefactoringDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/ui/RefactoringDialog.java @@ -15,6 +15,8 @@ */ package com.intellij.refactoring.ui; +import com.intellij.openapi.application.TransactionGuard; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -35,6 +37,7 @@ import java.util.List; * Author: msk */ public abstract class RefactoringDialog extends DialogWrapper { + private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.ui.RefactoringDialog"); private Action myRefactorAction; private Action myPreviewAction; @@ -55,6 +58,12 @@ public abstract class RefactoringDialog extends DialogWrapper { myCbPreviewResults = previewResults; } + @Override + public void show() { + LOG.assertTrue(TransactionGuard.getInstance().getContextTransaction() != null, "Refactorings should be invoked inside transaction"); + super.show(); + } + @Override protected void createDefaultActions() { super.createDefaultActions ();