44package  software.aws.toolkits.jetbrains.services.amazonq.lsp 
55
66import  com.intellij.diff.DiffContentFactory 
7- import  com.intellij.diff.chains.SimpleDiffRequestChain 
8- import  com.intellij.diff.editor.ChainDiffVirtualFile 
9- import  com.intellij.diff.editor.DiffEditorTabFilesManager 
107import  com.intellij.diff.requests.SimpleDiffRequest 
118import  com.intellij.openapi.application.ApplicationManager 
129import  com.intellij.openapi.fileChooser.FileChooserFactory 
@@ -61,7 +58,7 @@ import java.util.concurrent.TimeUnit
6158 * Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server 
6259 */  
6360class  AmazonQLanguageClientImpl (private  val  project :  Project ) : AmazonQLanguageClient {
64-     private   val  openFileDiffs  =  mutableMapOf< String ,  ChainDiffVirtualFile >() 
61+     //  No longer need to track open file diffs as we're using AmazonQDiffVirtualFile to manage this 
6562
6663    override  fun  telemetryEvent (`object `: Any ) {
6764        println (`object `)
@@ -287,33 +284,26 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
287284            {
288285                var  tempPath:  java.nio.file.Path ?  =  null 
289286                try  {
290-                     val  diffId =  " ${params.originalFileUri} :${params.originalFileContent.hashCode()} :${params.fileContent.hashCode()} " 
291- 
292-                     val  existingDiff =  openFileDiffs[diffId]
293-                     if  (existingDiff !=  null ) {
294-                         FileEditorManager .getInstance(project).openFile(existingDiff, true )
295-                         return @supplyAsync
296-                     }
297- 
298287                    val  fileName =  Paths .get(params.originalFileUri).fileName.toString()
299288                    //  Create a temporary virtual file for syntax highlighting
300289                    val  fileExtension =  fileName.substringAfterLast(' .' " " 
301290                    tempPath =  Files .createTempFile(null , " .$fileExtension " 
302291                    val  virtualFile =  tempPath.toFile()
303292                        .also  { it.setReadOnly() }
304293                        .toVirtualFile()
294+ 
305295                    val  originalContent =  params.originalFileContent ? :  run  {
306296                        val  sourceFile =  File (params.originalFileUri)
307297                        if  (sourceFile.exists()) sourceFile.readText() else  " " 
308298                    }
299+ 
309300                    val  contentFactory =  DiffContentFactory .getInstance()
310301                    var  isNewFile =  false 
311302                    val  (leftContent, rightContent) =  when  {
312303                        params.isDeleted ->  {
313304                            contentFactory.create(project, originalContent, virtualFile) to
314305                                contentFactory.createEmpty()
315306                        }
316- 
317307                        else  ->  {
318308                            val  newContent =  params.fileContent.orEmpty()
319309                            isNewFile =  newContent ==  originalContent
@@ -322,16 +312,16 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
322312                                    contentFactory.createEmpty() to
323313                                        contentFactory.create(project, newContent, virtualFile)
324314                                }
325- 
326315                                else  ->  {
327316                                    contentFactory.create(project, originalContent, virtualFile) to
328317                                        contentFactory.create(project, newContent, virtualFile)
329318                                }
330319                            }
331320                        }
332321                    }
322+                     val  title =  " $fileName  ${message(" aws.q.lsp.client.diff_message"  " 
333323                    val  diffRequest =  SimpleDiffRequest (
334-                         " $fileName   ${message( " aws.q.lsp.client.diff_message " )} " 
324+                         title ,
335325                        leftContent,
336326                        rightContent,
337327                        " Original" 
@@ -342,10 +332,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
342332                        }
343333                    )
344334
345-                     val  diffChain =  SimpleDiffRequestChain (diffRequest)
346-                     val  diffVirtualFile =  ChainDiffVirtualFile (diffChain, fileName)
347-                     DiffEditorTabFilesManager .getInstance(project).showDiffFile(diffVirtualFile, true )
348-                     openFileDiffs[diffId] =  diffVirtualFile
335+                     AmazonQDiffVirtualFile .openDiff(project, diffRequest, title)
349336                } catch  (e:  Exception ) {
350337                    LOG .warn { " Failed to open file diff: ${e.message} " 
351338                } finally  {
0 commit comments