Skip to content

Commit b9db020

Browse files
committed
Merge remote-tracking branch 'origin/manodnyb/addEventsForRefreshingFiles' into manodnyb/addEventsForRefreshingFiles
2 parents 12d477b + c51bb1b commit b9db020

File tree

22 files changed

+457
-58
lines changed

22 files changed

+457
-58
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Add inline completion support for abap language"
4+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ mockitoKotlin = "5.4.0"
2828
mockk = "1.13.17"
2929
nimbus-jose-jwt = "9.40"
3030
node-gradle = "7.0.2"
31-
telemetryGenerator = "1.0.310"
31+
telemetryGenerator = "1.0.322"
3232
testLogger = "4.0.0"
3333
testRetry = "1.5.10"
3434
# test-only; platform provides slf4j transitively at runtime

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_
8282
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.STOP_CHAT_RESPONSE
8383
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
8484
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.StopResponseMessage
85+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
8586
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil
8687
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil.toUriString
8788
import software.aws.toolkits.jetbrains.services.amazonq.util.command
@@ -439,6 +440,9 @@ class BrowserConnector(
439440
ShowSettingsUtil.getInstance().showSettingsDialog(browser.project, CodeWhispererConfigurable::class.java)
440441
}
441442
}
443+
TELEMETRY_EVENT -> {
444+
handleChat(AmazonQChatServer.telemetryEvent, node)
445+
}
442446
}
443447
}
444448

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorManager.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.intellij.openapi.editor.Editor
1212
import com.intellij.openapi.options.ShowSettingsUtil
1313
import com.intellij.openapi.util.TextRange
1414
import com.intellij.psi.PsiDocumentManager
15+
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
1516
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CaretPosition
1617
import software.aws.toolkits.jetbrains.services.codewhisperer.model.InvocationContext
1718
import software.aws.toolkits.jetbrains.services.codewhisperer.model.SessionContext
@@ -66,7 +67,9 @@ class CodeWhispererEditorManager {
6667
}
6768

