diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index f0cc32bf3..f7ee75d8d 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -191,6 +191,10 @@ </codeStyleSettings> <codeStyleSettings language="kotlin"> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> + <indentOptions> + <option name="INDENT_SIZE" value="2" /> + <option name="TAB_SIZE" value="2" /> + </indentOptions> </codeStyleSettings> </code_scheme> </component> \ No newline at end of file diff --git a/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt b/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt index cdbe2d87e..f39e66b39 100644 --- a/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt +++ b/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt @@ -35,7 +35,7 @@ import com.maddyhome.idea.vim.helper.mode import com.maddyhome.idea.vim.helper.subMode import com.maddyhome.idea.vim.helper.vimStateMachine import com.maddyhome.idea.vim.key.OperatorFunction -import com.maddyhome.idea.vim.newapi.IjExecutionContext +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext import com.maddyhome.idea.vim.newapi.IjVimEditor import com.maddyhome.idea.vim.newapi.ij import com.maddyhome.idea.vim.newapi.vim @@ -169,7 +169,7 @@ class ReplaceWithRegister : VimExtension { ClipboardOptionHelper.IdeaputDisabler().use { VimPlugin.getPut().putText( IjVimEditor(editor), - IjExecutionContext(EditorDataContext.init(editor)), + IjEditorExecutionContext(EditorDataContext.init(editor)), putData, operatorArguments = OperatorArguments( editor.vimStateMachine?.isOperatorPending ?: false, diff --git a/src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java b/src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java index a170de807..c030959eb 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java @@ -45,8 +45,8 @@ import com.maddyhome.idea.vim.helper.*; import com.maddyhome.idea.vim.icons.VimIcons; import com.maddyhome.idea.vim.key.KeyHandlerKeeper; import com.maddyhome.idea.vim.listener.VimInsertListener; -import com.maddyhome.idea.vim.newapi.IjExecutionContext; -import com.maddyhome.idea.vim.newapi.IjExecutionContextKt; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContextKt; import com.maddyhome.idea.vim.newapi.IjVimCaret; import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.options.OptionConstants; @@ -99,7 +99,7 @@ public class ChangeGroup extends VimChangeGroupBase { @Override public void type(@NotNull VimEditor vimEditor, @NotNull ExecutionContext context, char key) { Editor editor = ((IjVimEditor) vimEditor).getEditor(); - DataContext ijContext = IjExecutionContextKt.getIj(context); + DataContext ijContext = IjEditorExecutionContextKt.getIj(context); final Document doc = ((IjVimEditor) vimEditor).getEditor().getDocument(); CommandProcessor.getInstance().executeCommand(editor.getProject(), () -> ApplicationManager.getApplication() .runWriteAction(() -> KeyHandlerKeeper.getInstance().getOriginalHandler().execute(editor, key, ijContext)), "", doc, @@ -116,7 +116,7 @@ public class ChangeGroup extends VimChangeGroupBase { final @NotNull Argument argument, boolean isChange, @NotNull OperatorArguments operatorArguments) { - final TextRange range = MotionGroup.getMotionRange2(((IjVimEditor) editor).getEditor(), ((IjVimCaret) caret).getCaret(), ((IjExecutionContext) context).getContext(), argument, operatorArguments); + final TextRange range = MotionGroup.getMotionRange2(((IjVimEditor) editor).getEditor(), ((IjVimCaret) caret).getCaret(), ((IjEditorExecutionContext) context).getContext(), argument, operatorArguments); if (range == null) return null; // Delete motion commands that are not linewise become linewise if all the following are true: @@ -210,7 +210,7 @@ public class ChangeGroup extends VimChangeGroupBase { final int lineLength = EngineEditorHelperKt.lineLength(editor, line); if (column < VimMotionGroupBase.LAST_COLUMN && lineLength < column) { - final String pad = EditorHelper.pad(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), line, column); + final String pad = EditorHelper.pad(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), line, column); final int offset = editor.getLineEndOffset(line); insertText(editor, caret, offset, pad); } @@ -436,7 +436,7 @@ public class ChangeGroup extends VimChangeGroupBase { // Remember the current caret column final int intendedColumn = caret.getVimLastColumn(); - IndentConfig indentConfig = IndentConfig.create(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext()); + IndentConfig indentConfig = IndentConfig.create(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext()); final int sline = editor.offsetToBufferPosition(range.getStartOffset()).getLine(); final BufferPosition endLogicalPosition = editor.offsetToBufferPosition(range.getEndOffset()); diff --git a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java index abe7a9183..8a2567cc1 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java @@ -23,7 +23,7 @@ import com.maddyhome.idea.vim.VimPlugin; 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.IjExecutionContext; +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; @@ -36,7 +36,6 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; @@ -215,7 +214,7 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor if (!EditorHelper.isFileEditor(editor) && editor.getDocument().isWritable() && !CommandStateHelper.inInsertMode(editor)) { - VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjExecutionContext(EditorDataContext.init(editor, null))); + VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjEditorExecutionContext(EditorDataContext.init(editor, null))); KeyHandler.getInstance().reset(new IjVimEditor(editor)); } updateCaretsVisualAttributes(editor); diff --git a/src/main/java/com/maddyhome/idea/vim/group/FileGroup.java b/src/main/java/com/maddyhome/idea/vim/group/FileGroup.java index 9f5d1765d..a91d36050 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/FileGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/FileGroup.java @@ -37,7 +37,7 @@ import com.maddyhome.idea.vim.helper.EditorHelperRt; import com.maddyhome.idea.vim.helper.MessageHelper; import com.maddyhome.idea.vim.helper.SearchHelper; import com.maddyhome.idea.vim.newapi.ExecuteExtensionKt; -import com.maddyhome.idea.vim.newapi.IjExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.vimscript.services.IjOptionConstants; import org.jetbrains.annotations.NotNull; @@ -54,7 +54,7 @@ public class FileGroup extends VimFileBase { if (logger.isDebugEnabled()) { logger.debug("openFile(" + filename + ")"); } - final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext()); // API change - don't merge + final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext()); // API change - don't merge if (project == null) return false; VirtualFile found = findFile(filename, project); @@ -165,7 +165,7 @@ public class FileGroup extends VimFileBase { */ @Override public void closeFile(int number, @NotNull ExecutionContext context) { - final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext()); + final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext()); if (project == null) return; final FileEditorManagerEx fileEditorManager = FileEditorManagerEx.getInstanceEx(project); final EditorWindow window = fileEditorManager.getCurrentWindow(); @@ -207,7 +207,7 @@ public class FileGroup extends VimFileBase { */ @Override public boolean selectFile(int count, @NotNull ExecutionContext context) { - final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext()); + final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext()); if (project == null) return false; FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge VirtualFile[] editors = fem.getOpenFiles(); @@ -227,7 +227,7 @@ public class FileGroup extends VimFileBase { * Selects then next or previous editor. */ public void selectNextFile(int count, @NotNull ExecutionContext context) { - Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext()); + Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext()); if (project == null) return; FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge VirtualFile[] editors = fem.getOpenFiles(); diff --git a/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt b/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt index a11b68677..2d5258801 100755 --- a/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt +++ b/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt @@ -66,7 +66,7 @@ import com.maddyhome.idea.vim.helper.isEndAllowed import com.maddyhome.idea.vim.helper.vimLastColumn import com.maddyhome.idea.vim.listener.AppCodeTemplates import com.maddyhome.idea.vim.mark.Mark -import com.maddyhome.idea.vim.newapi.IjExecutionContext +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext import com.maddyhome.idea.vim.newapi.IjVimCaret import com.maddyhome.idea.vim.newapi.IjVimEditor import com.maddyhome.idea.vim.newapi.ij @@ -366,7 +366,7 @@ class MotionGroup : VimMotionGroupBase() { val motion = action.getHandlerOffset( editor.vim, caret.vim, - IjExecutionContext(context!!), + IjEditorExecutionContext(context!!), cmd.argument, operatorArguments.withCount0(raw) ) @@ -387,7 +387,7 @@ class MotionGroup : VimMotionGroupBase() { } else if (cmd.action is TextObjectActionHandler) { val action = cmd.action as TextObjectActionHandler val range = - action.getRange(editor.vim, caret.vim, IjExecutionContext(context!!), cnt, raw, cmd.argument) ?: return null + action.getRange(editor.vim, caret.vim, IjEditorExecutionContext(context!!), cnt, raw, cmd.argument) ?: return null start = range.startOffset end = range.endOffset if (cmd.isLinewiseMotion()) end-- diff --git a/src/main/java/com/maddyhome/idea/vim/group/ProcessGroup.java b/src/main/java/com/maddyhome/idea/vim/group/ProcessGroup.java index e712bc7a8..ecb08862d 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/ProcessGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/ProcessGroup.java @@ -34,7 +34,7 @@ import com.maddyhome.idea.vim.command.VimStateMachine; import com.maddyhome.idea.vim.ex.ExException; import com.maddyhome.idea.vim.ex.InvalidCommandException; import com.maddyhome.idea.vim.helper.UiHelper; -import com.maddyhome.idea.vim.newapi.IjExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.options.OptionConstants; import com.maddyhome.idea.vim.ui.ex.ExEntryPanel; @@ -84,7 +84,7 @@ public class ProcessGroup extends VimProcessGroupBase { String initText = getRange(((IjVimEditor) editor).getEditor(), cmd); VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE); ExEntryPanel panel = ExEntryPanel.getInstance(); - panel.activate(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), ":", initText, 1); + panel.activate(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), ":", initText, 1); } @Override @@ -159,7 +159,7 @@ public class ProcessGroup extends VimProcessGroupBase { String initText = getRange(((IjVimEditor) editor).getEditor(), cmd) + "!"; VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE); ExEntryPanel panel = ExEntryPanel.getInstance(); - panel.activate(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), ":", initText, 1); + panel.activate(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), ":", initText, 1); } private @NotNull String getRange(Editor editor, @NotNull Command cmd) { diff --git a/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java b/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java index 922f13297..b2ccab533 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java @@ -33,7 +33,7 @@ import com.maddyhome.idea.vim.ex.ExException; import com.maddyhome.idea.vim.ex.ranges.LineRange; import com.maddyhome.idea.vim.helper.*; import com.maddyhome.idea.vim.history.HistoryConstants; -import com.maddyhome.idea.vim.newapi.IjExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; import com.maddyhome.idea.vim.newapi.IjVimCaret; import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.options.OptionChangeListener; @@ -803,7 +803,7 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo if (expression != null) { try { match = expression - .evaluate(editor, new IjExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent) + .evaluate(editor, new IjEditorExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent) .toInsertableString(); } catch (Exception e) { exceptions.add((ExException) e); diff --git a/src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java b/src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java index 3bcd8f5dc..56275a6ec 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java @@ -20,7 +20,7 @@ import com.maddyhome.idea.vim.VimPlugin; import com.maddyhome.idea.vim.api.ExecutionContext; import com.maddyhome.idea.vim.helper.MessageHelper; import com.maddyhome.idea.vim.helper.RWLockLabel; -import com.maddyhome.idea.vim.newapi.IjExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -51,7 +51,7 @@ public class WindowGroup extends WindowGroupBase { } public void closeAll(@NotNull ExecutionContext context) { - getFileEditorManager(((IjExecutionContext) context).getContext()).closeAllFiles(); + getFileEditorManager(((IjEditorExecutionContext) context).getContext()).closeAllFiles(); } @Override diff --git a/src/main/java/com/maddyhome/idea/vim/helper/IjActionExecutor.kt b/src/main/java/com/maddyhome/idea/vim/helper/IjActionExecutor.kt index 83ffbcccc..b9d074c04 100644 --- a/src/main/java/com/maddyhome/idea/vim/helper/IjActionExecutor.kt +++ b/src/main/java/com/maddyhome/idea/vim/helper/IjActionExecutor.kt @@ -31,6 +31,7 @@ import com.maddyhome.idea.vim.api.ExecutionContext import com.maddyhome.idea.vim.api.NativeAction import com.maddyhome.idea.vim.api.VimActionExecutor import com.maddyhome.idea.vim.api.VimEditor +import com.maddyhome.idea.vim.api.injector import com.maddyhome.idea.vim.command.OperatorArguments import com.maddyhome.idea.vim.handler.EditorActionHandlerBase import com.maddyhome.idea.vim.newapi.IjNativeAction @@ -163,7 +164,7 @@ class IjActionExecutor : VimActionExecutor { CommandProcessor.getInstance() .executeCommand( editor.ij.project, - { cmd.execute(editor, EditorDataContext.init(editor.ij, context.ij).vim, operatorArguments) }, + { cmd.execute(editor, injector.executionContextManager.onEditor(editor, context), operatorArguments) }, cmd.id, DocCommandGroupId.noneGroupId(editor.ij.document), UndoConfirmationPolicy.DEFAULT, editor.ij.document ) diff --git a/src/main/java/com/maddyhome/idea/vim/helper/ModeExtensions.kt b/src/main/java/com/maddyhome/idea/vim/helper/ModeExtensions.kt index 3ca8a2268..016a90a83 100644 --- a/src/main/java/com/maddyhome/idea/vim/helper/ModeExtensions.kt +++ b/src/main/java/com/maddyhome/idea/vim/helper/ModeExtensions.kt @@ -19,7 +19,7 @@ import com.maddyhome.idea.vim.api.getLineStartForOffset import com.maddyhome.idea.vim.command.OperatorArguments import com.maddyhome.idea.vim.command.VimStateMachine import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor -import com.maddyhome.idea.vim.newapi.IjExecutionContext +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext import com.maddyhome.idea.vim.newapi.IjVimCaret import com.maddyhome.idea.vim.newapi.IjVimEditor import com.maddyhome.idea.vim.newapi.vim @@ -76,5 +76,5 @@ fun VimEditor.exitSelectMode(adjustCaretPosition: Boolean) { } fun Editor.exitInsertMode(context: DataContext, operatorArguments: OperatorArguments) { - VimPlugin.getChange().processEscape(IjVimEditor(this), IjExecutionContext(context), operatorArguments) + VimPlugin.getChange().processEscape(IjVimEditor(this), IjEditorExecutionContext(context), operatorArguments) } diff --git a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContext.kt b/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt similarity index 54% rename from src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContext.kt rename to src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt index 05f94bf28..f7ccae6b2 100644 --- a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContext.kt +++ b/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt @@ -13,14 +13,16 @@ import com.maddyhome.idea.vim.api.ExecutionContext import com.maddyhome.idea.vim.api.VimEditor import com.maddyhome.idea.vim.helper.EditorDataContext -class IjExecutionContext(override val context: DataContext) : ExecutionContext { +open class IjEditorExecutionContext(override val context: DataContext) : ExecutionContext.Editor { override fun updateEditor(editor: VimEditor): ExecutionContext { - return IjExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context)) + return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context)) } } -val DataContext.vim - get() = IjExecutionContext(this) +class IjCaretAndEditorExecutionContext(override val context: DataContext) : IjEditorExecutionContext(context), ExecutionContext.CaretAndEditor + +val DataContext.vim: ExecutionContext + get() = IjEditorExecutionContext(this) val ExecutionContext.ij: DataContext - get() = (this as IjExecutionContext).context + get() = (this as IjEditorExecutionContext).context diff --git a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt b/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt index dd85ba2af..b1040dbe6 100644 --- a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt +++ b/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt @@ -15,22 +15,20 @@ 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.helper.EditorDataContext +import com.maddyhome.idea.vim.options.helpers.StrictMode @Service class IjExecutionContextManager : ExecutionContextManagerBase() { - override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext { - return IjExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij)) + 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)) } - override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext { - return IjExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij)) - } - - override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext { - return IjExecutionContext(CaretSpecificDataContext.create(context.ij, caret.ij)) - } - - override fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext { - return EditorDataContext.init(editor.ij, context.ij).vim + override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor { + return IjCaretAndEditorExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij)) } } diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java index 2d9641ce4..8bc5ac3bf 100644 --- a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java +++ b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java @@ -18,7 +18,7 @@ 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.IjExecutionContext; +import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext; import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.options.OptionConstants; import org.jetbrains.annotations.Nls; @@ -296,7 +296,7 @@ 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 IjExecutionContext(EditorDataContext.init(myEditor, null)), + VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), new IjEditorExecutionContext(EditorDataContext.init(myEditor, null)), 1); } }); diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/ExecutionContext.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/ExecutionContext.kt index b9a9caa3c..cc1076ee4 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/ExecutionContext.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/ExecutionContext.kt @@ -12,16 +12,17 @@ package com.maddyhome.idea.vim.api * This would be ideal if we could provide a typed solution, but sofar this is just a holder */ -interface ExecutionContext { +sealed interface ExecutionContext { val context: Any // TODO: 10.02.2022 Not sure about this method fun updateEditor(editor: VimEditor): ExecutionContext + + interface Editor : ExecutionContext + interface CaretAndEditor : Editor } interface ExecutionContextManager { - fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext - fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext - fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext - fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext + fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext.Editor + fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor } diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/stubs/ExecutionContextManagerStub.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/stubs/ExecutionContextManagerStub.kt index 9eccf0130..06e2afa11 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/stubs/ExecutionContextManagerStub.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/stubs/ExecutionContextManagerStub.kt @@ -19,19 +19,11 @@ class ExecutionContextManagerStub : ExecutionContextManager { vimLogger<ExecutionContextManagerStub>().warn("ExecutionContextManagerStub is used. Please replace it with your own implementation of ExecutionContextManager.") } - override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext { + override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor { TODO("Not yet implemented") } - override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext { - TODO("Not yet implemented") - } - - override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext { - TODO("Not yet implemented") - } - - override fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext { + override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor { TODO("Not yet implemented") } } diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt index 3ec8de328..d7eedfaba 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt @@ -74,7 +74,7 @@ abstract class EditorActionHandlerBase(private val myRunForEachCaret: Boolean) { operatorArguments: OperatorArguments, ): Boolean - fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) { + fun execute(editor: VimEditor, context: ExecutionContext.Editor, operatorArguments: OperatorArguments) { val action = { caret: VimCaret -> doExecute(editor, caret, context, operatorArguments) } if (myRunForEachCaret) { editor.forEachCaret(action) @@ -83,7 +83,7 @@ abstract class EditorActionHandlerBase(private val myRunForEachCaret: Boolean) { } } - private fun doExecute(editor: VimEditor, caret: VimCaret, context: ExecutionContext, operatorArguments: OperatorArguments) { + private fun doExecute(editor: VimEditor, caret: VimCaret, context: ExecutionContext.Editor, operatorArguments: OperatorArguments) { if (!injector.enabler.isEnabled()) return logger.debug("Execute command with handler: " + this.javaClass.name) diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/MappingInfo.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/MappingInfo.kt index be780dab8..79199db57 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/MappingInfo.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/MappingInfo.kt @@ -243,7 +243,7 @@ class ToActionMappingInfo( override fun execute(editor: VimEditor, context: ExecutionContext) { LOG.debug("Executing 'ToAction' mapping...") val editorDataContext = injector.executionContextManager.onEditor(editor, context) - val dataContext = injector.executionContextManager.createCaretSpecificDataContext(editorDataContext, editor.currentCaret()) + val dataContext = injector.executionContextManager.onCaret(editor.currentCaret(), editorDataContext) injector.actionExecutor.executeAction(action, dataContext) } diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EditFileCommand.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EditFileCommand.kt index f7370a1e8..dab127e36 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EditFileCommand.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EditFileCommand.kt @@ -36,7 +36,7 @@ data class EditFileCommand(val ranges: Ranges, val argument: String) : Command.S // Don't open a choose file dialog under a write action injector.application.invokeLater { - injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.createEditorDataContext(editor, context)) + injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.onEditor(editor, context)) } return ExecutionResult.Success