Skip to content

Commit a0a4f8a

Browse files
authored
[CodeWhisperer] %Tracker will not be activated by users without enabling CodeWhisperer (#3276)
1 parent 9f76d55 commit a0a4f8a

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorListener.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.intellij.openapi.editor.event.EditorFactoryListener
1010
import com.intellij.openapi.editor.impl.EditorImpl
1111
import com.intellij.psi.PsiDocumentManager
1212
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorUtil.codeWhispererLanguage
13+
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
1314
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererLanguageManager
1415
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatus
1516
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererCodeCoverageTracker
@@ -25,6 +26,7 @@ class CodeWhispererEditorListener : EditorFactoryListener {
2526
editor.document.addDocumentListener(
2627
object : DocumentListener {
2728
override fun documentChanged(event: DocumentEvent) {
29+
if (!CodeWhispererExplorerActionManager.getInstance().hasAcceptedTermsOfService()) return
2830
CodeWhispererInvocationStatus.getInstance().documentChanged()
2931
CodeWhispererCodeCoverageTracker.getInstance(language).apply {
3032
activateTrackerIfNotActive()

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererCodeCoverageTracker.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ abstract class CodeWhispererCodeCoverageTracker(
6060

6161
@Synchronized
6262
fun activateTrackerIfNotActive() {
63-
if (!isTelemetryEnabled() || isActive.get()) return
64-
6563
// tracker will only be activated if and only if IsTelemetryEnabled = true && isActive = false
64+
if (!isTelemetryEnabled() || isTrackerActive()) return
65+
6666
val conn = ApplicationManager.getApplication().messageBus.connect()
6767
conn.subscribe(
6868
CodeWhispererPopupManager.CODEWHISPERER_USER_ACTION_PERFORMED,
@@ -82,6 +82,8 @@ abstract class CodeWhispererCodeCoverageTracker(
8282
scheduleCodeWhispererCodeCoverageTracker()
8383
}
8484

85+
fun isTrackerActive() = isActive.get()
86+
8587
internal fun documentChanged(event: DocumentEvent) {
8688
// When open a file for the first time, IDE will also emit DocumentEvent for loading with `isWholeTextReplaced = true`
8789
// Added this condition to filter out those events

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererCodeCoverageTrackerTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import software.aws.toolkits.jetbrains.core.MockClientManagerRule
3939
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.pythonFileName
4040
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.pythonResponse
4141
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.pythonTestLeftContext
42+
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
4243
import software.aws.toolkits.jetbrains.services.codewhisperer.model.DetailContext
4344
import software.aws.toolkits.jetbrains.services.codewhisperer.model.FileContextInfo
4445
import software.aws.toolkits.jetbrains.services.codewhisperer.model.InvocationContext
@@ -88,6 +89,7 @@ class CodeWhispererCodeCoverageTrackerTest {
8889
private lateinit var fixture: CodeInsightTestFixture
8990
private lateinit var telemetryServiceSpy: TelemetryService
9091
private lateinit var batcher: TelemetryBatcher
92+
private lateinit var exploreActionManagerMock: CodeWhispererExplorerActionManager
9193

9294
private lateinit var invocationContext: InvocationContext
9395
private lateinit var sessionContext: SessionContext
@@ -104,7 +106,11 @@ class CodeWhispererCodeCoverageTrackerTest {
104106

105107
batcher = mock()
106108
telemetryServiceSpy = spy(TestTelemetryService(batcher = batcher))
109+
exploreActionManagerMock = mock {
110+
on { hasAcceptedTermsOfService() } doReturn true
111+
}
107112

113+
ApplicationManager.getApplication().replaceService(CodeWhispererExplorerActionManager::class.java, exploreActionManagerMock, disposableRule.disposable)
108114
ApplicationManager.getApplication().replaceService(TelemetryService::class.java, telemetryServiceSpy, disposableRule.disposable)
109115
project.replaceService(CodeWhispererCodeReferenceManager::class.java, mock(), disposableRule.disposable)
110116

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTelemetryTest.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.mockito.kotlin.atLeast
2323
import org.mockito.kotlin.atLeastOnce
2424
import org.mockito.kotlin.doAnswer
2525
import org.mockito.kotlin.doNothing
26+
import org.mockito.kotlin.doReturn
2627
import org.mockito.kotlin.mock
2728
import org.mockito.kotlin.never
2829
import org.mockito.kotlin.spy
@@ -47,6 +48,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestU
4748
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.testRequestIdForCodeWhispererException
4849
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.testSessionId
4950
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorManager
51+
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
5052
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager.Companion.ACTION_PAUSE_CODEWHISPERER
5153
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager.Companion.ACTION_RESUME_CODEWHISPERER
5254
import software.aws.toolkits.jetbrains.services.codewhisperer.model.InvocationContext
@@ -85,6 +87,7 @@ class CodeWhispererTelemetryTest : CodeWhispererTestBase() {
8587
private lateinit var batcher: TelemetryBatcher
8688
private lateinit var telemetryServiceSpy: TelemetryService
8789
private var isTelemetryEnabledDefault: Boolean = false
90+
8891
@Before
8992
override fun setUp() {
9093
super.setUp()
@@ -454,6 +457,24 @@ class CodeWhispererTelemetryTest : CodeWhispererTestBase() {
454457
}
455458
}
456459

460+
@Test
461+
fun `test codePercentage tracker will not be activated if CWSPR terms of service is not accepted`() {
462+
val exploreManagerMock = mock<CodeWhispererExplorerActionManager> {
463+
on { hasAcceptedTermsOfService() } doReturn false
464+
}
465+
ApplicationManager.getApplication().replaceService(CodeWhispererExplorerActionManager::class.java, exploreManagerMock, disposableRule.disposable)
466+
val project = projectRule.project
467+
val fixture = projectRule.fixture
468+
val tracker = CodeWhispererCodeCoverageTracker.getInstance(CodewhispererLanguage.Python)
469+
assertThat(tracker.isTrackerActive()).isFalse
470+
runInEdtAndWait {
471+
WriteCommandAction.runWriteCommandAction(project) {
472+
fixture.editor.appendString("arbitrary string to trigger documentChanged")
473+
}
474+
}
475+
assertThat(tracker.isTrackerActive()).isFalse
476+
}
477+
457478
@Test
458479
fun `test codePercentage tracker will not be initialized with unsupportedLanguage`() {
459480
assertThat(CodeWhispererCodeCoverageTracker.getInstancesMap()).hasSize(0)

0 commit comments

Comments
 (0)