Undo: 'reload file' related issue fixed (IDEA-89562)

This commit is contained in:
Anton Makeev
2012-08-01 11:43:01 +02:00
parent f753e63f6b
commit d95a92efa9
3 changed files with 13 additions and 4 deletions
@@ -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);
}
@@ -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);
}
@@ -350,6 +355,8 @@ public class UndoManagerImpl extends UndoManager implements ProjectComponent, Ap
return;
}
if (isRefresh()) myOriginatorReference = null;
myCurrentMerger.addAction(action);
}