6869
// Display tab accept priority once when the first accept is made
69-
if (!CodeWhispererSettings.getInstance().isTabAcceptPriorityNotificationShownOnce()) {
70+
if (!CodeWhispererSettings.getInstance().isTabAcceptPriorityNotificationShownOnce() &&
71+
CodeWhispererFeatureConfigService.getInstance().getNewAutoTriggerUX()
72+
) {
7073
notifyInfo(
7174
"Amazon Q",
7275
message("codewhisperer.inline.settings.tab_priority.notification.text"),

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/CodeWhispererLanguageManager.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.openapi.components.Service
77
import com.intellij.openapi.components.service
88
import com.intellij.openapi.vfs.VirtualFile
99
import com.intellij.psi.PsiFile
10+
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererAbap
1011
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererC
1112
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCpp
1213
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCsharp
@@ -147,6 +148,7 @@ class CodeWhispererLanguageManager {
147148
listOf("vue") to CodeWhispererVue.INSTANCE,
148149
listOf("ps1", "psm1") to CodeWhispererPowershell.INSTANCE,
149150
listOf("r") to CodeWhispererR.INSTANCE,
151+
listOf("abap", "acds") to CodeWhispererAbap.INSTANCE,
150152
).map {
151153
val exts = it.first
152154
val lang = it.second
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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.codewhisperer.language.languages
5+
6+
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
7+
import software.aws.toolkits.telemetry.CodewhispererLanguage
8+
9+
class CodeWhispererAbap private constructor() : CodeWhispererProgrammingLanguage() {
10+
override val languageId: String = ID
11+
12+
override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Abap
13+
14+
override fun isCodeCompletionSupported(): Boolean = true
15+
16+
companion object {
17+
const val ID = "abap"
18+
19+
val INSTANCE = CodeWhispererAbap()
20+
}
21+
}

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererR.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class CodeWhispererR private constructor() : CodeWhispererProgrammingLanguage()
1212
override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.R
1313

1414
companion object {
15-
// TODO: confirm with service team language id
1615
const val ID = "r"
1716

1817
val INSTANCE = CodeWhispererR()

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import com.intellij.util.concurrency.annotations.RequiresEdt
2222
import kotlinx.coroutines.CoroutineScope
2323
import kotlinx.coroutines.Job
2424
import kotlinx.coroutines.future.await
25-
import kotlinx.coroutines.isActive
2625
import kotlinx.coroutines.launch
2726
import kotlinx.coroutines.withContext
2827
import org.eclipse.lsp4j.Position
@@ -36,7 +35,6 @@ import software.aws.toolkits.core.utils.getLogger
3635
import software.aws.toolkits.core.utils.info
3736
import software.aws.toolkits.core.utils.warn
3837
import software.aws.toolkits.jetbrains.core.coroutines.EDT
39-
import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope
4038
import software.aws.toolkits.jetbrains.core.coroutines.getCoroutineBgContext
4139
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
4240
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
@@ -181,15 +179,9 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
181179
}
182180
}
183181

184-
// When popup is disposed we will cancel this coroutine. The only places popup can get disposed should be
185-
// from CodeWhispererPopupManager.cancelPopup() and CodeWhispererPopupManager.closePopup().
186-
// It's possible and ok that coroutine will keep running until the next time we check it's state.
187-
// As long as we don't show to the user extra info we are good.
188-
val coroutineScope = disposableCoroutineScope(popup)
189-
190182
var states: InvocationContext? = null
191183

192-
val job = coroutineScope.launch {
184+
val job = cs.launch {
193185
try {
194186
var startTime = System.nanoTime()
195187
CodeWhispererInvocationStatus.getInstance().setInvocationStart()
@@ -211,13 +203,11 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
211203
runInEdt {
212204
states = processCodeWhispererUI(workerContext, states)
213205
}
214-
if (!isActive) {
215-
// If job is cancelled before we do another request, don't bother making
216-
// another API call to save resources
206+
if (popup.isDisposed) {
217207
LOG.debug { "Skipping sending remaining requests on CodeWhisperer session exit" }
218208
return@launch
219209
}
220-
} while (nextToken != null)
210+
} while (nextToken != null && nextToken.left.isNotEmpty())
221211
} catch (e: Exception) {
222212
// TODO flare: flare doesn't return exceptions
223213
val sessionId = ""
@@ -302,7 +292,7 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
302292
return null
303293
}
304294

305-
if (completions.partialResultToken == null) {
295+
if (completions.partialResultToken?.left.isNullOrEmpty()) {
306296
CodeWhispererInvocationStatus.getInstance().finishInvocation()
307297
}
308298

@@ -336,7 +326,7 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
336326
// If there are no recommendations at all in this session, we need to manually send the user decision event here
337327
// since it won't be sent automatically later
338328
if (!hasAtLeastOneValid) {
339-
if (completions.partialResultToken == null) {
329+
if (completions.partialResultToken?.left.isNullOrEmpty()) {
340330
LOG.debug { "None of the recommendations are valid, exiting CodeWhisperer session" }
341331
CodeWhispererPopupManager.getInstance().cancelPopup(popup)
342332
return null
@@ -531,7 +521,7 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
531521
editor.caretModel.primaryCaret.logicalPosition.column
532522
)
533523
if (nextToken != null) {
534-
workDoneToken = nextToken
524+
partialResultToken = nextToken
535525
}
536526
}
537527
}

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererAcceptTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocume
1616
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.javaFileName
1717
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.javaResponse
1818
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.javaTestContext
19+
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.testNextToken
1920
import software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererActionPromoter
2021
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.QInlineActionId.qInlineAcceptActionId
2122
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.QInlineActionId.qInlineForceAcceptActionId
@@ -89,7 +90,7 @@ class CodeWhispererAcceptTest : CodeWhispererTestBase() {
8990
)
9091
),
9192
sessionId = "sessionId",
92-
partialResultToken = null
93+
partialResultToken = testNextToken
9394
)
9495
)
9596

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererLanguageManagerTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.mockito.kotlin.doReturn
1616
import org.mockito.kotlin.mock
1717
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererLanguageManager
1818
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
19+
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererAbap
1920
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererC
2021
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCpp
2122
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCsharp
@@ -136,6 +137,7 @@ class CodeWhispererLanguageManagerTest {
136137
testGetProgrammingLanguageUtil<CodeWhispererSwift>(listOf("foo"), listOf("swift"))
137138
testGetProgrammingLanguageUtil<CodeWhispererSystemVerilog>(listOf("foo"), listOf("sv", "svh", "vh"))
138139
testGetProgrammingLanguageUtil<CodeWhispererVue>(listOf("foo"), listOf("vue"))
140+
testGetProgrammingLanguageUtil<CodeWhispererAbap>(listOf("foo"), listOf("abap", "acds"))
139141
}
140142

141143
@Test

0 commit comments

Comments
 (0)