mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-06-01 01:34:07 +02:00
Use injector to create execution context
This commit is contained in:
parent
b7d5ee9a75
commit
2cb6fb041e
src
main/java/com/maddyhome/idea/vim
test/java/org/jetbrains/plugins/ideavim
@ -16,7 +16,6 @@ import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.maddyhome.idea.vim.api.globalOptions
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.inInsertMode
|
||||
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
||||
import com.maddyhome.idea.vim.key.KeyHandlerKeeper
|
||||
@ -76,7 +75,7 @@ class VimTypedActionHandler(origHandler: TypedActionHandler) : TypedActionHandle
|
||||
val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
|
||||
val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
|
||||
val startTime = if (traceTime) System.currentTimeMillis() else null
|
||||
handler.handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, context).vim)
|
||||
handler.handleKey(editor.vim, keyStroke, injector.executionContextManager.onEditor(editor.vim, context.vim))
|
||||
if (startTime != null) {
|
||||
val duration = System.currentTimeMillis() - startTime
|
||||
LOG.info("VimTypedAction '$charTyped': $duration ms")
|
||||
|
@ -28,7 +28,6 @@ import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.api.globalOptions
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.api.options
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||
import com.maddyhome.idea.vim.helper.HandlerInjector
|
||||
import com.maddyhome.idea.vim.helper.inInsertMode
|
||||
@ -69,7 +68,11 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
||||
// Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
|
||||
try {
|
||||
val start = if (traceTime) System.currentTimeMillis() else null
|
||||
KeyHandler.getInstance().handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, e.dataContext).vim)
|
||||
KeyHandler.getInstance().handleKey(
|
||||
editor.vim,
|
||||
keyStroke,
|
||||
injector.executionContextManager.onEditor(editor.vim, e.dataContext.vim)
|
||||
)
|
||||
if (start != null) {
|
||||
val duration = System.currentTimeMillis() - start
|
||||
LOG.info("VimShortcut update '$keyStroke': $duration ms")
|
||||
|
@ -15,12 +15,12 @@ import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.action.change.Extension
|
||||
import com.maddyhome.idea.vim.api.ImmutableVimCaret
|
||||
import com.maddyhome.idea.vim.api.VimCaret
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.command.MappingMode
|
||||
import com.maddyhome.idea.vim.command.SelectionType
|
||||
import com.maddyhome.idea.vim.common.CommandAlias
|
||||
import com.maddyhome.idea.vim.common.CommandAliasHandler
|
||||
import com.maddyhome.idea.vim.helper.CommandLineHelper
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.TestInputModel
|
||||
import com.maddyhome.idea.vim.helper.vimStateMachine
|
||||
import com.maddyhome.idea.vim.key.MappingOwner
|
||||
@ -130,8 +130,8 @@ object VimExtensionFacade {
|
||||
*/
|
||||
@JvmStatic
|
||||
fun executeNormalWithoutMapping(keys: List<KeyStroke>, editor: Editor) {
|
||||
val context = EditorDataContext.init(editor)
|
||||
keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context.vim, false, false) }
|
||||
val context = injector.executionContextManager.onEditor(editor.vim)
|
||||
keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context, false, false) }
|
||||
}
|
||||
|
||||
/** Returns a single key stroke from the user input similar to 'getchar()'. */
|
||||
|
@ -28,7 +28,6 @@ import com.maddyhome.idea.vim.extension.VimExtensionFacade.executeNormalWithoutM
|
||||
import com.maddyhome.idea.vim.extension.VimExtensionFacade.putKeyMappingIfMissing
|
||||
import com.maddyhome.idea.vim.extension.VimExtensionFacade.setOperatorFunction
|
||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.editorMode
|
||||
import com.maddyhome.idea.vim.helper.exitVisualMode
|
||||
import com.maddyhome.idea.vim.helper.mode
|
||||
@ -169,7 +168,7 @@ class ReplaceWithRegister : VimExtension {
|
||||
ClipboardOptionHelper.IdeaputDisabler().use {
|
||||
VimPlugin.getPut().putText(
|
||||
IjVimEditor(editor),
|
||||
IjEditorExecutionContext(EditorDataContext.init(editor)),
|
||||
injector.executionContextManager.onEditor(editor.vim),
|
||||
putData,
|
||||
operatorArguments = OperatorArguments(
|
||||
editor.vimStateMachine?.isOperatorPending ?: false,
|
||||
|
@ -13,17 +13,20 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.editor.*;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorGutter;
|
||||
import com.intellij.openapi.editor.EditorSettings;
|
||||
import com.intellij.openapi.editor.LineNumberConverter;
|
||||
import com.intellij.openapi.editor.event.CaretEvent;
|
||||
import com.intellij.openapi.editor.event.CaretListener;
|
||||
import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.maddyhome.idea.vim.KeyHandler;
|
||||
import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.api.ExecutionContext;
|
||||
import com.maddyhome.idea.vim.api.VimEditor;
|
||||
import com.maddyhome.idea.vim.api.VimEditorGroup;
|
||||
import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.LocalOptionChangeListener;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
@ -214,7 +217,8 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
|
||||
if (!EditorHelper.isFileEditor(editor) &&
|
||||
editor.getDocument().isWritable() &&
|
||||
!CommandStateHelper.inInsertMode(editor)) {
|
||||
VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjEditorExecutionContext(EditorDataContext.init(editor, null)));
|
||||
ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(editor), null);
|
||||
VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), context);
|
||||
KeyHandler.getInstance().reset(new IjVimEditor(editor));
|
||||
}
|
||||
updateCaretsVisualAttributes(editor);
|
||||
|
@ -803,7 +803,7 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
|
||||
if (expression != null) {
|
||||
try {
|
||||
match = expression
|
||||
.evaluate(editor, new IjEditorExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent)
|
||||
.evaluate(editor, injector.getExecutionContextManager().onEditor(editor, null), parent)
|
||||
.toInsertableString();
|
||||
} catch (Exception e) {
|
||||
exceptions.add((ExException) e);
|
||||
@ -979,7 +979,8 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
|
||||
else {
|
||||
// XXX: The Ex entry panel is used only for UI here, its logic might be inappropriate for this method
|
||||
final ExEntryPanel exEntryPanel = ExEntryPanel.getInstanceWithoutShortcuts();
|
||||
exEntryPanel.activate(editor, EditorDataContext.init(editor, null), MessageHelper.message("replace.with.0", match), "", 1);
|
||||
ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(editor), null);
|
||||
exEntryPanel.activate(editor, ((IjEditorExecutionContext)context).getContext(), MessageHelper.message("replace.with.0", match), "", 1);
|
||||
new IjVimCaret(caret).moveToOffset(startoff);
|
||||
ModalEntry.INSTANCE.activate(new IjVimEditor(editor), keyStrokeProcessor);
|
||||
exEntryPanel.deactivate(true, false);
|
||||
|
@ -116,7 +116,7 @@ object IdeaSelectionControl {
|
||||
.enterSelectMode(editor.vim, VimPlugin.getVisualMotion().autodetectVisualSubmode(editor.vim))
|
||||
VimStateMachine.Mode.INSERT -> VimPlugin.getChange().insertBeforeCursor(
|
||||
editor.vim,
|
||||
EditorDataContext.init(editor).vim
|
||||
injector.executionContextManager.onEditor(editor.vim)
|
||||
)
|
||||
VimStateMachine.Mode.COMMAND -> Unit
|
||||
else -> error("Unexpected mode: $mode")
|
||||
|
@ -12,6 +12,7 @@ import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.maddyhome.idea.vim.action.change.Extension
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.newapi.ij
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import com.maddyhome.idea.vim.ui.ModalEntry
|
||||
@ -52,7 +53,7 @@ class CommandLineHelper : VimCommandLineHelper {
|
||||
var text: String? = null
|
||||
// XXX: The Ex entry panel is used only for UI here, its logic might be inappropriate for input()
|
||||
val exEntryPanel = ExEntryPanel.getInstanceWithoutShortcuts()
|
||||
exEntryPanel.activate(editor, EditorDataContext.init(editor), prompt.ifEmpty { " " }, "", 1)
|
||||
exEntryPanel.activate(editor, injector.executionContextManager.onEditor(editor.vim).ij, prompt.ifEmpty { " " }, "", 1)
|
||||
ModalEntry.activate(editor.vim) { key: KeyStroke ->
|
||||
return@activate when {
|
||||
key.isCloseKeyStroke() -> {
|
||||
|
@ -34,7 +34,6 @@ import com.maddyhome.idea.vim.api.globalOptions
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.command.VimStateMachine
|
||||
import com.maddyhome.idea.vim.group.NotificationService
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.inNormalMode
|
||||
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
||||
import com.maddyhome.idea.vim.helper.vimStateMachine
|
||||
@ -163,7 +162,10 @@ object IdeaSpecifics {
|
||||
// Enable insert mode if there is no selection in template
|
||||
// Template with selection is handled by [com.maddyhome.idea.vim.group.visual.VisualMotionGroup.controlNonVimSelectionChange]
|
||||
if (editor.inNormalMode) {
|
||||
VimPlugin.getChange().insertBeforeCursor(editor.vim, EditorDataContext.init(editor).vim)
|
||||
VimPlugin.getChange().insertBeforeCursor(
|
||||
editor.vim,
|
||||
injector.executionContextManager.onEditor(editor.vim)
|
||||
)
|
||||
KeyHandler.getInstance().reset(editor.vim)
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ package com.maddyhome.idea.vim.newapi
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
|
||||
open class IjEditorExecutionContext(override val context: DataContext) : ExecutionContext.Editor {
|
||||
override fun updateEditor(editor: VimEditor): ExecutionContext {
|
||||
return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context))
|
||||
return IjEditorExecutionContext(injector.executionContextManager.onEditor(editor, context.vim).ij)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@ import com.maddyhome.idea.vim.api.ExecutionContext
|
||||
import com.maddyhome.idea.vim.api.ExecutionContextManagerBase
|
||||
import com.maddyhome.idea.vim.api.VimCaret
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.options.helpers.StrictMode
|
||||
|
||||
@ -21,8 +22,6 @@ import com.maddyhome.idea.vim.options.helpers.StrictMode
|
||||
class IjExecutionContextManager : ExecutionContextManagerBase() {
|
||||
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor {
|
||||
if (prevContext is ExecutionContext.CaretAndEditor) {
|
||||
StrictMode.fail("You should not create context on editor from the context on caret and editor")
|
||||
prevContext.updateEditor(editor)
|
||||
return prevContext
|
||||
}
|
||||
return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij))
|
||||
|
@ -17,8 +17,11 @@ import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.util.IJSwingUtilities;
|
||||
import com.maddyhome.idea.vim.KeyHandler;
|
||||
import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.api.ExecutionContext;
|
||||
import com.maddyhome.idea.vim.helper.HelperKt;
|
||||
import com.maddyhome.idea.vim.helper.MessageHelper;
|
||||
import com.maddyhome.idea.vim.helper.UiHelper;
|
||||
import com.maddyhome.idea.vim.helper.UserDataManager;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@ -296,8 +299,8 @@ public class ExOutputPanel extends JPanel {
|
||||
final List<KeyStroke> keys = new ArrayList<>(1);
|
||||
keys.add(key);
|
||||
KeyHandler.getInstance().getKeyStack().addKeys(keys);
|
||||
VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), new IjEditorExecutionContext(EditorDataContext.init(myEditor, null)),
|
||||
1);
|
||||
ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(myEditor), null);
|
||||
VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), context, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ package com.maddyhome.idea.vim.ui.ex
|
||||
import com.intellij.openapi.diagnostic.debug
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import java.awt.event.ActionEvent
|
||||
@ -125,7 +125,11 @@ object ExEditorKit : DefaultEditorKit() {
|
||||
if (target.useHandleKeyFromEx) {
|
||||
val entry = ExEntryPanel.getInstance().entry
|
||||
val editor = entry.editor
|
||||
KeyHandler.getInstance().handleKey(editor.vim, key, EditorDataContext.init(editor, entry.context).vim)
|
||||
KeyHandler.getInstance().handleKey(
|
||||
editor.vim,
|
||||
key,
|
||||
injector.executionContextManager.onEditor(editor.vim, entry.context.vim)
|
||||
)
|
||||
} else {
|
||||
val event = ActionEvent(e.source, e.id, c.toString(), e.getWhen(), e.modifiers)
|
||||
super.actionPerformed(event)
|
||||
|
@ -13,7 +13,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.KeyboardShortcut
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import java.awt.event.KeyEvent
|
||||
import javax.swing.KeyStroke
|
||||
@ -36,7 +36,11 @@ class ExShortcutKeyAction(private val exEntryPanel: ExEntryPanel) : DumbAwareAct
|
||||
val keyStroke = getKeyStroke(e)
|
||||
if (keyStroke != null) {
|
||||
val editor = exEntryPanel.entry.editor
|
||||
KeyHandler.getInstance().handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, e.dataContext).vim)
|
||||
KeyHandler.getInstance().handleKey(
|
||||
editor.vim,
|
||||
keyStroke,
|
||||
injector.executionContextManager.onEditor(editor.vim, e.dataContext.vim)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,6 @@ import com.maddyhome.idea.vim.command.VimStateMachine.SubMode
|
||||
import com.maddyhome.idea.vim.ex.ExException
|
||||
import com.maddyhome.idea.vim.ex.ExOutputModel.Companion.getInstance
|
||||
import com.maddyhome.idea.vim.group.visual.VimVisualTimer.swingTimer
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||
import com.maddyhome.idea.vim.helper.GuicursorChangeListener
|
||||
import com.maddyhome.idea.vim.helper.RunnableHelper.runWriteCommand
|
||||
@ -59,6 +58,7 @@ import com.maddyhome.idea.vim.key.MappingOwner
|
||||
import com.maddyhome.idea.vim.key.ToKeysMappingInfo
|
||||
import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor
|
||||
import com.maddyhome.idea.vim.newapi.ij
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import com.maddyhome.idea.vim.options.OptionConstants
|
||||
import com.maddyhome.idea.vim.options.OptionScope
|
||||
@ -645,7 +645,7 @@ abstract class VimTestCase : UsefulTestCase() {
|
||||
|
||||
val e = AnActionEvent(
|
||||
event,
|
||||
EditorDataContext.init(editor),
|
||||
injector.executionContextManager.onEditor(editor.vim).ij,
|
||||
ActionPlaces.KEYBOARD_SHORTCUT,
|
||||
VimShortcutKeyAction.instance.templatePresentation.clone(),
|
||||
ActionManager.getInstance(),
|
||||
@ -666,7 +666,7 @@ abstract class VimTestCase : UsefulTestCase() {
|
||||
|
||||
fun typeText(keys: List<KeyStroke?>, editor: Editor, project: Project?) {
|
||||
val keyHandler = KeyHandler.getInstance()
|
||||
val dataContext = EditorDataContext.init(editor)
|
||||
val dataContext = injector.executionContextManager.onEditor(editor.vim)
|
||||
TestInputModel.getInstance(editor).setKeyStrokes(keys.filterNotNull())
|
||||
runWriteCommand(
|
||||
project,
|
||||
@ -674,7 +674,7 @@ abstract class VimTestCase : UsefulTestCase() {
|
||||
val inputModel = TestInputModel.getInstance(editor)
|
||||
var key = inputModel.nextKeyStroke()
|
||||
while (key != null) {
|
||||
keyHandler.handleKey(editor.vim, key, dataContext.vim)
|
||||
keyHandler.handleKey(editor.vim, key, dataContext)
|
||||
key = inputModel.nextKeyStroke()
|
||||
}
|
||||
},
|
||||
|
@ -14,7 +14,6 @@ import com.intellij.openapi.editor.VisualPosition
|
||||
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
import junit.framework.TestCase
|
||||
@ -286,7 +285,10 @@ class CaretVisualAttributesHelperTest : VimTestCase() {
|
||||
|all rocks and lavender and tufted grass,
|
||||
""".trimMargin()
|
||||
)
|
||||
injector.actionExecutor.executeAction("EditorCloneCaretBelow", EditorDataContext.init(myFixture.editor).vim)
|
||||
injector.actionExecutor.executeAction(
|
||||
"EditorCloneCaretBelow",
|
||||
injector.executionContextManager.onEditor(myFixture.editor.vim)
|
||||
)
|
||||
TestCase.assertEquals(2, myFixture.editor.caretModel.caretCount)
|
||||
assertCaretVisualAttributes(CaretVisualAttributes.Shape.BLOCK, 0f)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user