mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
invoke saveAll under a transaction
This commit is contained in:
@@ -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) {
|
||||
|
||||
+2
-1
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user