Skip to content

Commit 9c83687

Browse files
authored
Merge branch 'main' into add-generate-tests
2 parents c9f1491 + 38cdcbb commit 9c83687

File tree

33 files changed

+246
-317
lines changed

33 files changed

+246
-317
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Automatically terminate orphaned process for `@workspace` helper"
4+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ mockitoKotlin = "5.4.0"
2525
mockk = "1.13.10"
2626
nimbus-jose-jwt = "9.40"
2727
node-gradle = "7.0.2"
28-
telemetryGenerator = "1.0.259"
28+
telemetryGenerator = "1.0.262"
2929
testLogger = "4.0.0"
3030
testRetry = "1.5.10"
3131
# test-only; platform provides slf4j transitively at runtime

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/gettingstarted/QGettingStartedContent.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ class QGettingStartedContent(val project: Project) : Disposable {
6262
AmazonQToolWindow.getStarted(project)
6363
}
6464
}
65-
null
65+
66+
JBCefJSQuery.Response(null)
6667
}
6768
receiveMessageQuery.addHandler(handler)
6869
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ import com.intellij.openapi.util.Disposer
88
import com.intellij.ui.jcef.JBCefJSQuery
99
import org.cef.CefApp
1010
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
11-
import java.util.function.Function
12-
13-
typealias MessageReceiver = Function<String, JBCefJSQuery.Response>
1411

