diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2f7d4ec..653cfbd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -codemp = '0.7.0' +codemp = '0.7.2' lombok = '1.18.34' intellij-plugin = '2.0.1' git-version = '3.1.0' diff --git a/src/main/java/mp/code/intellij/util/cb/BufferCallback.java b/src/main/java/mp/code/intellij/util/cb/BufferCallback.java index 04e0c1d..30edae3 100644 --- a/src/main/java/mp/code/intellij/util/cb/BufferCallback.java +++ b/src/main/java/mp/code/intellij/util/cb/BufferCallback.java @@ -6,6 +6,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import lombok.RequiredArgsConstructor; import mp.code.BufferController; +import mp.code.Extensions; import mp.code.data.TextChange; import mp.code.exceptions.ControllerException; import mp.code.intellij.CodeMP; @@ -46,18 +47,23 @@ public class BufferCallback implements Consumer { changeList.add(change); } - ApplicationManager.getApplication().runWriteAction(() -> + ApplicationManager.getApplication().runWriteAction(() -> { CommandProcessor.getInstance().executeCommand( this.project, - () -> changeList.forEach((change) -> - editor.getDocument().replaceString( - (int) change.start, (int) change.end, change.content) - ), + () -> changeList.forEach((change) -> { + editor.getDocument().replaceString((int) change.start, (int) change.end, change.content); + // check for validity, force-sync if mismatch + if(change.hash.isPresent() && change.hash.getAsLong() != Extensions.hash(editor.getDocument().getText())) { + try { + editor.getDocument().setText(bufferController.getContent()); + } catch(ControllerException ignored) {} // ignore exception + } + }), "CodeMPBufferReceive", "codemp-buffer-receive", editor.getDocument() - ) - ); + ); + }); }); }); });