Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- Fix issue where multiple process shutdowns occurring when closing a project can throw an error,
fixes https://github.com/dprint/dprint-intellij/issues/121
- Downgrade kotlin version to 2.2.21, fixes https://github.com/dprint/dprint-intellij/issues/122
- Fix memory leak with tool window console

## 0.9.0 - 2025-12-23

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html
pluginGroup=com.dprint.intellij.plugin
pluginName=dprint
pluginVersion=0.9.1.beta
pluginVersion=0.9.1
# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
# for insight into build numbers and IntelliJ Platform versions.
pluginSinceBuild=251
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.dprint.config.ProjectConfiguration
import com.dprint.i18n.DprintBundle
import com.dprint.services.editorservice.FormatResult
import com.dprint.services.editorservice.IEditorService
import com.dprint.services.editorservice.exceptions.ProcessUnavailableException
import com.dprint.services.editorservice.process.EditorProcess
import com.dprint.utils.errorLogWithConsole
import com.dprint.utils.infoLogWithConsole
Expand Down Expand Up @@ -70,6 +71,8 @@ class EditorServiceV5(
}
} catch (e: TimeoutCancellationException) {
errorLogWithConsole(DprintBundle.message("editor.service.shutting.down.timed.out"), e, project, LOGGER)
} catch (e: ProcessUnavailableException) {
infoLogWithConsole("Process already terminated, skipping shutdown message", project, LOGGER)
} finally {
stdoutListener?.dispose()
dropMessages()
Expand Down
53 changes: 31 additions & 22 deletions src/main/kotlin/com/dprint/toolwindow/Console.kt
Original file line number Diff line number Diff line change
@@ -1,39 +1,48 @@
package com.dprint.toolwindow

import com.dprint.messages.DprintMessage
import com.intellij.execution.impl.ConsoleViewImpl
import com.intellij.execution.filters.TextConsoleBuilderFactory
import com.intellij.execution.ui.ConsoleView
import com.intellij.execution.ui.ConsoleViewContentType
import com.intellij.openapi.Disposable
import com.intellij.openapi.components.Service
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.openapi.util.Disposer
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

@Service(Service.Level.PROJECT)
class Console(
val project: Project,
) {
val consoleView = ConsoleViewImpl(project, GlobalSearchScope.allScope(project), false, false)
) : Disposable {
val consoleView: ConsoleView = TextConsoleBuilderFactory.getInstance().createBuilder(project).console
private val connection = project.messageBus.connect(this)

init {
with(project.messageBus.connect()) {
subscribe(
DprintMessage.DPRINT_MESSAGE_TOPIC,
object : DprintMessage.Listener {
override fun info(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_INFO_OUTPUT)
}

override fun warn(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_WARNING_OUTPUT)
}

override fun error(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_ERROR_OUTPUT)
}
},
)
}
subscribe()
}

private fun subscribe() {
connection.subscribe(
DprintMessage.DPRINT_MESSAGE_TOPIC,
object : DprintMessage.Listener {
override fun info(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_INFO_OUTPUT)
}

override fun warn(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_WARNING_OUTPUT)
}

override fun error(message: String) {
consoleView.print(decorateText(message), ConsoleViewContentType.LOG_ERROR_OUTPUT)
}
},
)
}

override fun dispose() {
Disposer.dispose(consoleView)
}

private fun decorateText(text: String): String =
Expand Down