@@ -8,6 +8,7 @@ import cc.unitmesh.devti.sketch.run.ProcessExecutor
8
8
import cc.unitmesh.devti.sketch.ui.ExtensionLangSketch
9
9
import cc.unitmesh.devti.sketch.ui.LanguageSketchProvider
10
10
import cc.unitmesh.devti.sketch.ui.code.CodeHighlightSketch
11
+ import cc.unitmesh.devti.util.AutoDevCoroutineScope
11
12
import cc.unitmesh.devti.util.parser.CodeFence
12
13
import com.intellij.icons.AllIcons
13
14
import com.intellij.lang.Language
@@ -28,6 +29,9 @@ import com.intellij.ui.components.panels.VerticalLayout
28
29
import com.intellij.ui.components.panels.Wrapper
29
30
import com.intellij.util.ui.JBUI
30
31
import com.intellij.util.ui.UIUtil
32
+ import kotlinx.coroutines.asCoroutineDispatcher
33
+ import kotlinx.coroutines.launch
34
+ import org.jetbrains.ide.PooledThreadExecutor
31
35
import org.jetbrains.plugins.terminal.LocalTerminalDirectRunner
32
36
import java.awt.BorderLayout
33
37
import java.awt.Dimension
@@ -66,10 +70,10 @@ class TerminalSketchProvider : LanguageSketchProvider {
66
70
val resultPanel = JPanel (BorderLayout ()).apply {
67
71
add(resultSketch.getComponent(), BorderLayout .CENTER )
68
72
}
69
-
73
+
70
74
val isSingleLine = content.lines().filter { it.trim().isNotEmpty() }.size <= 1
71
75
val collapsibleCodePanel = CollapsiblePanel (" Shell Code" , codePanel, initiallyCollapsed = isSingleLine)
72
-
76
+
73
77
val collapsibleResultPanel = CollapsiblePanel (" Execution Results" , resultPanel, initiallyCollapsed = true )
74
78
75
79
val toolbarPanel = JPanel (BorderLayout ()).apply {
@@ -91,7 +95,7 @@ class TerminalSketchProvider : LanguageSketchProvider {
91
95
92
96
codeSketch.getComponent().border = JBUI .Borders .empty()
93
97
resultSketch.getComponent().border = JBUI .Borders .empty()
94
-
98
+
95
99
mainPanel = object : JPanel (VerticalLayout (JBUI .scale(0 ))) {
96
100
init {
97
101
add(toolbarWrapper)
@@ -109,24 +113,31 @@ class TerminalSketchProvider : LanguageSketchProvider {
109
113
val executeAction = object :
110
114
AnAction (" Execute" , AutoDevBundle .message(" sketch.terminal.execute" ), AllIcons .Actions .Execute ) {
111
115
override fun actionPerformed (e : AnActionEvent ) {
112
- val runResult = ProcessExecutor (project).executeCode(getViewText())
113
- ApplicationManager .getApplication().invokeLater {
114
- val resultText = if (runResult.exitCode != 0 ) {
115
- " ${runResult.stdOutput} \n ${runResult.errOutput} " .trim()
116
- } else {
117
- runResult.stdOutput
118
- }
119
-
120
- resultSketch.updateViewText(resultText, true )
121
-
122
- if (collapsibleResultPanel.isCollapsed()) {
123
- collapsibleResultPanel.expand()
124
- }
125
-
126
- if (runResult.exitCode != 0 ) {
127
- collapsibleResultPanel.setTitle(" Execution Results (Error: ${runResult.exitCode} )" )
128
- } else {
129
- collapsibleResultPanel.setTitle(" Execution Results" )
116
+ AutoDevCoroutineScope .scope(project).launch {
117
+ val executor = ProcessExecutor (project)
118
+ val runResult = executor.executeCode(
119
+ getViewText(),
120
+ PooledThreadExecutor .INSTANCE .asCoroutineDispatcher()
121
+ )
122
+
123
+ ApplicationManager .getApplication().invokeLater {
124
+ val resultText = if (runResult.exitCode != 0 ) {
125
+ " ${runResult.stdOutput} \n ${runResult.errOutput} " .trim()
126
+ } else {
127
+ runResult.stdOutput
128
+ }
129
+
130
+ resultSketch.updateViewText(resultText, true )
131
+
132
+ if (collapsibleResultPanel.isCollapsed()) {
133
+ collapsibleResultPanel.expand()
134
+ }
135
+
136
+ if (runResult.exitCode != 0 ) {
137
+ collapsibleResultPanel.setTitle(" Execution Results (Error: ${runResult.exitCode} )" )
138
+ } else {
139
+ collapsibleResultPanel.setTitle(" Execution Results" )
140
+ }
130
141
}
131
142
}
132
143
}
@@ -155,7 +166,11 @@ class TerminalSketchProvider : LanguageSketchProvider {
155
166
}
156
167
157
168
val popupAction = object :
158
- AnAction (" Popup" , AutoDevBundle .message(" sketch.terminal.popup" ), AllIcons .Ide .External_link_arrow ) {
169
+ AnAction (
170
+ " Popup" ,
171
+ AutoDevBundle .message(" sketch.terminal.popup" ),
172
+ AllIcons .Ide .External_link_arrow
173
+ ) {
159
174
override fun displayTextInToolbar (): Boolean = true
160
175
161
176
override fun actionPerformed (e : AnActionEvent ) {
@@ -239,4 +254,3 @@ class TerminalSketchProvider : LanguageSketchProvider {
239
254
}
240
255
}
241
256
}
242
-
0 commit comments