Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp

import com.intellij.diff.chains.SimpleDiffRequestChain
import com.intellij.diff.editor.ChainDiffVirtualFile
import com.intellij.diff.editor.DiffEditorTabFilesManager
import com.intellij.diff.requests.SimpleDiffRequest
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project
import software.aws.toolkits.resources.message

/**
* A virtual file that represents an AmazonQ diff view.
* This class allows us to identify diff files created by AmazonQ.
*/
class AmazonQDiffVirtualFile(

Check warning on line 18 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L18

Added line #L18 was not covered by tests
diffChain: SimpleDiffRequestChain,
name: String,
) : ChainDiffVirtualFile(diffChain, name) {

Check warning on line 21 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L21

Added line #L21 was not covered by tests
companion object {
fun openDiff(project: Project, diffRequest: SimpleDiffRequest) {
// Find any existing AmazonQ diff files
val fileEditorManager = FileEditorManager.getInstance(project)
val existingDiffFiles = fileEditorManager.openFiles.filterIsInstance<AmazonQDiffVirtualFile>()

Check warning on line 26 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L25-L26

Added lines #L25 - L26 were not covered by tests

// Close existing diff files
existingDiffFiles.forEach { fileEditorManager.closeFile(it) }

Check warning on line 29 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L29

Added line #L29 was not covered by tests

// Create and open the new diff file
val diffChain = SimpleDiffRequestChain(diffRequest)

Check warning on line 32 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L32

Added line #L32 was not covered by tests
val diffVirtualFile = AmazonQDiffVirtualFile(diffChain, diffRequest.title ?: message("aws.q.lsp.client.diff_message"))
DiffEditorTabFilesManager.getInstance(project).showDiffFile(diffVirtualFile, true)
}

Check warning on line 35 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQDiffVirtualFile.kt#L34-L35

Added lines #L34 - L35 were not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp

import com.intellij.diff.DiffContentFactory
import com.intellij.diff.DiffManager
import com.intellij.diff.DiffManagerEx
import com.intellij.diff.requests.SimpleDiffRequest
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.fileChooser.FileChooserFactory
Expand Down Expand Up @@ -363,11 +361,12 @@
else -> "Modified"
}
)
(DiffManager.getInstance() as DiffManagerEx).showDiffBuiltin(project, diffRequest)

AmazonQDiffVirtualFile.openDiff(project, diffRequest)

Check warning on line 365 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt#L365

Added line #L365 was not covered by tests
} catch (e: Exception) {
LOG.warn { "Failed to open file diff: ${e.message}" }
} finally {
// Clean up the temporary file
// Clean up the temporary file used for syntax highlight
try {
tempPath?.let { Files.deleteIfExists(it) }
} catch (e: Exception) {
Expand Down
Loading