@@ -2,6 +2,7 @@ package cc.unitmesh.devti.gui.planner
2
2
3
3
import cc.unitmesh.devti.AutoDevBundle
4
4
import cc.unitmesh.devti.AutoDevIcons
5
+ import cc.unitmesh.devti.AutoDevNotifications
5
6
import cc.unitmesh.devti.util.relativePath
6
7
import com.intellij.diff.DiffContentFactoryEx
7
8
import com.intellij.diff.DiffContext
@@ -11,6 +12,7 @@ import com.intellij.icons.AllIcons
11
12
import com.intellij.openapi.actionSystem.AnAction
12
13
import com.intellij.openapi.actionSystem.AnActionEvent
13
14
import com.intellij.openapi.application.runWriteAction
15
+ import com.intellij.openapi.diagnostic.logger
14
16
import com.intellij.openapi.fileEditor.FileDocumentManager
15
17
import com.intellij.openapi.fileEditor.FileEditorManager
16
18
import com.intellij.openapi.project.Project
@@ -73,8 +75,13 @@ class PlannerResultSummary(
73
75
74
76
private var globalActionListener: GlobalActionListener ? = object : GlobalActionListener {
75
77
override fun onDiscardAll () {
76
- rollbackWorker.doRollback(changes, false )
77
- updateChanges(mutableListOf ())
78
+ try {
79
+ rollbackWorker.doRollback(changes, true )
80
+ } catch (e: Exception ) {
81
+ logger<PlannerResultSummary >().warn(" Failed to discard all changes: ${e.message} " )
82
+ } finally {
83
+ updateChanges(mutableListOf ())
84
+ }
78
85
}
79
86
80
87
override fun onAcceptAll () {
@@ -90,7 +97,12 @@ class PlannerResultSummary(
90
97
}
91
98
92
99
override fun onDiscard (change : Change ) {
93
- rollbackWorker.doRollback(listOf (change), false )
100
+ try {
101
+ rollbackWorker.doRollback(listOf (change), false )
102
+ } catch (e: Exception ) {
103
+ logger<PlannerResultSummary >().warn(" Failed to discard change: ${e.message} " )
104
+ }
105
+
94
106
val newChanges = changes.toMutableList()
95
107
newChanges.remove(change)
96
108
updateChanges(newChanges)
@@ -104,29 +116,41 @@ class PlannerResultSummary(
104
116
when {
105
117
file != null && content != null -> {
106
118
val document = FileDocumentManager .getInstance().getDocument(file)
107
- document?.setText(content)
108
- }
109
- content != null -> {
110
- val afterFile = calculateNewPath(change)
111
- if (afterFile == null ) {
112
- val message = AutoDevBundle .message(" planner.error.no.after.file" ,)
113
- cc.unitmesh.devti.AutoDevNotifications .warn(project, message)
114
- return @runWriteAction
119
+ if (document != null ) {
120
+ document.setText(content)
121
+ } else {
122
+ createNewFile(change, content)
115
123
}
124
+ }
116
125
117
- getOrCreateDirectory(project.baseDir, afterFile)
118
- val fileName = afterFile.substringAfterLast(' /' )
119
- val newFile = project.baseDir?.createChildData(this , fileName)
120
- newFile?.let {
121
- it.setBinaryContent(content.toByteArray())
122
- FileEditorManager .getInstance(project).openFile(it, true )
123
- }
126
+ content != null -> {
127
+ createNewFile(change, content)
124
128
}
125
129
}
126
130
}
127
131
}
128
132
}
129
133
134
+ private fun createNewFile (change : Change , content : String ) {
135
+ val afterFile = calculateNewPath(change)
136
+ if (afterFile == null ) {
137
+ val message = AutoDevBundle .message(" planner.error.no.after.file" )
138
+ AutoDevNotifications .warn(project, message)
139
+ return
140
+ }
141
+
142
+ getOrCreateDirectory(project.baseDir, afterFile)
143
+ val fileName = afterFile.substringAfterLast(' /' )
144
+ val newFile = project.baseDir?.createChildData(this , fileName)
145
+ if (newFile != null ) {
146
+ newFile.setBinaryContent(content.toByteArray())
147
+ FileEditorManager .getInstance(project).openFile(newFile, true )
148
+ } else {
149
+ val message = AutoDevBundle .message(" planner.error.create.file" , afterFile)
150
+ AutoDevNotifications .warn(project, message)
151
+ }
152
+ }
153
+
130
154
private fun showDiffView (change : Change ) {
131
155
val diffRequest = runWriteAction { createDiffRequest(change) }
132
156
val diffViewer = SimpleDiffViewer (object : DiffContext () {
@@ -160,9 +184,9 @@ class PlannerResultSummary(
160
184
161
185
private fun createDiffRequest (change : Change ): SimpleDiffRequest {
162
186
val diffFactory = DiffContentFactoryEx .getInstanceEx()
163
- val oldCode = change.beforeRevision?.content ? : " null "
187
+ val oldCode = change.beforeRevision?.content ? : " "
164
188
val newCode = try {
165
- change.afterRevision?.content ? : " null "
189
+ change.afterRevision?.content ? : " "
166
190
} catch (e: Exception ) {
167
191
" Error: ${e.message} "
168
192
}
0 commit comments