Skip to content

Commit 03d90c2

Browse files
authored
codewhisperer: enable UTG(Unit test generator) for java/python (#3755)
1 parent 77d6f04 commit 03d90c2

File tree

6 files changed

+36
-8
lines changed

6 files changed

+36
-8
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" : "CodeWhisperer: Improve suggestion quality with enhanced file context fetching"
4+
}

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererJava.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class CodeWhispererJava private constructor() : CodeWhispererProgrammingLanguage
2323

2424
override fun isSupplementalContextSupported() = true
2525

26+
override fun isUTGSupported() = true
27+
2628
companion object {
2729
const val ID = "java"
2830

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererPython.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class CodeWhispererPython private constructor() : CodeWhispererProgrammingLangua
2121

2222
override fun isAllClassifier(): Boolean = true
2323

24+
override fun isUTGSupported() = true
25+
2426
companion object {
2527
const val ID = "python"
2628

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Recommendation
3737
import software.amazon.awssdk.services.codewhispererruntime.model.SupplementalContext
3838
import software.amazon.awssdk.services.codewhispererruntime.model.ThrottlingException
3939
import software.aws.toolkits.core.utils.debug
40-
import software.aws.toolkits.core.utils.error
4140
import software.aws.toolkits.core.utils.getLogger
4241
import software.aws.toolkits.core.utils.info
4342
import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope
@@ -512,7 +511,7 @@ class CodeWhispererService {
512511
// 2. supplemental context
513512
val startFetchingTimestamp = System.currentTimeMillis()
514513
val isTstFile = FileContextProvider.getInstance(project).isTestFile(psiFile)
515-
val supplementalContext = if (CodeWhispererUserGroupSettings.getInstance().getUserGroup() == CodeWhispererUserGroup.CrossFile && !isTstFile) {
514+
val supplementalContext = if (CodeWhispererUserGroupSettings.getInstance().getUserGroup() == CodeWhispererUserGroup.CrossFile) {
516515
runBlocking {
517516
try {
518517
withTimeout(SUPPLEMENTAL_CONTEXT_TIMEOUT) {
@@ -530,13 +529,18 @@ class CodeWhispererService {
530529
targetFileName = fileContext.filename
531530
)
532531
} else {
533-
LOG.error(e) { "Run into unexpected error when fetching supplemental context" }
532+
LOG.debug { "Run into unexpected error when fetching supplemental context, error: ${e.message}" }
534533
null
535534
}
536535
}
537536
}
538537
} else {
539-
null
538+
SupplementalContextInfo(
539+
isUtg = isTstFile,
540+
contents = emptyList(),
541+
latency = 0,
542+
targetFileName = fileContext.filename
543+
)
540544
}
541545

542546
// 3. caret position

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33

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

6+
import com.intellij.openapi.application.ApplicationManager
67
import com.intellij.openapi.application.runReadAction
78
import com.intellij.openapi.project.Project
89
import com.intellij.openapi.vfs.VirtualFile
910
import com.intellij.psi.PsiFile
11+
import com.intellij.testFramework.DisposableRule
1012
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
13+
import com.intellij.testFramework.replaceService
1114
import com.intellij.testFramework.runInEdtAndGet
1215
import com.intellij.testFramework.runInEdtAndWait
1316
import kotlinx.coroutines.runBlocking
@@ -17,12 +20,16 @@ import org.junit.Ignore
1720
import org.junit.Rule
1821
import org.junit.Test
1922
import org.mockito.kotlin.any
23+
import org.mockito.kotlin.doReturn
24+
import org.mockito.kotlin.mock
2025
import org.mockito.kotlin.spy
2126
import org.mockito.kotlin.times
2227
import org.mockito.kotlin.verify
2328
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCsharp
2429
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJava
2530
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererKotlin
31+
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererUserGroup
32+
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererUserGroupSettings
2633
import software.aws.toolkits.jetbrains.services.codewhisperer.util.DefaultCodeWhispererFileContextProvider
2734
import software.aws.toolkits.jetbrains.services.codewhisperer.util.FileContextProvider
2835
import software.aws.toolkits.jetbrains.utils.rules.HeavyJavaCodeInsightTestFixtureRule
@@ -35,6 +42,10 @@ class CodeWhispererFileContextProviderTest {
3542
@Rule
3643
val projectRule = HeavyJavaCodeInsightTestFixtureRule()
3744

45+
@JvmField
46+
@Rule
47+
val disposableRule = DisposableRule()
48+
3849
lateinit var sut: DefaultCodeWhispererFileContextProvider
3950

4051
lateinit var fixture: JavaCodeInsightTestFixture
@@ -213,10 +224,13 @@ class CodeWhispererFileContextProviderTest {
213224
* - MainTest.java
214225
*
215226
*/
216-
// TODO: unignore this case once we configure isUtgSupport = true
217-
@Ignore
218227
@Test
219228
fun `extractSupplementalFileContext from tst file should extract focal file`() {
229+
ApplicationManager.getApplication().replaceService(
230+
CodeWhispererUserGroupSettings::class.java,
231+
mock { on { getUserGroup() } doReturn CodeWhispererUserGroup.CrossFile },
232+
disposableRule.disposable
233+
)
220234
val module = fixture.addModule("main")
221235
fixture.addClass(module, JAVA_MAIN)
222236

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class CodeWhispererServiceTest {
8686
}
8787

8888
@Test
89-
fun `getRequestContext - cross file context should be null for non-cross-file user group`() {
89+
fun `getRequestContext - cross file context should be empty for non-cross-file user group`() {
9090
whenever(userGroupSetting.getUserGroup()).thenReturn(CodeWhispererUserGroup.Control)
9191
val file = projectRule.fixture.addFileToProject("main.java", "public class Main {}")
9292

@@ -102,6 +102,8 @@ class CodeWhispererServiceTest {
102102
LatencyContext()
103103
)
104104

105-
assertThat(actual.supplementalContext).isNull()
105+
assertThat(actual.supplementalContext).isNotNull
106+
assertThat(actual.supplementalContext?.contents).isEmpty()
107+
assertThat(actual.supplementalContext?.contentLength).isEqualTo(0)
106108
}
107109
}

0 commit comments

Comments
 (0)