|
| 1 | +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| 2 | +// SPDX-License-Identifier: Apache-2.0 |
| 3 | + |
| 4 | +package software.aws.toolkits.jetbrains.services.amazonq.lsp |
| 5 | + |
| 6 | +import com.intellij.diff.chains.SimpleDiffRequestChain |
| 7 | +import com.intellij.diff.editor.ChainDiffVirtualFile |
| 8 | +import com.intellij.diff.editor.DiffEditorTabFilesManager |
| 9 | +import com.intellij.diff.requests.SimpleDiffRequest |
| 10 | +import com.intellij.openapi.fileEditor.FileEditorManager |
| 11 | +import com.intellij.openapi.project.Project |
| 12 | +import software.aws.toolkits.resources.message |
| 13 | + |
| 14 | +/** |
| 15 | + * A virtual file that represents an AmazonQ diff view. |
| 16 | + * This class allows us to identify diff files created by AmazonQ. |
| 17 | + */ |
| 18 | +class AmazonQDiffVirtualFile( |
| 19 | + diffChain: SimpleDiffRequestChain, |
| 20 | + name: String, |
| 21 | +) : ChainDiffVirtualFile(diffChain, name) { |
| 22 | + companion object { |
| 23 | + fun openDiff(project: Project, diffRequest: SimpleDiffRequest) { |
| 24 | + // Find any existing AmazonQ diff files |
| 25 | + val fileEditorManager = FileEditorManager.getInstance(project) |
| 26 | + val existingDiffFiles = fileEditorManager.openFiles.filterIsInstance<AmazonQDiffVirtualFile>() |
| 27 | + |
| 28 | + // Close existing diff files |
| 29 | + existingDiffFiles.forEach { fileEditorManager.closeFile(it) } |
| 30 | + |
| 31 | + // Create and open the new diff file |
| 32 | + val diffChain = SimpleDiffRequestChain(diffRequest) |
| 33 | + val diffVirtualFile = AmazonQDiffVirtualFile(diffChain, diffRequest.title ?: message("aws.q.lsp.client.diff_message")) |
| 34 | + DiffEditorTabFilesManager.getInstance(project).showDiffFile(diffVirtualFile, true) |
| 35 | + } |
| 36 | + } |
| 37 | +} |
0 commit comments