Skip to content

Commit 9d927d3

Browse files
authored
[CodeWhisperer] CodeCoverageTracker will not be initialized with unsupportedLanguage (#3267)
1 parent 02bf0cc commit 9d927d3

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,31 @@ 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.language.CodeWhispererLanguageManager
1314
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatus
1415
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererCodeCoverageTracker
1516

1617
class CodeWhispererEditorListener : EditorFactoryListener {
1718
override fun editorCreated(event: EditorFactoryEvent) {
1819
val editor = (event.editor as? EditorImpl) ?: return
19-
20-
editor.document.addDocumentListener(
21-
object : DocumentListener {
22-
override fun documentChanged(event: DocumentEvent) {
23-
CodeWhispererInvocationStatus.getInstance().documentChanged()
24-
editor.project?.let { project ->
25-
PsiDocumentManager.getInstance(project).getPsiFile(editor.document)?.codeWhispererLanguage ?. let { language ->
20+
editor.project?.let { project ->
21+
PsiDocumentManager.getInstance(project).getPsiFile(editor.document)?.codeWhispererLanguage ?. let { language ->
22+
// If language is not supported by CodeWhisperer, no action needed
23+
if (!CodeWhispererLanguageManager.getInstance().isLanguageSupported(language.toString())) return
24+
// If language is supported, install document listener for CodeWhisperer service
25+
editor.document.addDocumentListener(
26+
object : DocumentListener {
27+
override fun documentChanged(event: DocumentEvent) {
28+
CodeWhispererInvocationStatus.getInstance().documentChanged()
2629
CodeWhispererCodeCoverageTracker.getInstance(language).apply {
2730
activateTrackerIfNotActive()
2831
documentChanged(event)
2932
}
3033
}
31-
}
32-
}
33-
},
34-
editor.disposable
35-
)
34+
},
35+
editor.disposable
36+
)
37+
}
38+
}
3639
}
3740
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ abstract class CodeWhispererCodeCoverageTracker(
5353
@Synchronized
5454
fun activateTrackerIfNotActive() {
5555
if (!isTelemetryEnabled() || isActive.get()) return
56+
57+
// tracker will only be activated if and only if IsTelemetryEnabled = true && isActive = false
5658
val conn = ApplicationManager.getApplication().messageBus.connect()
5759
conn.subscribe(
5860
CodeWhispererPopupManager.CODEWHISPERER_USER_ACTION_PERFORMED,

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,24 @@ class CodeWhispererTelemetryTest : CodeWhispererTestBase() {
453453
}
454454
}
455455

456+
@Test
457+
fun `test codePercentage tracker will not be initialized with unsupportedLanguage`() {
458+
assertThat(CodeWhispererCodeCoverageTracker.getInstancesMap()).hasSize(0)
459+
val project = projectRule.project
460+
val fixture = projectRule.fixture
461+
val plainTxtFile = fixture.addFileToProject("/notSupported.txt", "")
462+
463+
runInEdtAndWait {
464+
fixture.openFileInEditor(plainTxtFile.virtualFile)
465+
WriteCommandAction.runWriteCommandAction(project) {
466+
fixture.editor.appendString("random txt string")
467+
}
468+
}
469+
470+
// document changes in unsupported files will not trigger initialization of tracker
471+
assertThat(CodeWhispererCodeCoverageTracker.getInstancesMap()).hasSize(0)
472+
}
473+
456474
@Test
457475
fun `test codePercentage metric is correct - 1`() {
458476
val project = projectRule.project

0 commit comments

Comments
 (0)