From cebcad73273a0f8d9ed6848c945f7983b1c08d51 Mon Sep 17 00:00:00 2001 From: zaaarf Date: Thu, 16 Nov 2023 16:36:25 +0100 Subject: [PATCH] chore: a bit of cleanup --- src/main/java/com/codemp/intellij/CodeMP.java | 7 +++++- .../intellij/actions/ConnectAction.java | 11 ++++----- .../intellij/actions/FastForwardAction.java | 12 +++++----- .../codemp/intellij/actions/JoinAction.java | 24 +++++++++---------- .../actions/buffer/BufferAttachAction.java | 24 +++++++------------ .../actions/buffer/BufferCreateAction.java | 11 ++++++--- .../intellij/exceptions/CodeMPException.java | 2 +- .../ide/BadActionEventStateException.java | 14 +++++++++++ .../{ => lib}/ChannelException.java | 4 +++- .../{ => lib}/InvalidStateException.java | 4 +++- .../{ => lib}/TransportException.java | 4 +++- .../listeners/CursorEventListener.java | 5 ++-- .../com/codemp/intellij/util/ActionUtil.java | 24 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 8 +++++-- 14 files changed, 102 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/codemp/intellij/exceptions/ide/BadActionEventStateException.java rename src/main/java/com/codemp/intellij/exceptions/{ => lib}/ChannelException.java (76%) rename src/main/java/com/codemp/intellij/exceptions/{ => lib}/InvalidStateException.java (58%) rename src/main/java/com/codemp/intellij/exceptions/{ => lib}/TransportException.java (57%) create mode 100644 src/main/java/com/codemp/intellij/util/ActionUtil.java diff --git a/src/main/java/com/codemp/intellij/CodeMP.java b/src/main/java/com/codemp/intellij/CodeMP.java index de3fbd6..5efb84e 100644 --- a/src/main/java/com/codemp/intellij/CodeMP.java +++ b/src/main/java/com/codemp/intellij/CodeMP.java @@ -1,3 +1,8 @@ package com.codemp.intellij; -public class CodeMP {} +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CodeMP { + public static Logger LOGGER = LoggerFactory.getLogger(CodeMP.class); +} diff --git a/src/main/java/com/codemp/intellij/actions/ConnectAction.java b/src/main/java/com/codemp/intellij/actions/ConnectAction.java index 5c5994b..45de1dd 100644 --- a/src/main/java/com/codemp/intellij/actions/ConnectAction.java +++ b/src/main/java/com/codemp/intellij/actions/ConnectAction.java @@ -1,5 +1,6 @@ package com.codemp.intellij.actions; +import com.codemp.intellij.CodeMP; import com.codemp.intellij.jni.CodeMPHandler; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -11,7 +12,6 @@ import java.io.IOException; public class ConnectAction extends AnAction { public ConnectAction() { - super(); /*try { NativeUtils.loadLibraryFromJar("/resources/libHelloJNI.so"); } catch(IOException e) { @@ -21,19 +21,18 @@ public class ConnectAction extends AnAction { System.load("O:/dev/IRL/Rust/codemp/client/intellij/target/debug/codemp_intellij.dll"); } - public void connect(String url) throws Exception { + public static void connect(String url, boolean silent) throws Exception { CodeMPHandler.connect(url); - //Messages.showInfoMessage(String.format("Connected to %s!", url), "CodeMP"); - System.out.printf("Connected to %s!\n", url); + if(!silent) Messages.showInfoMessage(String.format("Connected to %s!", url), "CodeMP"); + CodeMP.LOGGER.debug("Connected to {}!", url); } @Override public void actionPerformed(@NotNull AnActionEvent e) { String url = Messages.showInputDialog("URL to CodeMP instance:", "CodeMP Connect", Messages.getQuestionIcon()); - try { - this.connect(url); + connect(url, false); } catch(Exception ex) { Messages.showErrorDialog(String.format("Failed to connect to %s: %s!", url, ex.getMessage()), "CodeMP"); } diff --git a/src/main/java/com/codemp/intellij/actions/FastForwardAction.java b/src/main/java/com/codemp/intellij/actions/FastForwardAction.java index 59e1451..63c18c3 100644 --- a/src/main/java/com/codemp/intellij/actions/FastForwardAction.java +++ b/src/main/java/com/codemp/intellij/actions/FastForwardAction.java @@ -5,16 +5,16 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import org.jetbrains.annotations.NotNull; +/** + * Used exclusively to streamline debugging. + */ public class FastForwardAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { - ConnectAction connectAction = new ConnectAction(); - JoinAction joinAction = new JoinAction(); - BufferAttachAction attachAction = new BufferAttachAction(); try { - connectAction.connect("http://alemi.dev:50051"); - joinAction.join(e, "default"); - attachAction.attach(e, "test"); + ConnectAction.connect("http://alemi.dev:50051", true); + JoinAction.join(e, "default", true); + BufferAttachAction.attach(e, "test", true); } catch(Exception ex) { throw new RuntimeException(ex); } diff --git a/src/main/java/com/codemp/intellij/actions/JoinAction.java b/src/main/java/com/codemp/intellij/actions/JoinAction.java index ed65f30..fb514c3 100644 --- a/src/main/java/com/codemp/intellij/actions/JoinAction.java +++ b/src/main/java/com/codemp/intellij/actions/JoinAction.java @@ -1,9 +1,11 @@ package com.codemp.intellij.actions; +import com.codemp.intellij.CodeMP; import com.codemp.intellij.jni.CodeMPHandler; import com.codemp.intellij.jni.CursorEventWrapper; import com.codemp.intellij.jni.CursorHandler; import com.codemp.intellij.listeners.CursorEventListener; +import com.codemp.intellij.util.ActionUtil; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; @@ -15,7 +17,6 @@ import com.intellij.openapi.editor.markup.HighlighterLayer; import com.intellij.openapi.editor.markup.HighlighterTargetArea; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; @@ -26,26 +27,25 @@ import org.jetbrains.annotations.NotNull; import java.awt.*; import java.util.HashMap; import java.util.Map; -import java.util.Objects; public class JoinAction extends AnAction { - private final Map highlighterMap = new HashMap<>(); + private static final Map highlighterMap = new HashMap<>(); private static final TextAttributes HIGHLIGHTED = new TextAttributes( null, JBColor.BLUE, null, null, Font.PLAIN ); - public void join(AnActionEvent e, String session) throws Exception { + public static void join(AnActionEvent e, String session, boolean silent) throws Exception { CursorHandler cursorHandler = CodeMPHandler.join(session); EditorFactory.getInstance() .getEventMulticaster() .addCaretListener(new CursorEventListener()); - //Messages.showInfoMessage(String.format("Joined %s!", session), "CodeMP"); - System.out.printf(String.format("Joined %s!\n", session)); - Editor editor = FileEditorManager.getInstance(Objects.requireNonNull(e.getProject())) - .getSelectedTextEditor(); - assert editor != null; + + if(!silent) Messages.showInfoMessage(String.format("Joined session %s!", session), "CodeMP"); + else CodeMP.LOGGER.debug("Joined session {}!", session); + + Editor editor = ActionUtil.getCurrentEditor(e); Document document = editor.getDocument(); ProgressManager.getInstance().run(new Task.Backgroundable(e.getProject(), "Awaiting CodeMP cursor events") { @Override @@ -59,8 +59,8 @@ public class JoinAction extends AnAction { if(h != null) h.dispose(); - System.out.printf( - "Cursor moved by user %s! Start pos: x%d y%d; end pos: x%d y%d with buffer %s!\n", + CodeMP.LOGGER.debug( + "Cursor moved by user {}! Start pos: {}x {}y; end pos: {}x {}y with buffer {}!", event.getUser(), event.getStartCol(), event.getStartCol(), event.getEndRow(), event.getEndCol(), @@ -94,7 +94,7 @@ public class JoinAction extends AnAction { Messages.getQuestionIcon()); try { - this.join(e, session); + join(e, session, false); } catch(Exception ex) { Messages.showErrorDialog(String.format( "Failed to join session %s: %s!", diff --git a/src/main/java/com/codemp/intellij/actions/buffer/BufferAttachAction.java b/src/main/java/com/codemp/intellij/actions/buffer/BufferAttachAction.java index 6d4213c..e1fdf36 100644 --- a/src/main/java/com/codemp/intellij/actions/buffer/BufferAttachAction.java +++ b/src/main/java/com/codemp/intellij/actions/buffer/BufferAttachAction.java @@ -1,37 +1,33 @@ package com.codemp.intellij.actions.buffer; +import com.codemp.intellij.CodeMP; import com.codemp.intellij.jni.BufferHandler; import com.codemp.intellij.jni.CodeMPHandler; import com.codemp.intellij.jni.TextChangeWrapper; import com.codemp.intellij.listeners.BufferEventListener; +import com.codemp.intellij.util.ActionUtil; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.ui.Messages; import org.jetbrains.annotations.NotNull; -import javax.print.Doc; -import java.util.Objects; - public class BufferAttachAction extends AnAction { - public void attach(AnActionEvent e, String buffer) throws Exception { + public static void attach(AnActionEvent e, String buffer, boolean silent) throws Exception { BufferHandler bufferHandler = CodeMPHandler.attach(buffer); - //Messages.showInfoMessage(String.format("Connected to %s!", url), "CodeMP"); + if(!silent) Messages.showInfoMessage(String.format("Attached to buffer to %s!", buffer), + "CodeMP Buffer Attach"); + CodeMP.LOGGER.debug("Attached to buffer to {}!", buffer); //register buffer change listener //TODO "get" the Document corresponding to buffer, for now use the current one BufferEventListener listener = new BufferEventListener(buffer); - assert e.getProject() != null; - Editor editor = FileEditorManager.getInstance(e.getProject()).getSelectedTextEditor(); - assert editor != null; - Document document = editor.getDocument(); + Document document = ActionUtil.getCurrentEditor(e).getDocument(); document.addDocumentListener(listener); ProgressManager.getInstance().run(new Task.Backgroundable(e.getProject(), "Awaiting CodeMP buffer events") { @@ -42,7 +38,7 @@ public class BufferAttachAction extends AnAction { TextChangeWrapper event = bufferHandler.recv(); ApplicationManager.getApplication().invokeLaterOnWriteThread(() -> ApplicationManager.getApplication().runWriteAction(() -> { - System.out.printf("Received text change %s from offset %d to %d!\n", + CodeMP.LOGGER.debug("Received text change {} from offset {} to {}!\n", event.getContent(), event.getStart(), event.getEnd()); document.replaceString( //TODO this doesn't work (int) event.getStart(), @@ -56,7 +52,6 @@ public class BufferAttachAction extends AnAction { } } }); - System.out.printf("Created buffer %s!\n", buffer); } @Override @@ -65,9 +60,8 @@ public class BufferAttachAction extends AnAction { "Buffer name:", "Attach to CodeMP Buffer", Messages.getQuestionIcon()); - try { - this.attach(e, buffer); + attach(e, buffer, false); } catch(Exception ex) { Messages.showErrorDialog(String.format( "Failed to attach to buffer %s: %s!", diff --git a/src/main/java/com/codemp/intellij/actions/buffer/BufferCreateAction.java b/src/main/java/com/codemp/intellij/actions/buffer/BufferCreateAction.java index c2590ef..2b1b706 100644 --- a/src/main/java/com/codemp/intellij/actions/buffer/BufferCreateAction.java +++ b/src/main/java/com/codemp/intellij/actions/buffer/BufferCreateAction.java @@ -1,5 +1,6 @@ package com.codemp.intellij.actions.buffer; +import com.codemp.intellij.CodeMP; import com.codemp.intellij.jni.CodeMPHandler; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -7,6 +8,12 @@ import com.intellij.openapi.ui.Messages; import org.jetbrains.annotations.NotNull; public class BufferCreateAction extends AnAction { + public static void create(String buffer, boolean silent) throws Exception { + CodeMPHandler.create(buffer); + if(!silent) Messages.showInfoMessage(String.format("Created buffer %s!", buffer), + "Create CodeMP Buffer" ); + CodeMP.LOGGER.debug("Created buffer {}!", buffer); + } @Override public void actionPerformed(@NotNull AnActionEvent e) { @@ -16,9 +23,7 @@ public class BufferCreateAction extends AnAction { Messages.getQuestionIcon()); try { - CodeMPHandler.create(buffer); - //Messages.showInfoMessage(String.format("Created buffer %s!", url), "Create CodeMP Buffer" ); - System.out.printf("Created buffer %s!\n", buffer); + create(buffer, false); } catch(Exception ex) { Messages.showErrorDialog(String.format( "Failed to create buffer with name %s: %s!", diff --git a/src/main/java/com/codemp/intellij/exceptions/CodeMPException.java b/src/main/java/com/codemp/intellij/exceptions/CodeMPException.java index 7de0ca4..d66b698 100644 --- a/src/main/java/com/codemp/intellij/exceptions/CodeMPException.java +++ b/src/main/java/com/codemp/intellij/exceptions/CodeMPException.java @@ -1,6 +1,6 @@ package com.codemp.intellij.exceptions; -public class CodeMPException extends Exception { +public class CodeMPException extends RuntimeException { public CodeMPException(String s) { super(s); } diff --git a/src/main/java/com/codemp/intellij/exceptions/ide/BadActionEventStateException.java b/src/main/java/com/codemp/intellij/exceptions/ide/BadActionEventStateException.java new file mode 100644 index 0000000..23bc357 --- /dev/null +++ b/src/main/java/com/codemp/intellij/exceptions/ide/BadActionEventStateException.java @@ -0,0 +1,14 @@ +package com.codemp.intellij.exceptions.ide; + +import com.codemp.intellij.exceptions.CodeMPException; +import com.intellij.openapi.actionSystem.AnActionEvent; + +/** + * Fired when trying to use {@link com.intellij.openapi.actionSystem.AnActionEvent}'s context + * from a state where that use is not supported. + */ +public class BadActionEventStateException extends CodeMPException { + public BadActionEventStateException(String s) { + super(s); + } +} diff --git a/src/main/java/com/codemp/intellij/exceptions/ChannelException.java b/src/main/java/com/codemp/intellij/exceptions/lib/ChannelException.java similarity index 76% rename from src/main/java/com/codemp/intellij/exceptions/ChannelException.java rename to src/main/java/com/codemp/intellij/exceptions/lib/ChannelException.java index def19aa..6e7cbbd 100644 --- a/src/main/java/com/codemp/intellij/exceptions/ChannelException.java +++ b/src/main/java/com/codemp/intellij/exceptions/lib/ChannelException.java @@ -1,4 +1,6 @@ -package com.codemp.intellij.exceptions; +package com.codemp.intellij.exceptions.rust; + +import com.codemp.intellij.exceptions.CodeMPException; public class ChannelException extends CodeMPException { public ChannelException(String input) { diff --git a/src/main/java/com/codemp/intellij/exceptions/InvalidStateException.java b/src/main/java/com/codemp/intellij/exceptions/lib/InvalidStateException.java similarity index 58% rename from src/main/java/com/codemp/intellij/exceptions/InvalidStateException.java rename to src/main/java/com/codemp/intellij/exceptions/lib/InvalidStateException.java index 75bec5b..c4baf1c 100644 --- a/src/main/java/com/codemp/intellij/exceptions/InvalidStateException.java +++ b/src/main/java/com/codemp/intellij/exceptions/lib/InvalidStateException.java @@ -1,4 +1,6 @@ -package com.codemp.intellij.exceptions; +package com.codemp.intellij.exceptions.rust; + +import com.codemp.intellij.exceptions.CodeMPException; public class InvalidStateException extends CodeMPException { public InvalidStateException(String message) { diff --git a/src/main/java/com/codemp/intellij/exceptions/TransportException.java b/src/main/java/com/codemp/intellij/exceptions/lib/TransportException.java similarity index 57% rename from src/main/java/com/codemp/intellij/exceptions/TransportException.java rename to src/main/java/com/codemp/intellij/exceptions/lib/TransportException.java index 711d420..eab63db 100644 --- a/src/main/java/com/codemp/intellij/exceptions/TransportException.java +++ b/src/main/java/com/codemp/intellij/exceptions/lib/TransportException.java @@ -1,4 +1,6 @@ -package com.codemp.intellij.exceptions; +package com.codemp.intellij.exceptions.rust; + +import com.codemp.intellij.exceptions.CodeMPException; public class TransportException extends CodeMPException { public TransportException(String message) { diff --git a/src/main/java/com/codemp/intellij/listeners/CursorEventListener.java b/src/main/java/com/codemp/intellij/listeners/CursorEventListener.java index c2cba56..a4999c8 100644 --- a/src/main/java/com/codemp/intellij/listeners/CursorEventListener.java +++ b/src/main/java/com/codemp/intellij/listeners/CursorEventListener.java @@ -1,5 +1,6 @@ package com.codemp.intellij.listeners; +import com.codemp.intellij.CodeMP; import com.codemp.intellij.jni.CodeMPHandler; import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.VisualPosition; @@ -10,16 +11,14 @@ import org.jetbrains.annotations.NotNull; public class CursorEventListener implements CaretListener { @Override public void caretPositionChanged(@NotNull CaretEvent event) { - System.out.println("called!"); Caret caret = event.getCaret(); if(caret == null) return; - System.out.println("valid caret!"); try { VisualPosition startPos = caret.getSelectionStartPosition(); VisualPosition endPos = caret.getSelectionEndPosition(); - System.out.printf("start %dx %dy end %dx %dy", + CodeMP.LOGGER.debug("Caret moved from {}x {}y to {}x {}y", startPos.line, startPos.column, endPos.line, endPos.column); CodeMPHandler.getCursor().send( "", startPos.line, startPos.column, endPos.line, endPos.column diff --git a/src/main/java/com/codemp/intellij/util/ActionUtil.java b/src/main/java/com/codemp/intellij/util/ActionUtil.java new file mode 100644 index 0000000..1596d79 --- /dev/null +++ b/src/main/java/com/codemp/intellij/util/ActionUtil.java @@ -0,0 +1,24 @@ +package com.codemp.intellij.util; + +import com.codemp.intellij.exceptions.ide.BadActionEventStateException; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.project.Project; + +public class ActionUtil { + public static Project getCurrentProject(AnActionEvent event) { + Project project = event.getProject(); + if(project == null) + throw new BadActionEventStateException("Project was null!"); + return project; + } + + public static Editor getCurrentEditor(AnActionEvent event) { + Editor editor = FileEditorManager.getInstance(getCurrentProject(event)) + .getSelectedTextEditor(); + if(editor == null) + throw new BadActionEventStateException("Editor was null!"); + return editor; + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 55553dd..8219456 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -25,12 +25,15 @@ - + + @@ -38,8 +41,9 @@ + Read more: https://plugins.jetbrains.com/docs/intellij/plugin-extension-points.html - + -> \ No newline at end of file