Skip to content

Commit cb6daca

Browse files
authored
deprecate(Q): remove sigv4 sdk (#5332)
Remove unused sigv4 client and mapping back and forward between 2 sdks POJOs
1 parent d38ad3e commit cb6daca

File tree

16 files changed

+125
-1391
lines changed

16 files changed

+125
-1391
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import kotlinx.coroutines.launch
5252
import kotlinx.coroutines.time.withTimeout
5353
import kotlinx.coroutines.withContext
5454
import org.jetbrains.annotations.TestOnly
55-
import software.amazon.awssdk.services.codewhisperer.model.CodeWhispererException
5655
import software.amazon.awssdk.services.codewhispererruntime.model.CodeWhispererRuntimeException
5756
import software.amazon.awssdk.services.codewhispererruntime.model.ThrottlingException
5857
import software.aws.toolkits.core.utils.WaiterTimeoutException
@@ -592,7 +591,7 @@ class CodeWhispererCodeScanManager(val project: Project) {
592591
}
593592
fun handleException(coroutineContext: CoroutineContext, e: Exception, scope: CodeWhispererConstants.CodeAnalysisScope): String {
594593
val errorMessage = when (e) {
595-
is CodeWhispererException -> e.awsErrorDetails().errorMessage() ?: message("codewhisperer.codescan.run_scan_error")
594+
is CodeWhispererRuntimeException -> e.awsErrorDetails().errorMessage() ?: message("codewhisperer.codescan.run_scan_error")
596595
is CodeWhispererCodeScanException -> getCodeScanExceptionMessage(e)
597596
is CodeWhispererCodeScanServerException -> getCodeScanServerExceptionMessage(e)
598597
is WaiterTimeoutException, is TimeoutCancellationException -> message("codewhisperer.codescan.scan_timed_out")
@@ -601,8 +600,8 @@ class CodeWhispererCodeScanManager(val project: Project) {
601600
else -> null
602601
} ?: message("codewhisperer.codescan.run_scan_error")
603602

604-
val errorCode = (e as? CodeWhispererException)?.awsErrorDetails()?.errorCode()
605-
val requestId = if (e is CodeWhispererException) e.requestId() else null
603+
val errorCode = (e as? CodeWhispererRuntimeException)?.awsErrorDetails()?.errorCode()
604+
val requestId = if (e is CodeWhispererRuntimeException) e.requestId() else null
606605

607606
if (!coroutineContext.isActive) {
608607
codeScanResultsPanel.setDefaultUI()
@@ -627,7 +626,7 @@ class CodeWhispererCodeScanManager(val project: Project) {
627626
}
628627

629628
val telemetryErrorMessage = when (e) {
630-
is CodeWhispererException -> e.awsErrorDetails().errorMessage() ?: message("codewhisperer.codescan.run_scan_error_telemetry")
629+
is CodeWhispererRuntimeException -> e.awsErrorDetails().errorMessage() ?: message("codewhisperer.codescan.run_scan_error_telemetry")
631630
is CodeWhispererCodeScanException -> when (e.message) {
632631
message("codewhisperer.codescan.no_file_open") -> message("codewhisperer.codescan.no_file_open_telemetry")
633632
message("codewhisperer.codescan.unsupported_language_error") -> message("codewhisperer.codescan.unsupported_language_error_telemetry")

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ import kotlinx.coroutines.ensureActive
1717
import kotlinx.coroutines.isActive
1818
import kotlinx.coroutines.time.withTimeout
1919
import kotlinx.coroutines.withContext
20-
import software.amazon.awssdk.services.codewhisperer.model.ArtifactType
21-
import software.amazon.awssdk.services.codewhisperer.model.CodeScanFindingsSchema
22-
import software.amazon.awssdk.services.codewhisperer.model.CodeScanStatus
23-
import software.amazon.awssdk.services.codewhisperer.model.CodeWhispererException
24-
import software.amazon.awssdk.services.codewhisperer.model.CreateCodeScanRequest
25-
import software.amazon.awssdk.services.codewhisperer.model.CreateCodeScanResponse
26-
import software.amazon.awssdk.services.codewhisperer.model.GetCodeScanRequest
27-
import software.amazon.awssdk.services.codewhisperer.model.GetCodeScanResponse
28-
import software.amazon.awssdk.services.codewhisperer.model.ListCodeScanFindingsRequest
29-
import software.amazon.awssdk.services.codewhisperer.model.ListCodeScanFindingsResponse
20+
import software.amazon.awssdk.services.codewhispererruntime.model.ArtifactType
21+
import software.amazon.awssdk.services.codewhispererruntime.model.CodeAnalysisFindingsSchema
22+
import software.amazon.awssdk.services.codewhispererruntime.model.CodeAnalysisStatus
23+
import software.amazon.awssdk.services.codewhispererruntime.model.CodeWhispererRuntimeException
3024
import software.amazon.awssdk.services.codewhispererruntime.model.CreateUploadUrlResponse
25+
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisRequest
26+
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisResponse
27+
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsRequest
28+
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsResponse
3129
import software.amazon.awssdk.services.codewhispererruntime.model.Reference
30+
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisRequest
31+
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisResponse
3232
import software.aws.toolkits.core.utils.Waiters.waitUntil
3333
import software.aws.toolkits.core.utils.debug
3434
import software.aws.toolkits.core.utils.getLogger
@@ -145,7 +145,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
145145
}
146146
}
147147
var codeScanStatus = createCodeScanResponse.status()
148-
if (codeScanStatus == CodeScanStatus.FAILED) {
148+
if (codeScanStatus == CodeAnalysisStatus.FAILED) {
149149
if (isProjectScope()) {
150150
LOG.debug {
151151
"CodeWhisperer service error occurred. Something went wrong when creating a code review: $createCodeScanResponse " +
@@ -165,7 +165,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
165165

166166
// 5. Keep polling the API GetCodeScan to wait for results for a given timeout period.
167167
waitUntil(
168-
succeedOn = { codeScanStatus == CodeScanStatus.COMPLETED },
168+
succeedOn = { codeScanStatus == CodeAnalysisStatus.COMPLETED },
169169
maxDuration = Duration.ofSeconds(sessionContext.sessionConfig.overallJobTimeoutInSeconds())
170170
) {
171171
currentCoroutineContext.ensureActive()
@@ -182,7 +182,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
182182
}
183183
}
184184
delay(CODE_SCAN_POLLING_INTERVAL_IN_SECONDS * TOTAL_MILLIS_IN_SECOND)
185-
if (codeScanStatus == CodeScanStatus.FAILED) {
185+
if (codeScanStatus == CodeAnalysisStatus.FAILED) {
186186
if (isProjectScope()) {
187187
LOG.debug {
188188
"CodeWhisperer service error occurred. Something went wrong fetching results for code review: $getCodeScanResponse " +
@@ -205,12 +205,12 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
205205
)
206206

207207
val documents = mutableListOf<String>()
208-
documents.add(listCodeScanFindingsResponse.codeScanFindings())
208+
documents.add(listCodeScanFindingsResponse.codeAnalysisFindings())
209209
// coroutineContext helps to actively cancel the bigger projects quickly
210210
withContext(currentCoroutineContext) {
211211
while (listCodeScanFindingsResponse.nextToken() != null && currentCoroutineContext.isActive) {
212212
listCodeScanFindingsResponse = listCodeScanFindings(jobId, listCodeScanFindingsResponse.nextToken())
213-
documents.add(listCodeScanFindingsResponse.codeScanFindings())
213+
documents.add(listCodeScanFindingsResponse.codeAnalysisFindings())
214214
}
215215
}
216216

@@ -224,7 +224,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
224224
codeScanResponseContext = codeScanResponseContext.copy(reason = "Succeeded")
225225
return CodeScanResponse.Success(issues, codeScanResponseContext)
226226
} catch (e: Exception) {
227-
val exception = e as? CodeWhispererException
227+
val exception = e as? CodeWhispererRuntimeException
228228
val awsError = exception?.awsErrorDetails()
229229

230230
if (awsError != null) {
@@ -248,7 +248,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
248248
}
249249
}
250250

251-
fun createCodeScan(language: String, codeScanName: String): CreateCodeScanResponse {
251+
fun createCodeScan(language: String, codeScanName: String): StartCodeAnalysisResponse {
252252
val artifactsMap = mapOf(
253253
ArtifactType.SOURCE_CODE to urlResponse[ArtifactType.SOURCE_CODE]?.uploadId(),
254254
ArtifactType.BUILT_JARS to urlResponse[ArtifactType.BUILT_JARS]?.uploadId()
@@ -262,7 +262,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
262262

263263
try {
264264
return clientAdaptor.createCodeScan(
265-
CreateCodeScanRequest.builder()
265+
StartCodeAnalysisRequest.builder()
266266
.clientToken(clientToken.toString())
267267
.programmingLanguage { it.languageName(language) }
268268
.artifacts(artifactsMap)
@@ -277,9 +277,9 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
277277
}
278278
}
279279

280-
fun getCodeScan(jobId: String): GetCodeScanResponse = try {
280+
fun getCodeScan(jobId: String): GetCodeAnalysisResponse = try {
281281
clientAdaptor.getCodeScan(
282-
GetCodeScanRequest.builder()
282+
GetCodeAnalysisRequest.builder()
283283
.jobId(jobId)
284284
.build()
285285
)
@@ -289,11 +289,11 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
289289
throw codeScanServerException("GetCodeReviewException: $errorMessage")
290290
}
291291

292-
fun listCodeScanFindings(jobId: String, nextToken: String?): ListCodeScanFindingsResponse = try {
292+
fun listCodeScanFindings(jobId: String, nextToken: String?): ListCodeAnalysisFindingsResponse = try {
293293
clientAdaptor.listCodeScanFindings(
294-
ListCodeScanFindingsRequest.builder()
294+
ListCodeAnalysisFindingsRequest.builder()
295295
.jobId(jobId)
296-
.codeScanFindingsSchema(CodeScanFindingsSchema.CODESCAN_FINDINGS_1_0)
296+
.codeAnalysisFindingsSchema(CodeAnalysisFindingsSchema.CODEANALYSIS_FINDINGS_1_0)
297297
.nextToken(nextToken)
298298
.build()
299299
)

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt

Lines changed: 13 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@ import com.intellij.openapi.application.ApplicationManager
88
import com.intellij.openapi.components.service
99
import com.intellij.openapi.project.Project
1010
import com.intellij.util.text.nullize
11-
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider
12-
import software.amazon.awssdk.services.codewhisperer.CodeWhispererClient
13-
import software.amazon.awssdk.services.codewhisperer.model.CreateCodeScanRequest
14-
import software.amazon.awssdk.services.codewhisperer.model.CreateCodeScanResponse
15-
import software.amazon.awssdk.services.codewhisperer.model.GetCodeScanRequest
16-
import software.amazon.awssdk.services.codewhisperer.model.GetCodeScanResponse
17-
import software.amazon.awssdk.services.codewhisperer.model.ListCodeScanFindingsRequest
18-
import software.amazon.awssdk.services.codewhisperer.model.ListCodeScanFindingsResponse
1911
import software.amazon.awssdk.services.codewhispererruntime.CodeWhispererRuntimeClient
2012
import software.amazon.awssdk.services.codewhispererruntime.model.ChatInteractWithMessageEvent
2113
import software.amazon.awssdk.services.codewhispererruntime.model.ChatMessageInteractionType
@@ -25,14 +17,20 @@ import software.amazon.awssdk.services.codewhispererruntime.model.CreateUploadUr
2517
import software.amazon.awssdk.services.codewhispererruntime.model.Dimension
2618
import software.amazon.awssdk.services.codewhispererruntime.model.GenerateCompletionsRequest
2719
import software.amazon.awssdk.services.codewhispererruntime.model.GenerateCompletionsResponse
20+
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisRequest
21+
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisResponse
2822
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeFixJobRequest
2923
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeFixJobResponse
3024
import software.amazon.awssdk.services.codewhispererruntime.model.GetTestGenerationResponse
3125
import software.amazon.awssdk.services.codewhispererruntime.model.IdeCategory
3226
import software.amazon.awssdk.services.codewhispererruntime.model.InlineChatUserDecision
3327
import software.amazon.awssdk.services.codewhispererruntime.model.ListAvailableCustomizationsRequest
28+
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsRequest
29+
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsResponse
3430
import software.amazon.awssdk.services.codewhispererruntime.model.ListFeatureEvaluationsResponse
3531
import software.amazon.awssdk.services.codewhispererruntime.model.SendTelemetryEventResponse
32+
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisRequest
33+
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisResponse
3634
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeFixJobRequest
3735
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeFixJobResponse
3836
import software.amazon.awssdk.services.codewhispererruntime.model.StartTestGenerationResponse
@@ -51,23 +49,18 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
5149
import software.aws.toolkits.jetbrains.core.credentials.pinning.CodeWhispererConnection
5250
import software.aws.toolkits.jetbrains.services.amazonq.codeWhispererUserContext
5351
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererCustomization
54-
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
5552
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
5653
import software.aws.toolkits.jetbrains.services.codewhisperer.model.SessionContextNew
5754
import software.aws.toolkits.jetbrains.services.codewhisperer.service.RequestContext
5855
import software.aws.toolkits.jetbrains.services.codewhisperer.service.RequestContextNew
5956
import software.aws.toolkits.jetbrains.services.codewhisperer.service.ResponseContext
6057
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
6158
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getTelemetryOptOutPreference
62-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.transform
6359
import software.aws.toolkits.telemetry.CodewhispererCompletionType
6460
import software.aws.toolkits.telemetry.CodewhispererSuggestionState
6561
import java.time.Instant
6662
import java.util.concurrent.TimeUnit
67-
import kotlin.reflect.KProperty0
68-
import kotlin.reflect.jvm.isAccessible
6963

70-
// TODO: move this file to package "/client"
7164
// As the connection is project-level, we need to make this project-level too
7265
@Deprecated("Methods can throw a NullPointerException if callee does not check if connection is valid")
7366
interface CodeWhispererClientAdaptor : Disposable {
@@ -81,20 +74,11 @@ interface CodeWhispererClientAdaptor : Disposable {
8174
request: CreateUploadUrlRequest,
8275
): CreateUploadUrlResponse
8376

84-
fun createCodeScan(
85-
request: CreateCodeScanRequest,
86-
isSigv4: Boolean = shouldUseSigv4Client(project),
87-
): CreateCodeScanResponse
77+
fun createCodeScan(request: StartCodeAnalysisRequest): StartCodeAnalysisResponse
8878

89-
fun getCodeScan(
90-
request: GetCodeScanRequest,
91-
isSigv4: Boolean = shouldUseSigv4Client(project),
92-
): GetCodeScanResponse
79+
fun getCodeScan(request: GetCodeAnalysisRequest): GetCodeAnalysisResponse
9380

94-
fun listCodeScanFindings(
95-
request: ListCodeScanFindingsRequest,
96-
isSigv4: Boolean = shouldUseSigv4Client(project),
97-
): ListCodeScanFindingsResponse
81+
fun listCodeScanFindings(request: ListCodeAnalysisFindingsRequest): ListCodeAnalysisFindingsResponse
9882

9983
fun startCodeFixJob(request: StartCodeFixJobRequest): StartCodeFixJobResponse
10084

@@ -272,26 +256,15 @@ interface CodeWhispererClientAdaptor : Disposable {
272256
companion object {
273257
fun getInstance(project: Project): CodeWhispererClientAdaptor = project.service()
274258

275-
private fun shouldUseSigv4Client(project: Project) =
276-
CodeWhispererExplorerActionManager.getInstance().checkActiveCodeWhispererConnectionType(project) == CodeWhispererLoginType.Accountless
277-
278259
const val INVALID_CODESCANJOBID = "Invalid_CodeScanJobID"
279260
const val INVALID_CODEFIXJOBID = "Invalid_CodeFixJobID"
280261
}
281262
}
282263

283264
open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeWhispererClientAdaptor {
284-
private val mySigv4Client by lazy { createUnmanagedSigv4Client() }
285-
286265
@Volatile
287266
private var myBearerClient: CodeWhispererRuntimeClient? = null
288267

289-
private val KProperty0<*>.isLazyInitialized: Boolean
290-
get() {
291-
isAccessible = true
292-
return (getDelegate() as Lazy<*>).isInitialized()
293-
}
294-
295268
init {
296269
initClientUpdateListener()
297270
}
@@ -327,26 +300,12 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
327300
override fun createUploadUrl(request: CreateUploadUrlRequest): CreateUploadUrlResponse =
328301
bearerClient().createUploadUrl(request)
329302

330-
override fun createCodeScan(request: CreateCodeScanRequest, isSigv4: Boolean): CreateCodeScanResponse =
331-
if (isSigv4) {
332-
mySigv4Client.createCodeScan(request)
333-
} else {
334-
bearerClient().startCodeAnalysis(request.transform()).transform()
335-
}
303+
override fun createCodeScan(request: StartCodeAnalysisRequest): StartCodeAnalysisResponse = bearerClient().startCodeAnalysis(request)
336304

337-
override fun getCodeScan(request: GetCodeScanRequest, isSigv4: Boolean): GetCodeScanResponse =
338-
if (isSigv4) {
339-
mySigv4Client.getCodeScan(request)
340-
} else {
341-
bearerClient().getCodeAnalysis(request.transform()).transform()
342-
}
305+
override fun getCodeScan(request: GetCodeAnalysisRequest): GetCodeAnalysisResponse = bearerClient().getCodeAnalysis(request)
343306

344-
override fun listCodeScanFindings(request: ListCodeScanFindingsRequest, isSigv4: Boolean): ListCodeScanFindingsResponse =
345-
if (isSigv4) {
346-
mySigv4Client.listCodeScanFindings(request)
347-
} else {
348-
bearerClient().listCodeAnalysisFindings(request.transform()).transform()
349-
}
307+
override fun listCodeScanFindings(request: ListCodeAnalysisFindingsRequest): ListCodeAnalysisFindingsResponse =
308+
bearerClient().listCodeAnalysisFindings(request)
350309

351310
override fun startCodeFixJob(request: StartCodeFixJobRequest): StartCodeFixJobResponse = bearerClient().startCodeFixJob(request)
352311

@@ -851,9 +810,6 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
851810
}
852811

853812
override fun dispose() {
854-
if (this::mySigv4Client.isLazyInitialized) {
855-
mySigv4Client.close()
856-
}
857813
myBearerClient?.close()
858814
}
859815

@@ -880,11 +836,6 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
880836

881837
companion object {
882838
private val LOG = getLogger<CodeWhispererClientAdaptorImpl>()
883-
private fun createUnmanagedSigv4Client(): CodeWhispererClient = AwsClientManager.getInstance().createUnmanagedClient(
884-
AnonymousCredentialsProvider.create(),
885-
CodeWhispererConstants.Config.Sigv4ClientRegion,
886-
CodeWhispererConstants.Config.CODEWHISPERER_ENDPOINT
887-
)
888839
}
889840
}
890841

0 commit comments

Comments
 (0)