invoke saveAll under a transaction

This commit is contained in:
peter
2016-03-08 20:38:31 +01:00
parent 8e42459dcc
commit 20565cd7f9
7 changed files with 18 additions and 39 deletions
@@ -17,6 +17,8 @@ package com.intellij.compiler.actions;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.TransactionKind;
import com.intellij.openapi.application.WrapInTransaction;
import com.intellij.openapi.compiler.CompilerManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
@@ -24,6 +26,7 @@ import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.DumbService;
import com.intellij.psi.PsiFile;
@WrapInTransaction(TransactionKind.Common.ANY_CHANGE)
public abstract class CompileActionBase extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
final DataContext dataContext = e.getDataContext();
@@ -36,10 +36,7 @@ import com.intellij.ide.PowerSaveMode;
import com.intellij.ide.file.BatchFileChangeListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.application.*;
import com.intellij.openapi.compiler.CompilationStatusListener;
import com.intellij.openapi.compiler.CompileContext;
import com.intellij.openapi.compiler.CompilerPaths;
@@ -77,7 +74,6 @@ import com.intellij.openapi.vfs.newvfs.events.VFileEvent;
import com.intellij.openapi.vfs.newvfs.impl.FileNameCache;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.util.*;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.concurrency.SequentialTaskExecutor;
import com.intellij.util.containers.IntArrayList;
import com.intellij.util.io.storage.HeavyProcessLatch;
@@ -105,7 +101,6 @@ import org.jetbrains.jps.cmdline.ClasspathBootstrap;
import org.jetbrains.jps.incremental.Utils;
import org.jetbrains.jps.model.serialization.JpsGlobalLoader;
import javax.swing.*;
import javax.tools.*;
import java.awt.*;
import java.io.File;
@@ -186,25 +181,11 @@ public class BuildManager implements Disposable {
return Registry.intValue("compiler.document.save.trigger.delay");
}
private final Semaphore mySemaphore = new Semaphore();
private final Runnable mySaveDocsRunnable = new Runnable() {
@Override
public void run() {
try {
((FileDocumentManagerImpl)FileDocumentManager.getInstance()).saveAllDocuments(false);
}
finally {
mySemaphore.up();
}
}
};
@Override
public void runTask() {
if (shouldSaveDocuments()) {
mySemaphore.down();
ApplicationManager.getApplication().invokeLater(mySaveDocsRunnable, ModalityState.NON_MODAL);
mySemaphore.waitFor();
TransactionGuard.getInstance().submitTransactionAndWait(TransactionKind.ANY_CHANGE, () ->
((FileDocumentManagerImpl)FileDocumentManager.getInstance()).saveAllDocuments(false));
}
}
@@ -772,12 +753,7 @@ public class BuildManager implements Disposable {
// ensure project model is saved on disk, so that automake sees the latest model state.
// For ordinary make all project, app settings and unsaved docs are always saved before build starts.
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
project.save();
}
});
TransactionGuard.getInstance().submitTransactionAndWait(TransactionKind.ANY_CHANGE, project::save);
}
catch (Throwable e) {
LOG.info(e);
@@ -74,12 +74,9 @@ public class SaveAndSyncHandlerImpl extends SaveAndSyncHandler implements Dispos
mySettings = generalSettings;
myProgressManager = progressManager;
myIdleListener = new Runnable() {
@Override
public void run() {
if (mySettings.isAutoSaveIfInactive() && canSyncOrSave()) {
((FileDocumentManagerImpl)fileDocumentManager).saveAllDocuments(false);
}
myIdleListener = () -> {
if (mySettings.isAutoSaveIfInactive() && canSyncOrSave()) {
TransactionGuard.submitTransaction(() -> ((FileDocumentManagerImpl)fileDocumentManager).saveAllDocuments(false));
}
};
IdeEventQueue.getInstance().addIdleListener(myIdleListener, mySettings.getInactiveTimeout() * 1000);
@@ -18,9 +18,11 @@ package com.intellij.ide.actions;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WrapInTransaction;
import com.intellij.openapi.project.DumbAware;
import org.jetbrains.annotations.NotNull;
@WrapInTransaction
public class SaveAllAction extends AnAction implements DumbAware {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
@@ -19,6 +19,7 @@ import com.intellij.CommonBundle;
import com.intellij.ide.actions.ShowSettingsUtilImpl;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.options.BaseConfigurable;
@@ -288,7 +289,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
myConfigurable = null;
if (mySaveAllOnClose) {
ApplicationManager.getApplication().saveAll();
TransactionGuard.submitTransaction(ApplicationManager.getApplication()::saveAll);
}
}
}
@@ -18,6 +18,7 @@ package com.intellij.openapi.options.newEditor;
import com.intellij.CommonBundle;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableGroup;
@@ -156,7 +157,7 @@ public class SettingsDialog extends DialogWrapper implements DataProvider {
@Override
public void doOKAction() {
if (myEditor.apply()) {
ApplicationManager.getApplication().saveAll();
TransactionGuard.submitTransaction(ApplicationManager.getApplication()::saveAll);
SettingsDialog.super.doOKAction();
}
}
@@ -17,8 +17,7 @@ package com.intellij.openapi.vcs.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.*;
@@ -80,7 +79,7 @@ public abstract class AbstractCommonCheckinAction extends AbstractVcsAction {
@NotNull
protected FilePath[] prepareRootsForCommit(@NotNull FilePath[] roots, @NotNull Project project) {
if (ApplicationManager.getApplication().isDispatchThread()) {
ApplicationManager.getApplication().saveAll();
TransactionGuard.submitTransaction(ApplicationManager.getApplication()::saveAll);
}
return filterDescindingFiles(roots, project);