Merge branch 'master' of git.labs.intellij.net:idea/community

This commit is contained in:
Michael Golubev
2012-08-01 12:03:25 +02:00
3 changed files with 17 additions and 8 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);
}
@@ -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);
}