diff options
author | Laria Carolin Chabowski <laria@laria.me> | 2019-06-25 23:05:59 +0200 |
---|---|---|
committer | Laria Carolin Chabowski <laria@laria.me> | 2019-06-27 07:55:09 +0200 |
commit | 904b2cbff1b49ba39f89be4e42a26d1f4b26c66a (patch) | |
tree | 4ce7ac8b9c6dcb018e737de822eddc6470f97e31 /src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java | |
parent | 88f205aab9167aeae720b657986bae5fe8b593e6 (diff) | |
download | idea_caseconv-904b2cbff1b49ba39f89be4e42a26d1f4b26c66a.tar.gz idea_caseconv-904b2cbff1b49ba39f89be4e42a26d1f4b26c66a.tar.bz2 idea_caseconv-904b2cbff1b49ba39f89be4e42a26d1f4b26c66a.zip |
Transform to gradle project
Diffstat (limited to 'src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java')
-rw-r--r-- | src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java b/src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java new file mode 100644 index 0000000..692fd6c --- /dev/null +++ b/src/main/java/me/laria/code/idea_caseconv/SelectionReplacerAction.java @@ -0,0 +1,59 @@ +package me.laria.code.idea_caseconv; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Caret; +import com.intellij.openapi.editor.CaretModel; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; + +import java.util.ArrayList; + +abstract class SelectionReplacerAction extends AnAction { + @Override + public void update(final AnActionEvent e) { + //Get required data keys + final Project project = e.getData(CommonDataKeys.PROJECT); + final Editor editor = e.getData(CommonDataKeys.EDITOR); + //Set visibility only in case of existing project and editor and if some text in the editor is selected + e.getPresentation().setVisible( + project != null + && editor != null + && editor.getSelectionModel().hasSelection() + ); + } + + @Override + public void actionPerformed(AnActionEvent anActionEvent) { + Editor editor = anActionEvent.getData(CommonDataKeys.EDITOR); + Project project = anActionEvent.getData(CommonDataKeys.PROJECT); + assert editor != null; + assert project != null; + + CaretModel caretModel = editor.getCaretModel(); + Document document = editor.getDocument(); + + ArrayList<Replacement> replacements = new ArrayList<>(); + for (Caret caret : caretModel.getAllCarets()) { + if (!caret.hasSelection()) { + continue; + } + + replacements.add(new Replacement( + caret.getSelectionStart(), + caret.getSelectionEnd(), + this.replace(caret.getSelectedText()) + )); + } + + // Sort in reverse order so a replacement won't mess up the indices of the other replacements + replacements.sort((o1, o2) -> -o1.compareTo(o2)); + + WriteCommandAction.runWriteCommandAction(project, () -> replacements.forEach(r -> r.doReplace(document))); + } + + abstract protected String replace(String s); +} |