Skip to content

Commit a766f62

Browse files
authored
revert the behavior of making IntelliSense and Q suggestions co-exist (#5353)
* revert the behavior of making IntelliSense and Q suggestions co-exist * change log * Remove isQPrioritizedForTabAccept usage * fix typing
1 parent 9a60e50 commit a766f62

File tree

7 files changed

+28
-40
lines changed

7 files changed

+28
-40
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Amazon Q: Reverting the behavior of making JetBrains suggestions(IntelliSense) and Q suggestions co-exist"
4+
}

plugins/amazonq/codewhisperer/jetbrains-community/resources/META-INF/plugin-codewhisperer.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
</action>
107107
<action id="codewhisperer.inline.force.accept"
108108
class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererForceAcceptAction"
109-
text="Force Accept the Current Inline Suggestion" description="Force accept the current inline suggestion">
109+
text="Force Accept the Current Amazon Q Suggestion" description="Force accept the current Amazon Q suggestion">
110110
<keyboard-shortcut keymap="Mac OS X" first-keystroke="alt TAB"/>
111111
<keyboard-shortcut keymap="Mac OS X 10.5+" first-keystroke="alt TAB"/>
112112
<keyboard-shortcut keymap="$default" first-keystroke="alt ENTER"/>

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/actions/CodeWhispererActionPromoter.kt

+4-26
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33

44
package software.aws.toolkits.jetbrains.services.codewhisperer.actions
55

6-
import com.intellij.codeInsight.lookup.impl.actions.ChooseItemAction
76
import com.intellij.openapi.actionSystem.ActionPromoter
87
import com.intellij.openapi.actionSystem.AnAction
98
import com.intellij.openapi.actionSystem.DataContext
109
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatus
1110
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatusNew
12-
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
1311

