Как я могу добавить еще один EditorActionHandler к одному IdeAction без потери функциональности? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть плагин, в который я хотел бы добавить дополнительную функциональность, когда пользователь запускает клавишу BACKSPACE и DELETE , не теряя первоначальную функциональность (в данном случае удаление символа).

Я пытаюсь переопределить EditorActionHandler для указанного ideActions.<ACTION_EDITOR_VALUE>:

public class MyPlugin implements BaseComponent {

@Override
public void initializeComponent() {

    final EditorActionManager editorActionManager = EditorActionManager.getInstance();
    EditorActionHandler originalBackspaceHandler = editorActionManager.getActionHandler(IdeActions.ACTION_EDITOR_BACKSPACE);

    EditorActionHandler eaHandler = new EditorActionHandler() {
        @Override
        protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) {
            super.doExecute(editor, caret, dataContext);

            originalBackspaceHandler.execute(editor,caret,dataContext);

            PsiElement e = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
            if(e != null) {
                System.out.println("psi Element" + e.toString());
            }
        }

    };        
  editorActionManager.setActionHandler(IdeActions.ACTION_EDITOR_DELETE,  eaHandler);   

} //initalizeComponent()   
} //MyPlugin

Является ли это предпочтительным способом переопределения обработчиков editorAction при сохранении текущей функциональности?Я хотел бы настроить таргетинг на другие IdeActions.<VALUES> и повторно использовать тот же EditorActionHandler.

1 Ответ

0 голосов
/ 19 сентября 2019

Нет общего способа переопределить обработчики действий.Ваш подход - одна из возможностей.

Например, Здесь - это код обработчика smart step into для "стрелки вправо", "стрелки влево" и т. Д. Используется аналогичный подход.

...