From e03ebc7432db8386729733020ba76305fa604622 Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Tue, 1 Aug 2023 19:01:00 +0800 Subject: [PATCH] fix: fix dispose issues --- .../cc/unitmesh/devti/gui/block/CodeBlockView.kt | 16 ++++++---------- .../gui/error/CodeBlockHighlightingFilter.kt | 9 +++------ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/cc/unitmesh/devti/gui/block/CodeBlockView.kt b/src/main/kotlin/cc/unitmesh/devti/gui/block/CodeBlockView.kt index b0c74dd2f0..673d165a8d 100644 --- a/src/main/kotlin/cc/unitmesh/devti/gui/block/CodeBlockView.kt +++ b/src/main/kotlin/cc/unitmesh/devti/gui/block/CodeBlockView.kt @@ -103,6 +103,10 @@ class CodeBlockView(private val block: CodeBlock, private val project: Project, disposable: Disposable ): EditorEx { val editor: Editor = EditorFactory.getInstance().createViewer(document, project, EditorKind.PREVIEW) + disposable.whenDisposed(disposable) { + EditorFactory.getInstance().releaseEditor(editor) + } + (editor as EditorEx).setFile(file) editor.setCaretEnabled(true) val highlighter = EditorHighlighterFactory.getInstance().createEditorHighlighter(project, file) @@ -129,11 +133,11 @@ class CodeBlockView(private val block: CodeBlock, private val project: Project, editor.addFocusListener(object : FocusChangeListener { override fun focusGained(focusEditor: Editor) { - editor.getSettings().isCaretRowShown = true + settings.isCaretRowShown = true } override fun focusLost(focusEditor: Editor) { - editor.getSettings().isCaretRowShown = false + settings.isCaretRowShown = false editor.markupModel.removeAllHighlighters() } }) @@ -158,10 +162,6 @@ class CodeBlockView(private val block: CodeBlock, private val project: Project, val editor: EditorEx = createCodeViewerEditor(project, createCodeViewerFile as LightVirtualFile, document, disposable) - disposable.whenDisposed { - EditorFactory.getInstance().releaseEditor(editor) - } - val toolbarActionGroup = ActionUtil.getActionGroup("AutoDev.ToolWindow.Snippet.Toolbar") toolbarActionGroup?.let { val jComponent: ActionToolbarImpl = @@ -201,10 +201,6 @@ fun VirtualFile.findDocument(): Document? { return ref.element } -fun Disposable.whenDisposed(listener: () -> Unit) { - Disposer.register(this, Disposable { listener() }) -} - fun Disposable.whenDisposed( parentDisposable: Disposable, listener: () -> Unit diff --git a/src/main/kotlin/cc/unitmesh/devti/gui/error/CodeBlockHighlightingFilter.kt b/src/main/kotlin/cc/unitmesh/devti/gui/error/CodeBlockHighlightingFilter.kt index 64f0b55fe7..8c18ecba11 100644 --- a/src/main/kotlin/cc/unitmesh/devti/gui/error/CodeBlockHighlightingFilter.kt +++ b/src/main/kotlin/cc/unitmesh/devti/gui/error/CodeBlockHighlightingFilter.kt @@ -9,17 +9,14 @@ import com.intellij.psi.PsiFile class CodeBlockHighlightingFilter : HighlightInfoFilter { override fun accept(highlightInfo: HighlightInfo, file: PsiFile?): Boolean { - val hasError = highlightInfo.getSeverity().compareTo(HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING) >= 0; + val hasError = highlightInfo.severity >= HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING; if (file == null || !hasError) { return true; } - val virtualFile = file.getVirtualFile(); - if (virtualFile != null && AutoDevSnippetFile.isSnippet(virtualFile)) { - return false; - } + val virtualFile = file.virtualFile; - return true; + return !(virtualFile != null && AutoDevSnippetFile.isSnippet(virtualFile)); } }