@@ -15,10 +15,6 @@ import com.intellij.openapi.ide.CopyPasteManager
1515import com.intellij.openapi.project.Project
1616import com.intellij.ui.components.JBScrollPane
1717import com.intellij.util.Alarm
18- import kotlinx.coroutines.CoroutineScope
19- import kotlinx.coroutines.launch
20- import software.aws.toolkits.core.utils.getLogger
21- import software.aws.toolkits.core.utils.warn
2218import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.context.CodeScanIssueDetailsDisplayType
2319import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.additionBackgroundColor
2420import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.additionForegroundColor
@@ -34,15 +30,12 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.get
3430import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.metaBackgroundColor
3531import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.metaForegroundColor
3632import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.openDiff
37- import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.sendCodeFixGeneratedTelemetryToServiceAPI
3833import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.truncateIssueTitle
3934import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererTelemetryService
4035import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
4136import software.aws.toolkits.jetbrains.services.codewhisperer.util.getHexString
42- import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
4337import software.aws.toolkits.resources.message
4438import software.aws.toolkits.telemetry.Component
45- import software.aws.toolkits.telemetry.MetricResult
4639import java.awt.BorderLayout
4740import java.awt.Dimension
4841import java.awt.datatransfer.StringSelection
@@ -57,115 +50,14 @@ import javax.swing.ScrollPaneConstants
5750import javax.swing.event.HyperlinkEvent
5851import javax.swing.text.html.HTMLEditorKit
5952
60- private val logger = getLogger<CodeWhispererCodeScanIssueDetailsPanel >()
6153internal class CodeWhispererCodeScanIssueDetailsPanel (
6254 private val project : Project ,
6355 issue : CodeWhispererCodeScanIssue ,
64- private val defaultScope : CoroutineScope ,
6556) : JPanel(BorderLayout ()) {
6657 private val kit = HTMLEditorKit ()
6758 private val doc = kit.createDefaultDocument()
68- private val amazonQCodeFixSession = AmazonQCodeFixSession (project)
6959 private val codeScanManager = CodeWhispererCodeScanManager .getInstance(project)
7060
71- private suspend fun handleGenerateFix (issue : CodeWhispererCodeScanIssue , isRegenerate : Boolean = false) {
72- if (issue.ruleId == " sbom-software-assurance-services" ) {
73- logger.warn { " GenerateFix is not available for SAS findings." }
74- return
75- }
76- editorPane.text = getCodeScanIssueDetailsHtml(
77- issue, CodeScanIssueDetailsDisplayType .DetailsPane , CodeWhispererConstants .FixGenerationState .GENERATING ,
78- project = project
79- )
80- editorPane.revalidate()
81- editorPane.repaint()
82- runInEdt {
83- editorPane.scrollToReference(" fixLoadingSection" )
84- }
85-
86- val codeFixResponse: AmazonQCodeFixSession .CodeFixResponse = amazonQCodeFixSession.runCodeFixWorkflow(issue)
87- if (codeFixResponse.failureResponse != null ) {
88- editorPane.apply {
89- text = getCodeScanIssueDetailsHtml(
90- issue, CodeScanIssueDetailsDisplayType .DetailsPane , CodeWhispererConstants .FixGenerationState .FAILED ,
91- project = project
92- )
93- revalidate()
94- repaint()
95- runInEdt {
96- scrollToReference(" fixFailureSection" )
97- }
98- }
99- CodeWhispererTelemetryService .getInstance().sendCodeScanIssueGenerateFix(
100- Component .Webview ,
101- issue,
102- isRegenerate,
103- MetricResult .Failed ,
104- codeFixResponse.failureResponse
105- )
106- } else {
107- val isReferenceAllowed = CodeWhispererSettings .getInstance().isIncludeCodeWithReference()
108- var suggestedFix = SuggestedFix (
109- code = " " ,
110- description = " "
111- )
112- codeFixResponse.getCodeFixJobResponse?.suggestedFix()?.let {
113- it.codeDiff()?.let { codeDiff ->
114- // TODO: enable later
115- if (it.references() == null || it.references()?.isEmpty() == true ) {
116- suggestedFix = SuggestedFix (
117- code = codeDiff.split(" \n " ).drop(2 ).joinToString(" \n " ), // drop first two comment lines
118- description = it.description(),
119- codeFixJobId = codeFixResponse.jobId,
120- references = it.references(),
121- )
122- }
123- }
124- }
125-
126- val showReferenceWarning = ! isReferenceAllowed && suggestedFix.references.isNotEmpty()
127- if (suggestedFix.code.isNotEmpty() && ! showReferenceWarning) {
128- issue.suggestedFixes = listOf (suggestedFix)
129- codeScanManager.updateIssue(issue)
130- }
131-
132- editorPane.apply {
133- text = getCodeScanIssueDetailsHtml(
134- issue, CodeScanIssueDetailsDisplayType .DetailsPane , project = project,
135- showReferenceWarning = showReferenceWarning
136- )
137- revalidate()
138- repaint()
139- runInEdt {
140- scrollToReference(" codeFixActions" )
141- }
142- }
143-
144- buttonPane.apply {
145- removeAll()
146- add(explainIssueButton)
147- add(applyFixButton)
148- add(ignoreIssueButton)
149- add(ignoreIssuesButton)
150- add(Box .createHorizontalGlue())
151- revalidate()
152- repaint()
153- }
154- ApplicationManager .getApplication().executeOnPooledThread {
155- if (suggestedFix.code.isNotBlank()) {
156- sendCodeFixGeneratedTelemetryToServiceAPI(issue, false )
157- }
158- CodeWhispererTelemetryService .getInstance().sendCodeScanIssueGenerateFix(
159- Component .Webview ,
160- issue,
161- isRegenerate,
162- MetricResult .Succeeded ,
163- includesFix = suggestedFix.code.isNotBlank()
164- )
165- }
166- }
167- }
168-
16961 private val editorPane = JEditorPane ().apply {
17062 contentType = " text/html"
17163 putClientProperty(JEditorPane .HONOR_DISPLAY_PROPERTIES , true )
0 commit comments