1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-05-21 07:34:05 +02:00

Update creation of execution context

This commit is contained in:
Alex Plate 2023-03-08 11:35:01 +02:00
parent 897d393342
commit 0e96819e86
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
19 changed files with 64 additions and 67 deletions

View File

@ -191,6 +191,10 @@
</codeStyleSettings> </codeStyleSettings>
<codeStyleSettings language="kotlin"> <codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings> </codeStyleSettings>
</code_scheme> </code_scheme>
</component> </component>

View File

@ -35,7 +35,7 @@ import com.maddyhome.idea.vim.helper.mode
import com.maddyhome.idea.vim.helper.subMode import com.maddyhome.idea.vim.helper.subMode
import com.maddyhome.idea.vim.helper.vimStateMachine import com.maddyhome.idea.vim.helper.vimStateMachine
import com.maddyhome.idea.vim.key.OperatorFunction 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.IjVimEditor
import com.maddyhome.idea.vim.newapi.ij import com.maddyhome.idea.vim.newapi.ij
import com.maddyhome.idea.vim.newapi.vim import com.maddyhome.idea.vim.newapi.vim
@ -169,7 +169,7 @@ class ReplaceWithRegister : VimExtension {
ClipboardOptionHelper.IdeaputDisabler().use { ClipboardOptionHelper.IdeaputDisabler().use {
VimPlugin.getPut().putText( VimPlugin.getPut().putText(
IjVimEditor(editor), IjVimEditor(editor),
IjExecutionContext(EditorDataContext.init(editor)), IjEditorExecutionContext(EditorDataContext.init(editor)),
putData, putData,
operatorArguments = OperatorArguments( operatorArguments = OperatorArguments(
editor.vimStateMachine?.isOperatorPending ?: false, editor.vimStateMachine?.isOperatorPending ?: false,

View File

@ -45,8 +45,8 @@ import com.maddyhome.idea.vim.helper.*;
import com.maddyhome.idea.vim.icons.VimIcons; import com.maddyhome.idea.vim.icons.VimIcons;
import com.maddyhome.idea.vim.key.KeyHandlerKeeper; import com.maddyhome.idea.vim.key.KeyHandlerKeeper;
import com.maddyhome.idea.vim.listener.VimInsertListener; import com.maddyhome.idea.vim.listener.VimInsertListener;
import com.maddyhome.idea.vim.newapi.IjExecutionContext; import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
import com.maddyhome.idea.vim.newapi.IjExecutionContextKt; import com.maddyhome.idea.vim.newapi.IjEditorExecutionContextKt;
import com.maddyhome.idea.vim.newapi.IjVimCaret; import com.maddyhome.idea.vim.newapi.IjVimCaret;
import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.newapi.IjVimEditor;
import com.maddyhome.idea.vim.options.OptionConstants; import com.maddyhome.idea.vim.options.OptionConstants;
@ -99,7 +99,7 @@ public class ChangeGroup extends VimChangeGroupBase {
@Override @Override
public void type(@NotNull VimEditor vimEditor, @NotNull ExecutionContext context, char key) { public void type(@NotNull VimEditor vimEditor, @NotNull ExecutionContext context, char key) {
Editor editor = ((IjVimEditor) vimEditor).getEditor(); Editor editor = ((IjVimEditor) vimEditor).getEditor();
DataContext ijContext = IjExecutionContextKt.getIj(context); DataContext ijContext = IjEditorExecutionContextKt.getIj(context);
final Document doc = ((IjVimEditor) vimEditor).getEditor().getDocument(); final Document doc = ((IjVimEditor) vimEditor).getEditor().getDocument();
CommandProcessor.getInstance().executeCommand(editor.getProject(), () -> ApplicationManager.getApplication() CommandProcessor.getInstance().executeCommand(editor.getProject(), () -> ApplicationManager.getApplication()
.runWriteAction(() -> KeyHandlerKeeper.getInstance().getOriginalHandler().execute(editor, key, ijContext)), "", doc, .runWriteAction(() -> KeyHandlerKeeper.getInstance().getOriginalHandler().execute(editor, key, ijContext)), "", doc,
@ -116,7 +116,7 @@ public class ChangeGroup extends VimChangeGroupBase {
final @NotNull Argument argument, final @NotNull Argument argument,
boolean isChange, boolean isChange,
@NotNull OperatorArguments operatorArguments) { @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; if (range == null) return null;
// Delete motion commands that are not linewise become linewise if all the following are true: // 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); final int lineLength = EngineEditorHelperKt.lineLength(editor, line);
if (column < VimMotionGroupBase.LAST_COLUMN && lineLength < column) { 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); final int offset = editor.getLineEndOffset(line);
insertText(editor, caret, offset, pad); insertText(editor, caret, offset, pad);
} }
@ -436,7 +436,7 @@ public class ChangeGroup extends VimChangeGroupBase {
// Remember the current caret column // Remember the current caret column
final int intendedColumn = caret.getVimLastColumn(); 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 int sline = editor.offsetToBufferPosition(range.getStartOffset()).getLine();
final BufferPosition endLogicalPosition = editor.offsetToBufferPosition(range.getEndOffset()); final BufferPosition endLogicalPosition = editor.offsetToBufferPosition(range.getEndOffset());

View File

@ -23,7 +23,7 @@ import com.maddyhome.idea.vim.VimPlugin;
import com.maddyhome.idea.vim.api.VimEditor; import com.maddyhome.idea.vim.api.VimEditor;
import com.maddyhome.idea.vim.api.VimEditorGroup; import com.maddyhome.idea.vim.api.VimEditorGroup;
import com.maddyhome.idea.vim.helper.*; 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.newapi.IjVimEditor;
import com.maddyhome.idea.vim.options.LocalOptionChangeListener; import com.maddyhome.idea.vim.options.LocalOptionChangeListener;
import com.maddyhome.idea.vim.options.OptionConstants; 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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -215,7 +214,7 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
if (!EditorHelper.isFileEditor(editor) && if (!EditorHelper.isFileEditor(editor) &&
editor.getDocument().isWritable() && editor.getDocument().isWritable() &&
!CommandStateHelper.inInsertMode(editor)) { !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)); KeyHandler.getInstance().reset(new IjVimEditor(editor));
} }
updateCaretsVisualAttributes(editor); updateCaretsVisualAttributes(editor);

View File

@ -37,7 +37,7 @@ import com.maddyhome.idea.vim.helper.EditorHelperRt;
import com.maddyhome.idea.vim.helper.MessageHelper; import com.maddyhome.idea.vim.helper.MessageHelper;
import com.maddyhome.idea.vim.helper.SearchHelper; import com.maddyhome.idea.vim.helper.SearchHelper;
import com.maddyhome.idea.vim.newapi.ExecuteExtensionKt; 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.newapi.IjVimEditor;
import com.maddyhome.idea.vim.vimscript.services.IjOptionConstants; import com.maddyhome.idea.vim.vimscript.services.IjOptionConstants;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -54,7 +54,7 @@ public class FileGroup extends VimFileBase {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("openFile(" + filename + ")"); 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; if (project == null) return false;
VirtualFile found = findFile(filename, project); VirtualFile found = findFile(filename, project);
@ -165,7 +165,7 @@ public class FileGroup extends VimFileBase {
*/ */
@Override @Override
public void closeFile(int number, @NotNull ExecutionContext context) { 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; if (project == null) return;
final FileEditorManagerEx fileEditorManager = FileEditorManagerEx.getInstanceEx(project); final FileEditorManagerEx fileEditorManager = FileEditorManagerEx.getInstanceEx(project);
final EditorWindow window = fileEditorManager.getCurrentWindow(); final EditorWindow window = fileEditorManager.getCurrentWindow();
@ -207,7 +207,7 @@ public class FileGroup extends VimFileBase {
*/ */
@Override @Override
public boolean selectFile(int count, @NotNull ExecutionContext context) { 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; if (project == null) return false;
FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge
VirtualFile[] editors = fem.getOpenFiles(); VirtualFile[] editors = fem.getOpenFiles();
@ -227,7 +227,7 @@ public class FileGroup extends VimFileBase {
* Selects then next or previous editor. * Selects then next or previous editor.
*/ */
public void selectNextFile(int count, @NotNull ExecutionContext context) { 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; if (project == null) return;
FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge
VirtualFile[] editors = fem.getOpenFiles(); VirtualFile[] editors = fem.getOpenFiles();

View File

@ -66,7 +66,7 @@ import com.maddyhome.idea.vim.helper.isEndAllowed
import com.maddyhome.idea.vim.helper.vimLastColumn import com.maddyhome.idea.vim.helper.vimLastColumn
import com.maddyhome.idea.vim.listener.AppCodeTemplates import com.maddyhome.idea.vim.listener.AppCodeTemplates
import com.maddyhome.idea.vim.mark.Mark 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.IjVimCaret
import com.maddyhome.idea.vim.newapi.IjVimEditor import com.maddyhome.idea.vim.newapi.IjVimEditor
import com.maddyhome.idea.vim.newapi.ij import com.maddyhome.idea.vim.newapi.ij
@ -366,7 +366,7 @@ class MotionGroup : VimMotionGroupBase() {
val motion = action.getHandlerOffset( val motion = action.getHandlerOffset(
editor.vim, editor.vim,
caret.vim, caret.vim,
IjExecutionContext(context!!), IjEditorExecutionContext(context!!),
cmd.argument, cmd.argument,
operatorArguments.withCount0(raw) operatorArguments.withCount0(raw)
) )
@ -387,7 +387,7 @@ class MotionGroup : VimMotionGroupBase() {
} else if (cmd.action is TextObjectActionHandler) { } else if (cmd.action is TextObjectActionHandler) {
val action = cmd.action as TextObjectActionHandler val action = cmd.action as TextObjectActionHandler
val range = 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 start = range.startOffset
end = range.endOffset end = range.endOffset
if (cmd.isLinewiseMotion()) end-- if (cmd.isLinewiseMotion()) end--

View File

@ -34,7 +34,7 @@ import com.maddyhome.idea.vim.command.VimStateMachine;
import com.maddyhome.idea.vim.ex.ExException; import com.maddyhome.idea.vim.ex.ExException;
import com.maddyhome.idea.vim.ex.InvalidCommandException; import com.maddyhome.idea.vim.ex.InvalidCommandException;
import com.maddyhome.idea.vim.helper.UiHelper; 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.newapi.IjVimEditor;
import com.maddyhome.idea.vim.options.OptionConstants; import com.maddyhome.idea.vim.options.OptionConstants;
import com.maddyhome.idea.vim.ui.ex.ExEntryPanel; import com.maddyhome.idea.vim.ui.ex.ExEntryPanel;
@ -84,7 +84,7 @@ public class ProcessGroup extends VimProcessGroupBase {
String initText = getRange(((IjVimEditor) editor).getEditor(), cmd); String initText = getRange(((IjVimEditor) editor).getEditor(), cmd);
VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE); VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE);
ExEntryPanel panel = ExEntryPanel.getInstance(); 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 @Override
@ -159,7 +159,7 @@ public class ProcessGroup extends VimProcessGroupBase {
String initText = getRange(((IjVimEditor) editor).getEditor(), cmd) + "!"; String initText = getRange(((IjVimEditor) editor).getEditor(), cmd) + "!";
VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE); VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE);
ExEntryPanel panel = ExEntryPanel.getInstance(); 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) { private @NotNull String getRange(Editor editor, @NotNull Command cmd) {

View File

@ -33,7 +33,7 @@ import com.maddyhome.idea.vim.ex.ExException;
import com.maddyhome.idea.vim.ex.ranges.LineRange; import com.maddyhome.idea.vim.ex.ranges.LineRange;
import com.maddyhome.idea.vim.helper.*; import com.maddyhome.idea.vim.helper.*;
import com.maddyhome.idea.vim.history.HistoryConstants; 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.IjVimCaret;
import com.maddyhome.idea.vim.newapi.IjVimEditor; import com.maddyhome.idea.vim.newapi.IjVimEditor;
import com.maddyhome.idea.vim.options.OptionChangeListener; import com.maddyhome.idea.vim.options.OptionChangeListener;
@ -803,7 +803,7 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
if (expression != null) { if (expression != null) {
try { try {
match = expression 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(); .toInsertableString();
} catch (Exception e) { } catch (Exception e) {
exceptions.add((ExException) e); exceptions.add((ExException) e);

View File

@ -20,7 +20,7 @@ import com.maddyhome.idea.vim.VimPlugin;
import com.maddyhome.idea.vim.api.ExecutionContext; import com.maddyhome.idea.vim.api.ExecutionContext;
import com.maddyhome.idea.vim.helper.MessageHelper; import com.maddyhome.idea.vim.helper.MessageHelper;
import com.maddyhome.idea.vim.helper.RWLockLabel; 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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -51,7 +51,7 @@ public class WindowGroup extends WindowGroupBase {
} }
public void closeAll(@NotNull ExecutionContext context) { public void closeAll(@NotNull ExecutionContext context) {
getFileEditorManager(((IjExecutionContext) context).getContext()).closeAllFiles(); getFileEditorManager(((IjEditorExecutionContext) context).getContext()).closeAllFiles();
} }
@Override @Override

View File

@ -31,6 +31,7 @@ import com.maddyhome.idea.vim.api.ExecutionContext
import com.maddyhome.idea.vim.api.NativeAction import com.maddyhome.idea.vim.api.NativeAction
import com.maddyhome.idea.vim.api.VimActionExecutor import com.maddyhome.idea.vim.api.VimActionExecutor
import com.maddyhome.idea.vim.api.VimEditor 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.command.OperatorArguments
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase import com.maddyhome.idea.vim.handler.EditorActionHandlerBase
import com.maddyhome.idea.vim.newapi.IjNativeAction import com.maddyhome.idea.vim.newapi.IjNativeAction
@ -163,7 +164,7 @@ class IjActionExecutor : VimActionExecutor {
CommandProcessor.getInstance() CommandProcessor.getInstance()
.executeCommand( .executeCommand(
editor.ij.project, 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, cmd.id, DocCommandGroupId.noneGroupId(editor.ij.document), UndoConfirmationPolicy.DEFAULT,
editor.ij.document editor.ij.document
) )

View File

@ -19,7 +19,7 @@ import com.maddyhome.idea.vim.api.getLineStartForOffset
import com.maddyhome.idea.vim.command.OperatorArguments import com.maddyhome.idea.vim.command.OperatorArguments
import com.maddyhome.idea.vim.command.VimStateMachine import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor 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.IjVimCaret
import com.maddyhome.idea.vim.newapi.IjVimEditor import com.maddyhome.idea.vim.newapi.IjVimEditor
import com.maddyhome.idea.vim.newapi.vim import com.maddyhome.idea.vim.newapi.vim
@ -76,5 +76,5 @@ fun VimEditor.exitSelectMode(adjustCaretPosition: Boolean) {
} }
fun Editor.exitInsertMode(context: DataContext, operatorArguments: OperatorArguments) { fun Editor.exitInsertMode(context: DataContext, operatorArguments: OperatorArguments) {
VimPlugin.getChange().processEscape(IjVimEditor(this), IjExecutionContext(context), operatorArguments) VimPlugin.getChange().processEscape(IjVimEditor(this), IjEditorExecutionContext(context), operatorArguments)
} }

View File

@ -13,14 +13,16 @@ import com.maddyhome.idea.vim.api.ExecutionContext
import com.maddyhome.idea.vim.api.VimEditor import com.maddyhome.idea.vim.api.VimEditor
import com.maddyhome.idea.vim.helper.EditorDataContext 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 { 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 class IjCaretAndEditorExecutionContext(override val context: DataContext) : IjEditorExecutionContext(context), ExecutionContext.CaretAndEditor
get() = IjExecutionContext(this)
val DataContext.vim: ExecutionContext
get() = IjEditorExecutionContext(this)
val ExecutionContext.ij: DataContext val ExecutionContext.ij: DataContext
get() = (this as IjExecutionContext).context get() = (this as IjEditorExecutionContext).context

View File

@ -15,22 +15,20 @@ import com.maddyhome.idea.vim.api.ExecutionContextManagerBase
import com.maddyhome.idea.vim.api.VimCaret import com.maddyhome.idea.vim.api.VimCaret
import com.maddyhome.idea.vim.api.VimEditor import com.maddyhome.idea.vim.api.VimEditor
import com.maddyhome.idea.vim.helper.EditorDataContext import com.maddyhome.idea.vim.helper.EditorDataContext
import com.maddyhome.idea.vim.options.helpers.StrictMode
@Service @Service
class IjExecutionContextManager : ExecutionContextManagerBase() { class IjExecutionContextManager : ExecutionContextManagerBase() {
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext { override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor {
return IjExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij)) 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 { override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor {
return IjExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij)) return IjCaretAndEditorExecutionContext(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
} }
} }

View File

@ -18,7 +18,7 @@ import com.intellij.util.IJSwingUtilities;
import com.maddyhome.idea.vim.KeyHandler; import com.maddyhome.idea.vim.KeyHandler;
import com.maddyhome.idea.vim.VimPlugin; import com.maddyhome.idea.vim.VimPlugin;
import com.maddyhome.idea.vim.helper.*; 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.newapi.IjVimEditor;
import com.maddyhome.idea.vim.options.OptionConstants; import com.maddyhome.idea.vim.options.OptionConstants;
import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nls;
@ -296,7 +296,7 @@ public class ExOutputPanel extends JPanel {
final List<KeyStroke> keys = new ArrayList<>(1); final List<KeyStroke> keys = new ArrayList<>(1);
keys.add(key); keys.add(key);
KeyHandler.getInstance().getKeyStack().addKeys(keys); 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); 1);
} }
}); });

View File

@ -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 * 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 val context: Any
// TODO: 10.02.2022 Not sure about this method // TODO: 10.02.2022 Not sure about this method
fun updateEditor(editor: VimEditor): ExecutionContext fun updateEditor(editor: VimEditor): ExecutionContext
interface Editor : ExecutionContext
interface CaretAndEditor : Editor
} }
interface ExecutionContextManager { interface ExecutionContextManager {
fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext.Editor
fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor
fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext
fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext
} }

View File

@ -19,19 +19,11 @@ class ExecutionContextManagerStub : ExecutionContextManager {
vimLogger<ExecutionContextManagerStub>().warn("ExecutionContextManagerStub is used. Please replace it with your own implementation of 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") TODO("Not yet implemented")
} }
override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext { override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor {
TODO("Not yet implemented")
}
override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext {
TODO("Not yet implemented")
}
override fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
} }

View File

@ -74,7 +74,7 @@ abstract class EditorActionHandlerBase(private val myRunForEachCaret: Boolean) {
operatorArguments: OperatorArguments, operatorArguments: OperatorArguments,
): Boolean ): 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) } val action = { caret: VimCaret -> doExecute(editor, caret, context, operatorArguments) }
if (myRunForEachCaret) { if (myRunForEachCaret) {
editor.forEachCaret(action) 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 if (!injector.enabler.isEnabled()) return
logger.debug("Execute command with handler: " + this.javaClass.name) logger.debug("Execute command with handler: " + this.javaClass.name)

View File

@ -243,7 +243,7 @@ class ToActionMappingInfo(
override fun execute(editor: VimEditor, context: ExecutionContext) { override fun execute(editor: VimEditor, context: ExecutionContext) {
LOG.debug("Executing 'ToAction' mapping...") LOG.debug("Executing 'ToAction' mapping...")
val editorDataContext = injector.executionContextManager.onEditor(editor, context) 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) injector.actionExecutor.executeAction(action, dataContext)
} }

View File

@ -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 // Don't open a choose file dialog under a write action
injector.application.invokeLater { injector.application.invokeLater {
injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.createEditorDataContext(editor, context)) injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.onEditor(editor, context))
} }
return ExecutionResult.Success return ExecutionResult.Success