1512
/*
1613
Displays the web view for the Amazon Q tool window

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class BrowserConnector(
7777
private fun addMessageHook(browser: Browser) = callbackFlow {
7878
val handler = Function<String, Response> {
7979
trySend(it)
80-
null
80+
Response(null)
8181
}
8282

8383
browser.receiveMessageQuery.addHandler(handler)

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,18 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
103103
cwsprChatUserIntent = data.userIntent?.let { getTelemetryUserIntent(it) },
104104
cwsprChatHasCodeSnippet = data.activeFileContext.focusAreaContext?.codeSelection?.isNotEmpty() ?: false,
105105
cwsprChatProgrammingLanguage = data.activeFileContext.fileContext?.fileLanguage,
106-
cwsprChatActiveEditorTotalCharacters = data.activeFileContext.focusAreaContext?.codeSelection?.length,
107-
cwsprChatActiveEditorImportCount = data.activeFileContext.focusAreaContext?.codeNames?.fullyQualifiedNames?.used?.size,
108-
cwsprChatResponseCodeSnippetCount = numberOfCodeBlocks,
109-
cwsprChatResponseCode = statusCode,
110-
cwsprChatSourceLinkCount = response.relatedSuggestions?.size,
106+
cwsprChatActiveEditorTotalCharacters = data.activeFileContext.focusAreaContext?.codeSelection?.length?.toLong(),
107+
cwsprChatActiveEditorImportCount = data.activeFileContext.focusAreaContext?.codeNames?.fullyQualifiedNames?.used?.size?.toLong(),
108+
cwsprChatResponseCodeSnippetCount = numberOfCodeBlocks.toLong(),
109+
cwsprChatResponseCode = statusCode.toLong(),
110+
cwsprChatSourceLinkCount = response.relatedSuggestions?.size?.toLong(),
111111
cwsprChatReferencesCount = 0, // TODO
112-
cwsprChatFollowUpCount = response.followUps?.size,
113-
cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toInt(),
112+
cwsprChatFollowUpCount = response.followUps?.size?.toLong(),
113+
cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toLong(),
114114
cwsprChatTimeBetweenChunks = "[${getResponseStreamTimeBetweenChunks(response.tabId).joinToString(",")}]",
115-
cwsprChatFullResponseLatency = responseStreamTotalTime[response.tabId] ?: 0,
116-
cwsprChatRequestLength = data.message.length,
117-
cwsprChatResponseLength = responseLength,
115+
cwsprChatFullResponseLatency = responseStreamTotalTime[response.tabId]?.toLong() ?: 0,
116+
cwsprChatRequestLength = data.message.length.toLong(),
117+
cwsprChatResponseLength = responseLength.toLong(),
118118
cwsprChatConversationType = CwsprChatConversationType.Chat,
119119
credentialStartUrl = getStartUrl(context.project),
120120
codewhispererCustomizationArn = data.customization?.arn,
@@ -153,10 +153,10 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
153153
cwsprChatUserIntent = data.userIntent?.let { getTelemetryUserIntent(it) },
154154
cwsprChatHasCodeSnippet = data.activeFileContext.focusAreaContext?.codeSelection?.isNotEmpty() ?: false,
155155
cwsprChatProgrammingLanguage = data.activeFileContext.fileContext?.fileLanguage,
156-
cwsprChatActiveEditorTotalCharacters = data.activeFileContext.focusAreaContext?.codeSelection?.length,
157-
cwsprChatActiveEditorImportCount = data.activeFileContext.focusAreaContext?.codeNames?.fullyQualifiedNames?.used?.size,
158-
cwsprChatResponseCode = responseCode,
159-
cwsprChatRequestLength = data.message.length,
156+
cwsprChatActiveEditorTotalCharacters = data.activeFileContext.focusAreaContext?.codeSelection?.length?.toLong(),
157+
cwsprChatActiveEditorImportCount = data.activeFileContext.focusAreaContext?.codeNames?.fullyQualifiedNames?.used?.size?.toLong(),
158+
cwsprChatResponseCode = responseCode.toLong(),
159+
cwsprChatRequestLength = data.message.length.toLong(),
160160
cwsprChatConversationType = CwsprChatConversationType.Chat,
161161
credentialStartUrl = getStartUrl(context.project)
162162
)
@@ -212,12 +212,12 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
212212
cwsprChatConversationId = getConversationId(message.tabId).orEmpty(),
213213
cwsprChatMessageId = message.messageId,
214214
cwsprChatInteractionType = CwsprChatInteractionType.CopySnippet,
215-
cwsprChatAcceptedCharactersLength = message.code.length,
215+
cwsprChatAcceptedCharactersLength = message.code.length.toLong(),
216216
cwsprChatInteractionTarget = message.insertionTargetType,
217217
cwsprChatHasReference = null,
218218
credentialStartUrl = getStartUrl(context.project),
219-
cwsprChatCodeBlockIndex = message.codeBlockIndex,
220-
cwsprChatTotalCodeBlocks = message.totalCodeBlocks,
219+
cwsprChatCodeBlockIndex = message.codeBlockIndex?.toLong(),
220+
cwsprChatTotalCodeBlocks = message.totalCodeBlocks?.toLong(),
221221
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId)
222222
)
223223
ChatInteractWithMessageEvent.builder().apply {
@@ -235,13 +235,13 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
235235
cwsprChatConversationId = getConversationId(message.tabId).orEmpty(),
236236
cwsprChatMessageId = message.messageId,
237237
cwsprChatInteractionType = CwsprChatInteractionType.InsertAtCursor,
238-
cwsprChatAcceptedCharactersLength = message.code.length,
239-
cwsprChatAcceptedNumberOfLines = message.code.lines().size,
238+
cwsprChatAcceptedCharactersLength = message.code.length.toLong(),
239+
cwsprChatAcceptedNumberOfLines = message.code.lines().size.toLong(),
240240
cwsprChatInteractionTarget = message.insertionTargetType,
241241
cwsprChatHasReference = null,
242242
credentialStartUrl = getStartUrl(context.project),
243-
cwsprChatCodeBlockIndex = message.codeBlockIndex,
244-
cwsprChatTotalCodeBlocks = message.totalCodeBlocks,
243+
cwsprChatCodeBlockIndex = message.codeBlockIndex?.toLong(),
244+
cwsprChatTotalCodeBlocks = message.totalCodeBlocks?.toLong(),
245245
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId)
246246
)
247247
ChatInteractWithMessageEvent.builder().apply {
@@ -423,11 +423,11 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
423423
AmazonqTelemetry.indexWorkspace(
424424
project = null,
425425
duration = duration,
426-
amazonqIndexFileCount = fileCount,
427-
amazonqIndexFileSizeInMB = fileSize,
426+
amazonqIndexFileCount = fileCount.toLong(),
427+
amazonqIndexFileSizeInMB = fileSize.toLong(),
428428
success = isSuccess,
429-
amazonqIndexMemoryUsageInMB = memoryUsage,
430-
amazonqIndexCpuUsagePercentage = cpuUsage,
429+
amazonqIndexMemoryUsageInMB = memoryUsage?.toLong(),
430+
amazonqIndexCpuUsagePercentage = cpuUsage?.toLong(),
431431
credentialStartUrl = startUrl
432432
)
433433
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/project/manifest/ManifestManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import software.aws.toolkits.jetbrains.core.getTextFromUrl
1515

1616
class ManifestManager {
1717
private val cloudFrontUrl = "https://aws-toolkit-language-servers.amazonaws.com/q-context/manifest.json"
18-
val currentVersion = "0.1.9"
18+
val currentVersion = "0.1.10"
1919
val currentOs = getOs()
2020
private val arch = CpuArch.CURRENT
2121
private val mapper = jacksonObjectMapper()

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformTelemetryManager.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ class CodeTransformTelemetryManager(private val project: Project) {
8989

9090
fun uploadProject(payloadSize: Int, startTime: Instant, dependenciesCopied: Boolean = false, telemetryErrorMessage: String? = null) {
9191
CodetransformTelemetry.uploadProject(
92-
codeTransformRunTimeLatency = calculateTotalLatency(startTime, Instant.now()),
92+
codeTransformRunTimeLatency = calculateTotalLatency(startTime, Instant.now()).toLong(),
9393
codeTransformSessionId = sessionId,
94-
codeTransformTotalByteSize = payloadSize,
94+
codeTransformTotalByteSize = payloadSize.toLong(),
9595
codeTransformDependenciesCopied = dependenciesCopied,
9696
result = if (telemetryErrorMessage.isNullOrEmpty()) Result.Succeeded else Result.Failed,
9797
reason = telemetryErrorMessage,
@@ -101,7 +101,7 @@ class CodeTransformTelemetryManager(private val project: Project) {
101101
fun jobStart(transformStartTime: Instant, jobId: JobId?, telemetryErrorMessage: String? = null) = CodetransformTelemetry.jobStart(
102102
codeTransformSessionId = sessionId,
103103
codeTransformJobId = jobId?.id.orEmpty(),
104-
codeTransformRunTimeLatency = calculateTotalLatency(transformStartTime, Instant.now()), // subtract current time by project start time
104+
codeTransformRunTimeLatency = calculateTotalLatency(transformStartTime, Instant.now()).toLong(), // subtract current time by project start time
105105
result = if (telemetryErrorMessage.isNullOrEmpty()) Result.Succeeded else Result.Failed,
106106
reason = telemetryErrorMessage,
107107
)
@@ -117,9 +117,9 @@ class CodeTransformTelemetryManager(private val project: Project) {
117117
codeTransformArtifactType = artifactType,
118118
codeTransformJobId = jobId.id,
119119
codeTransformRuntimeError = telemetryErrorMessage,
120-
codeTransformRunTimeLatency = calculateTotalLatency(downloadStartTime, Instant.now()),
120+
codeTransformRunTimeLatency = calculateTotalLatency(downloadStartTime, Instant.now()).toLong(),
121121
codeTransformSessionId = sessionId,
122-
codeTransformTotalByteSize = totalDownloadBytes,
122+
codeTransformTotalByteSize = totalDownloadBytes.toLong(),
123123
result = if (telemetryErrorMessage.isNullOrEmpty()) Result.Succeeded else Result.Failed,
124124
reason = telemetryErrorMessage,
125125
)
@@ -175,7 +175,7 @@ class CodeTransformTelemetryManager(private val project: Project) {
175175
codeTransformRunTimeLatency = calculateTotalLatency(
176176
CodeTransformTelemetryState.instance.getStartTime(),
177177
Instant.now()
178-
),
178+
).toLong(),
179179
codeTransformLocalJavaVersion = getJavaVersionFromProjectSetting(project),
180180
)
181181

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ interface CodeWhispererClientAdaptor : Disposable {
104104
fun sendCodePercentageTelemetry(
105105
language: CodeWhispererProgrammingLanguage,
106106
customizationArn: String?,
107-
acceptedTokenCount: Int,
108-
totalTokenCount: Int,
109-
unmodifiedAcceptedTokenCount: Int?
107+
acceptedTokenCount: Long,
108+
totalTokenCount: Long,
109+
unmodifiedAcceptedTokenCount: Long?
110110
): SendTelemetryEventResponse
111111

112112
fun sendUserModificationTelemetry(
@@ -337,18 +337,18 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
337337
override fun sendCodePercentageTelemetry(
338338
language: CodeWhispererProgrammingLanguage,
339339
customizationArn: String?,
340-
acceptedTokenCount: Int,
341-
totalTokenCount: Int,
342-
unmodifiedAcceptedTokenCount: Int?
340+
acceptedTokenCount: Long,
341+
totalTokenCount: Long,
342+
unmodifiedAcceptedTokenCount: Long?
343343
): SendTelemetryEventResponse = bearerClient().sendTelemetryEvent { requestBuilder ->
344344
requestBuilder.telemetryEvent { telemetryEventBuilder ->
345345
telemetryEventBuilder.codeCoverageEvent {
346346
it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) }
347347
it.customizationArn(customizationArn)
348-
it.acceptedCharacterCount(acceptedTokenCount)
349-
it.totalCharacterCount(totalTokenCount)
348+
it.acceptedCharacterCount(acceptedTokenCount.toInt())
349+
it.totalCharacterCount(totalTokenCount.toInt())
350350
it.timestamp(Instant.now())
351-
it.unmodifiedAcceptedCharacterCount(unmodifiedAcceptedTokenCount)
351+
it.unmodifiedAcceptedCharacterCount(unmodifiedAcceptedTokenCount?.toInt())
352352
}
353353
}
354354
requestBuilder.optOutPreference(getTelemetryOptOutPreference())

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererCodeCoverageTracker.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispere
2929
import software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererUserActionListener
3030
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererCodeCompletionServiceListener
3131
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
32-
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererUserGroupSettings
3332
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.TOTAL_SECONDS_IN_MINUTE
3433
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getCodeWhispererStartUrl
3534
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
@@ -38,7 +37,7 @@ import java.time.Duration
3837
import java.time.Instant
3938
import java.util.concurrent.atomic.AtomicBoolean
4039
import java.util.concurrent.atomic.AtomicInteger
41-
import kotlin.math.roundToInt
40+
import kotlin.math.roundToLong
4241

4342
// TODO: reset code coverage calculator on logging out connection?
4443
abstract class CodeWhispererCodeCoverageTracker(
@@ -49,15 +48,15 @@ abstract class CodeWhispererCodeCoverageTracker(
4948
private val fileToTokens: MutableMap<Document, CodeCoverageTokens>,
5049
private val myServiceInvocationCount: AtomicInteger
5150
) : Disposable {
52-
val percentage: Int?
53-
get() = if (totalTokensSize != 0) calculatePercentage(acceptedTokensSize, totalTokensSize) else null
54-
val acceptedTokensSize: Int
51+
val percentage: Long?
52+
get() = if (totalTokensSize != 0L) calculatePercentage(acceptedTokensSize, totalTokensSize) else null
53+
val acceptedTokensSize: Long
5554
get() = fileToTokens.map {
5655
it.value.acceptedTokens.get()
5756
}.fold(0) { acc, next ->
5857
acc + next
5958
}
60-
val totalTokensSize: Int
59+
val totalTokensSize: Long
6160
get() = fileToTokens.map {
6261
it.value.totalTokens.get()
6362
}.fold(0) { acc, next ->
@@ -203,7 +202,7 @@ abstract class CodeWhispererCodeCoverageTracker(
203202
if (myServiceInvocationCount.get() <= 0) return
204203

205204
// accepted char count without considering modification
206-
var rawAcceptedCharacterCount = 0
205+
var rawAcceptedCharacterCount = 0L
207206
rangeMarkers.forEach { rangeMarker ->
208207
if (!rangeMarker.isValid) return@forEach
209208
// if users add more code upon the recommendation generated from CodeWhisperer, we consider those added part as userToken but not CwsprTokens
@@ -253,9 +252,8 @@ abstract class CodeWhispererCodeCoverageTracker(
253252
codewhispererLanguage = language.toTelemetryType(),
254253
codewhispererPercentage = percentage,
255254
codewhispererTotalTokens = totalTokensSize,
256-
successCount = myServiceInvocationCount.get(),
255+
successCount = myServiceInvocationCount.get().toLong(),
257256
codewhispererCustomizationArn = customizationArn,
258-
codewhispererUserGroup = CodeWhispererUserGroupSettings.getInstance().getUserGroup().name,
259257
credentialStartUrl = getCodeWhispererStartUrl(project)
260258
)
261259
}
@@ -284,7 +282,7 @@ abstract class CodeWhispererCodeCoverageTracker(
284282
private val LOG = getLogger<CodeWhispererCodeCoverageTracker>()
285283
private val instances: MutableMap<CodeWhispererProgrammingLanguage, CodeWhispererCodeCoverageTracker> = mutableMapOf()
286284

287-
fun calculatePercentage(acceptedTokens: Int, totalTokens: Int): Int = ((acceptedTokens.toDouble() * 100) / totalTokens).roundToInt()
285+
fun calculatePercentage(acceptedTokens: Long, totalTokens: Long): Long = ((acceptedTokens.toDouble() * 100) / totalTokens).roundToLong()
288286
fun getInstance(project: Project, language: CodeWhispererProgrammingLanguage): CodeWhispererCodeCoverageTracker =
289287
when (val instance = instances[language]) {
290288
null -> {

0 commit comments

Comments
 (0)