1412
class CodeWhispererActionPromoter : ActionPromoter {
1513
override fun promote(actions: MutableList<out AnAction>, context: DataContext): MutableList<AnAction> {
@@ -27,30 +25,10 @@ class CodeWhispererActionPromoter : ActionPromoter {
2725
return@sortWith 1
2826
}
2927

30-
if (CodeWhispererSettings.getInstance().isQPrioritizedForTabAccept()) {
31-
if (isCodeWhispererAcceptAction(a)) {
32-
return@sortWith -1
33-
} else if (isCodeWhispererAcceptAction(b)) {
34-
return@sortWith 1
35-
}
36-
37-
if (a is ChooseItemAction) {
38-
return@sortWith -1
39-
} else if (b is ChooseItemAction) {
40-
return@sortWith 1
41-
}
42-
} else {
43-
if (a is ChooseItemAction) {
44-
return@sortWith -1
45-
} else if (b is ChooseItemAction) {
46-
return@sortWith 1
47-
}
48-
49-
if (isCodeWhispererAcceptAction(a)) {
50-
return@sortWith -1
51-
} else if (isCodeWhispererAcceptAction(b)) {
52-
return@sortWith 1
53-
}
28+
if (isCodeWhispererAcceptAction(a)) {
29+
return@sortWith -1
30+
} else if (isCodeWhispererAcceptAction(b)) {
31+
return@sortWith 1
5432
}
5533

5634
0

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/CodeWhispererPopupManager.kt

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.services.codewhisperer.popup
55

6+
import com.intellij.codeInsight.hint.ParameterInfoController
67
import com.intellij.codeInsight.lookup.LookupManager
78
import com.intellij.codeInsight.lookup.LookupManagerListener
89
import com.intellij.idea.AppMode
@@ -640,6 +641,10 @@ class CodeWhispererPopupManager {
640641
}
641642
}
642643

644+
fun hasConflictingPopups(editor: Editor): Boolean =
645+
ParameterInfoController.existsWithVisibleHintForEditor(editor, true) ||
646+
LookupManager.getActiveLookup(editor) != null
647+
643648
private fun findNewSelectedIndex(
644649
isReverse: Boolean,
645650
detailContexts: List<DetailContext>,

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

+13
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,12 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
660660
val recommendations = response.completions()
661661
val visualPosition = requestContext.editor.caretModel.visualPosition
662662

663+
if (CodeWhispererPopupManager.getInstance().hasConflictingPopups(requestContext.editor)) {
664+
LOG.debug { "Detect conflicting popup window with CodeWhisperer popup, not showing CodeWhisperer popup" }
665+
sendDiscardedUserDecisionEventForAll(requestContext, responseContext, recommendations)
666+
return null
667+
}
668+
663669
if (caretMovement == CaretMovement.MOVE_BACKWARD) {
664670
LOG.debug { "Caret moved backward, discarding all of the recommendations. Request ID: $requestId" }
665671
sendDiscardedUserDecisionEventForAll(requestContext, responseContext, recommendations)
@@ -851,6 +857,8 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
851857
}
852858

853859
private fun addPopupChildDisposables(project: Project, editor: Editor, popup: JBPopup) {
860+
codeInsightSettingsFacade.disableCodeInsightUntil(popup)
861+
854862
Disposer.register(popup) {
855863
CodeWhispererPopupManager.getInstance().reset()
856864
}
@@ -906,6 +914,11 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
906914
return false
907915
}
908916

917+
if (CodeWhispererPopupManager.getInstance().hasConflictingPopups(editor)) {
918+
LOG.debug { "Find other active popup windows before triggering CodeWhisperer, not invoking service" }
919+
return false
920+
}
921+
909922
if (CodeWhispererInvocationStatus.getInstance().isDisplaySessionActive()) {
910923
LOG.debug { "Find an existing CodeWhisperer popup window before triggering CodeWhisperer, not invoking service" }
911924
return false

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

-12
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import com.intellij.openapi.project.Project
1313
import com.intellij.ui.components.ActionLink
1414
import com.intellij.ui.components.fields.ExpandableTextField
1515
import com.intellij.ui.dsl.builder.bindIntText
16-
import com.intellij.ui.dsl.builder.bindItem
1716
import com.intellij.ui.dsl.builder.bindSelected
1817
import com.intellij.ui.dsl.builder.bindText
1918
import com.intellij.ui.dsl.builder.panel
@@ -98,17 +97,6 @@ class CodeWhispererConfigurable(private val project: Project) :
9897
}.comment(message("aws.settings.codewhisperer.automatic_import_adder.tooltip"))
9998
}
10099

101-
row {
102-
text(message("codewhisperer.inline.settings.tab_priority.prefix"))
103-
val amazonq = message("codewhisperer.inline.settings.tab_priority.choice.amazonq")
104-
val jetbrains = message("codewhisperer.inline.settings.tab_priority.choice.jetbrains")
105-
comboBox(listOf(amazonq, jetbrains)).bindItem(
106-
{ if (CodeWhispererSettings.getInstance().isQPrioritizedForTabAccept()) amazonq else jetbrains },
107-
{ CodeWhispererSettings.getInstance().setQPrioritizedForTabAccept(it == amazonq) }
108-
)
109-
text(message("codewhisperer.inline.settings.tab_priority.suffix"))
110-
}
111-
112100
row {
113101
link("Configure inline suggestion keybindings") { e ->
114102
// TODO: user needs feedback if these are null

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class CodeWhispererConfigurableTest : CodeWhispererTestBase() {
4949
)
5050

5151
val comments = panel.components.filterIsInstance<DslLabel>()
52-
assertThat(comments.size).isEqualTo(10)
52+
assertThat(comments.size).isEqualTo(8)
5353

5454
mockCodeWhispererEnabledStatus(false)
5555
ApplicationManager.getApplication().messageBus.syncPublisher(ToolkitConnectionManagerListener.TOPIC)

0 commit comments

Comments
 (0)