mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
undo doesn't suffer from autopopup intervention, again
This commit is contained in:
@@ -873,5 +873,14 @@ class LiveComplete {
|
||||
assert myFixture.editor.document.text.contains('ArrStoExce.')
|
||||
}
|
||||
|
||||
public void testAutopopupTypingUndo() {
|
||||
myFixture.configureByText "a.java", "class Foo {{ <caret> }}"
|
||||
def editor;
|
||||
edt { editor = FileEditorManager.getInstance(project).openFile(myFixture.file.virtualFile, false)[0] }
|
||||
type 'aioobeeee'
|
||||
edt { UndoManager.getInstance(project).undo(editor) }
|
||||
assert !myFixture.editor.document.text.contains('aioo')
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+18
-13
@@ -457,26 +457,31 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
|
||||
final boolean hasModifiers,
|
||||
final int invocationCount) {
|
||||
final PsiFile originalFile = initContext.getFile();
|
||||
final PsiFile fileCopy;
|
||||
AccessToken token = WriteAction.start();
|
||||
try {
|
||||
fileCopy = createFileCopy(originalFile);
|
||||
}
|
||||
finally {
|
||||
token.finish();
|
||||
}
|
||||
final PsiFile hostFile = InjectedLanguageUtil.getTopLevelFile(fileCopy);
|
||||
final PsiFile[] fileCopy = {null};
|
||||
CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AccessToken token = WriteAction.start();
|
||||
try {
|
||||
fileCopy[0] = createFileCopy(originalFile);
|
||||
}
|
||||
finally {
|
||||
token.finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
final PsiFile hostFile = InjectedLanguageUtil.getTopLevelFile(fileCopy[0]);
|
||||
final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(hostFile.getProject());
|
||||
final int hostStartOffset = injectedLanguageManager.injectedToHost(fileCopy, initContext.getStartOffset());
|
||||
final int hostStartOffset = injectedLanguageManager.injectedToHost(fileCopy[0], initContext.getStartOffset());
|
||||
final Editor hostEditor = InjectedLanguageUtil.getTopLevelEditor(initContext.getEditor());
|
||||
|
||||
final OffsetMap hostMap = new OffsetMap(hostEditor.getDocument());
|
||||
final OffsetMap original = initContext.getOffsetMap();
|
||||
for (final OffsetKey key : new ArrayList<OffsetKey>(original.keySet())) {
|
||||
hostMap.addOffset(key, injectedLanguageManager.injectedToHost(fileCopy, original.getOffset(key)));
|
||||
hostMap.addOffset(key, injectedLanguageManager.injectedToHost(fileCopy[0], original.getOffset(key)));
|
||||
}
|
||||
|
||||
final Document document = fileCopy.getViewProvider().getDocument();
|
||||
final Document document = fileCopy[0].getViewProvider().getDocument();
|
||||
assert document != null : "no document";
|
||||
|
||||
CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
|
||||
@@ -485,7 +490,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
patchFileCopy(initContext, fileCopy, document);
|
||||
patchFileCopy(initContext, fileCopy[0], document);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+4
-1
@@ -60,6 +60,7 @@ import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.editor.*;
|
||||
import com.intellij.openapi.editor.actionSystem.DocCommandGroupId;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorActionManager;
|
||||
import com.intellij.openapi.editor.ex.DocumentEx;
|
||||
@@ -676,9 +677,11 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
|
||||
}
|
||||
}
|
||||
|
||||
CommandProcessor.getInstance().setCurrentCommandGroupId(myEditor.getDocument());
|
||||
|
||||
actionManager.getTypedAction().actionPerformed(getEditor(), c, getEditorDataContext());
|
||||
}
|
||||
}, null, null);
|
||||
}, null, DocCommandGroupId.noneGroupId(myEditor.getDocument()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user