mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git.labs.intellij.net:idea/community
This commit is contained in:
@@ -18,6 +18,7 @@ package com.intellij.testFramework;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
@@ -228,6 +229,10 @@ public abstract class PsiTestCase extends ModuleTestCase {
|
||||
return PsiDocumentManager.getInstance(getProject()).getDocument(file);
|
||||
}
|
||||
|
||||
public com.intellij.openapi.editor.Document getDocument(VirtualFile file) {
|
||||
return FileDocumentManager.getInstance().getDocument(file);
|
||||
}
|
||||
|
||||
public void commitDocument(com.intellij.openapi.editor.Document document) {
|
||||
PsiDocumentManager.getInstance(getProject()).commitDocument(document);
|
||||
}
|
||||
|
||||
+1
-4
@@ -16,7 +16,6 @@
|
||||
package com.intellij.openapi.command.impl;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.undo.DocumentReference;
|
||||
import com.intellij.openapi.command.undo.DocumentReferenceManager;
|
||||
import com.intellij.openapi.command.undo.UndoConstants;
|
||||
@@ -31,7 +30,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.ExternalChangeAction;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DocumentUndoProvider implements Disposable {
|
||||
@@ -115,8 +113,7 @@ public class DocumentUndoProvider implements Disposable {
|
||||
}
|
||||
|
||||
private boolean isUndoable(Document document) {
|
||||
boolean isFromRefresh = ApplicationManager.getApplication().hasWriteAction(ExternalChangeAction.class);
|
||||
if (!isFromRefresh) return true;
|
||||
if (!UndoManagerImpl.isRefresh()) return true;
|
||||
|
||||
return getUndoManager().isUndoOrRedoAvailable(DocumentReferenceManager.getInstance().create(document));
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ex.WindowManagerEx;
|
||||
import com.intellij.psi.ExternalChangeAction;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -89,6 +90,10 @@ public class UndoManagerImpl extends UndoManager implements ProjectComponent, Ap
|
||||
|
||||
private DocumentReference myOriginatorReference;
|
||||
|
||||
public static boolean isRefresh() {
|
||||
return ApplicationManager.getApplication().hasWriteAction(ExternalChangeAction.class);
|
||||
}
|
||||
|
||||
public static int getGlobalUndoLimit() {
|
||||
return Registry.intValue("undo.globalUndoLimit", 10);
|
||||
}
|
||||
@@ -229,7 +234,7 @@ public class UndoManagerImpl extends UndoManager implements ProjectComponent, Ap
|
||||
myCurrentActionProject = project;
|
||||
}
|
||||
|
||||
commandStarted(undoConfirmationPolicy);
|
||||
commandStarted(undoConfirmationPolicy, myProject == project);
|
||||
|
||||
LOG.assertTrue(myCommandLevel == 0 || !(myCurrentActionProject instanceof DummyProject));
|
||||
}
|
||||
@@ -245,11 +250,11 @@ public class UndoManagerImpl extends UndoManager implements ProjectComponent, Ap
|
||||
LOG.assertTrue(myCommandLevel == 0 || !(myCurrentActionProject instanceof DummyProject));
|
||||
}
|
||||
|
||||
private void commandStarted(UndoConfirmationPolicy undoConfirmationPolicy) {
|
||||
private void commandStarted(UndoConfirmationPolicy undoConfirmationPolicy, boolean recordOriginalReference) {
|
||||
if (myCommandLevel == 0) {
|
||||
myCurrentMerger = new CommandMerger(this, CommandProcessor.getInstance().isUndoTransparentActionInProgress());
|
||||
|
||||
if (myProject != null) {
|
||||
if (recordOriginalReference && myProject != null) {
|
||||
Editor editor = null;
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
editor = PlatformDataKeys.EDITOR.getData(DataManager.getInstance().getDataContext());
|
||||
@@ -344,12 +349,14 @@ public class UndoManagerImpl extends UndoManager implements ProjectComponent, Ap
|
||||
if (myCommandLevel == 0) {
|
||||
LOG.assertTrue(action instanceof NonUndoableAction,
|
||||
"Undoable actions allowed inside commands only (see com.intellij.openapi.command.CommandProcessor.executeCommand())");
|
||||
commandStarted(UndoConfirmationPolicy.DEFAULT);
|
||||
commandStarted(UndoConfirmationPolicy.DEFAULT, false);
|
||||
myCurrentMerger.addAction(action);
|
||||
commandFinished("", null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isRefresh()) myOriginatorReference = null;
|
||||
|
||||
myCurrentMerger.addAction(action);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user