Skip to content

Commit 0ec80d2

Browse files
committed
refactor(container): simplify Docker deploy view creation #306
Extract Docker deploy view component creation into a separate method `createDeployViewComponent` to improve code readability and handle exceptions more gracefully. Also, remove unused import and handle context creation errors by returning a default context.
1 parent 6fd87fb commit 0ec80d2

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

exts/ext-container/src/241/main/kotlin/cc/unitmesh/container/RunDevContainerService.kt

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cc.unitmesh.container
33
import cc.unitmesh.devti.AutoDevNotifications
44
import cc.unitmesh.devti.provider.RunService
55
import com.intellij.clouds.docker.gateway.DockerDevcontainerDeployContext
6-
import com.intellij.clouds.docker.gateway.ui.DockerDeployView
76
import com.intellij.docker.DockerCloudConfiguration
87
import com.intellij.docker.agent.devcontainers.DevcontainerPaths
98
import com.intellij.docker.agent.devcontainers.buildStrategy.DevcontainerBuildStrategy.LocalBuildData
@@ -45,11 +44,10 @@ class RunDevContainerService : RunService {
4544
val containerFile = File(projectDir, "devcontainer.json")
4645
containerFile.writeText(virtualFile.contentsToByteArray().toString(Charsets.UTF_8))
4746

48-
val content = try {
47+
val context = try {
4948
createContext(containerFile, projectDir, server)
5049
} catch (e: Exception) {
51-
AutoDevNotifications.error(project, "Cannot create DockerDevcontainerDeployContext")
52-
return null
50+
DockerDevcontainerDeployContext()
5351
}
5452

5553
val wrapper = object : DialogWrapper(project) {
@@ -58,20 +56,47 @@ class RunDevContainerService : RunService {
5856
val panel = contentPanel
5957
val lifetime = Lifetime.Companion.Eternal
6058

61-
val dockerDeployView = DockerDeployView(project, lifetime, content)
62-
val component = dockerDeployView.component
63-
component.setBorder(JBUI.Borders.empty())
59+
try {
60+
val component = createDeployViewComponent(project, lifetime, context)
61+
component.setBorder(JBUI.Borders.empty())
6462

65-
panel.add(component)
66-
panel.revalidate()
67-
panel.repaint()
63+
panel.add(component)
64+
panel.revalidate()
65+
panel.repaint()
66+
} catch (e: Exception) {
67+
AutoDevNotifications.error(project, "Cannot create DockerDeployView: ${e.message}")
68+
e.printStackTrace()
69+
}
6870
}
6971
}
7072

7173
wrapper.show()
7274
return "Running devcontainer.json"
7375
}
7476

77+
private fun createDeployViewComponent(
78+
project: Project,
79+
lifetime: Lifetime,
80+
context: DockerDevcontainerDeployContext
81+
): JComponent {
82+
val dockerDeployViewClass = Class.forName("com.intellij.clouds.docker.gateway.ui.DockerDeployView")
83+
val constructor = dockerDeployViewClass.getDeclaredConstructor(
84+
Project::class.java,
85+
Lifetime::class.java,
86+
DockerDevcontainerDeployContext::class.java,
87+
Function0::class.java,
88+
Function0::class.java
89+
)
90+
constructor.isAccessible = true
91+
92+
val emptyAction = { }
93+
val dockerDeployViewInstance = constructor.newInstance(project, lifetime, context, emptyAction, emptyAction)
94+
95+
val componentMethod = dockerDeployViewClass.getMethod("getComponent")
96+
val component = componentMethod.invoke(dockerDeployViewInstance) as JComponent
97+
return component
98+
}
99+
75100
private fun dockerServers(): List<RemoteServer<DockerCloudConfiguration>> {
76101
val filteredServers =
77102
getDockerServers().filter {

0 commit comments

Comments
 (0)