Skip to content

Commit 1493d29

Browse files
committed
fix: open describe editor in EDT (#842)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent f531a86 commit 1493d29

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/actions/DescribeResourceAction.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
1414
import com.intellij.openapi.diagnostic.logger
1515
import com.intellij.openapi.progress.Progressive
1616
import com.redhat.devtools.intellij.common.actions.StructureTreeAction
17-
import com.redhat.devtools.intellij.kubernetes.editor.describe.DescriptionViewerFactory
17+
import com.redhat.devtools.intellij.kubernetes.editor.describe.DescriptionViewerDispatcher
1818
import com.redhat.devtools.intellij.kubernetes.model.Notification
1919
import com.redhat.devtools.intellij.kubernetes.model.util.toMessage
2020
import com.redhat.devtools.intellij.kubernetes.telemetry.TelemetryService
@@ -38,7 +38,7 @@ class DescribeResourceAction: StructureTreeAction() {
3838
val telemetry = TelemetryService.instance.action("describe resource")
3939
.property(PROP_RESOURCE_KIND, toDescribe.kind)
4040
try {
41-
DescriptionViewerFactory.instance.openEditor(toDescribe, project)
41+
DescriptionViewerDispatcher.instance.openEditor(toDescribe, project)
4242
telemetry.success().send()
4343
} catch (e: RuntimeException) {
4444
logger<DescribeResourceAction>().warn("Error opening editor ${toDescribe.metadata.name}", e)

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/editor/describe/DescriptionViewerFactory.kt renamed to src/main/kotlin/com/redhat/devtools/intellij/kubernetes/editor/describe/DescriptionViewerDispatcher.kt

+25-18
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
******************************************************************************/
1111
package com.redhat.devtools.intellij.kubernetes.editor.describe
1212

13-
import com.intellij.openapi.application.ApplicationManager
1413
import com.intellij.openapi.application.WriteAction
1514
import com.intellij.openapi.fileEditor.FileDocumentManager
1615
import com.intellij.openapi.fileEditor.FileEditor
@@ -19,19 +18,21 @@ import com.intellij.openapi.project.Project
1918
import com.intellij.openapi.util.Key
2019
import com.intellij.openapi.vfs.VirtualFile
2120
import com.intellij.testFramework.LightVirtualFile
21+
import com.redhat.devtools.intellij.kubernetes.CompletableFutureUtils.UI_EXECUTOR
2222
import com.redhat.devtools.intellij.kubernetes.editor.describe.describer.PodDescriber
2323
import com.redhat.devtools.intellij.kubernetes.model.util.isSameResource
2424
import io.fabric8.kubernetes.api.model.HasMetadata
2525
import io.fabric8.kubernetes.api.model.Pod
2626
import org.jetbrains.yaml.YAMLFileType
27+
import java.util.concurrent.CompletableFuture
2728

2829

29-
open class DescriptionViewerFactory protected constructor() {
30+
open class DescriptionViewerDispatcher protected constructor() {
3031

3132
companion object {
3233
const val PREFIX_FILE_NAME = "Description-"
3334

34-
val instance = DescriptionViewerFactory()
35+
val instance = DescriptionViewerDispatcher()
3536

3637
private val KEY_RESOURCE = Key<HasMetadata>(HasMetadata::class.java.name)
3738

@@ -51,15 +52,22 @@ open class DescriptionViewerFactory protected constructor() {
5152

5253
fun openEditor(resource: HasMetadata, project: Project) {
5354
val description = describe(resource) ?: return
54-
val editor = getOpenedEditor(resource, project)
55-
if (editor != null) {
56-
putUserData(resource, editor.file)
57-
replaceDocument(editor, description)
58-
} else {
59-
val file = createYamlFile(description)
60-
putUserData(resource, file)
61-
openNewEditor(file, project)
62-
}
55+
val manager = FileEditorManager.getInstance(project) ?: return
56+
57+
CompletableFuture.supplyAsync(
58+
{
59+
val editor = getOpenedEditor(resource, manager)
60+
if (editor != null) {
61+
putUserData(resource, editor.file)
62+
replaceDocument(editor, description)
63+
} else {
64+
val file = createYamlFile(description)
65+
putUserData(resource, file)
66+
openNewEditor(file, manager)
67+
}
68+
},
69+
UI_EXECUTOR
70+
)
6371
}
6472

6573
private fun putUserData(resource: HasMetadata, file: VirtualFile) {
@@ -95,17 +103,16 @@ open class DescriptionViewerFactory protected constructor() {
95103
return file
96104
}
97105

98-
private fun openNewEditor(file: VirtualFile, project: Project) {
99-
FileEditorManager.getInstance(project).openFile(file, true)
106+
private fun openNewEditor(file: VirtualFile, manager: FileEditorManager) {
107+
manager.openFile(file, true)
100108
}
101109

102-
private fun getOpenedEditor(resource: HasMetadata, project: Project): FileEditor? {
103-
val manager = FileEditorManager.getInstance(project)
104-
val file = getOpenedEditorFile(manager, resource) ?: return null
110+
private fun getOpenedEditor(resource: HasMetadata, manager: FileEditorManager): FileEditor? {
111+
val file = getOpenedEditorFile(resource, manager) ?: return null
105112
return manager.openFile(file, true).firstOrNull()
106113
}
107114

108-
private fun getOpenedEditorFile(manager: FileEditorManager, resource: HasMetadata): VirtualFile? {
115+
private fun getOpenedEditorFile(resource: HasMetadata, manager: FileEditorManager): VirtualFile? {
109116
return manager.openFiles.find { file ->
110117
try {
111118
val fileResource = getResource(file)

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/editor/describe/DescriptionViewerTabTitleProvider.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class DescriptionViewerTabTitleProvider: EditorTabTitleProvider {
2727
return null
2828
}
2929

30-
val resource = DescriptionViewerFactory.getResource(file)
30+
val resource = DescriptionViewerDispatcher.getResource(file)
3131
return getTitleFor(resource)
3232
}
3333

@@ -43,6 +43,6 @@ class DescriptionViewerTabTitleProvider: EditorTabTitleProvider {
4343
}
4444

4545
private fun isDescribeFile(file: VirtualFile): Boolean {
46-
return DescriptionViewerFactory.isDescriptionFile(file)
46+
return DescriptionViewerDispatcher.isDescriptionFile(file)
4747
}
4848
}

0 commit comments

Comments
 (0)