Skip to content

Commit 7c4f563

Browse files
Merge main into feature/dev-execution
2 parents 9030abf + 7087f28 commit 7c4f563

File tree

3 files changed

+146
-31
lines changed

3 files changed

+146
-31
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codetest/sessionconfig/CodeTestSessionConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.codetest.noFileOpe
2929
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
3030
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererUnknownLanguage
3131
import software.aws.toolkits.jetbrains.services.codewhisperer.language.programmingLanguage
32+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
3233
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.CODE_SCAN_CREATE_PAYLOAD_TIMEOUT_IN_SECONDS
3334
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.DEFAULT_CODE_SCAN_TIMEOUT_IN_SECONDS
3435
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.DEFAULT_PAYLOAD_LIMIT_IN_BYTES
@@ -217,7 +218,7 @@ class CodeTestSessionConfig(
217218
for (module in project.modules) {
218219
val changeListManager = ChangeListManager.getInstance(module.project)
219220
module.guessModuleDir()?.let { moduleDir ->
220-
val gitIgnoreFilteringUtil = GitIgnoreFilteringUtil(moduleDir)
221+
val gitIgnoreFilteringUtil = GitIgnoreFilteringUtil(moduleDir, CodeWhispererConstants.FeatureName.TEST_GENERATION)
221222
stack.push(moduleDir)
222223
while (stack.isNotEmpty()) {
223224
val current = stack.pop()

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/GitIgnoreFilteringUtil.kt

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,58 @@ import kotlinx.coroutines.async
99
import kotlinx.coroutines.withContext
1010
import kotlin.coroutines.coroutineContext
1111

12-
class GitIgnoreFilteringUtil(private val moduleDir: VirtualFile) {
12+
class GitIgnoreFilteringUtil(
13+
private val moduleDir: VirtualFile,
14+
private val useCase: CodeWhispererConstants.FeatureName? = null,
15+
) {
1316
private var ignorePatternsWithGitIgnore = emptyList<Regex>()
14-
private val additionalGitIgnoreRules = setOf(
15-
".aws-sam",
16-
".gem",
17-
".git",
18-
".gitignore",
19-
".gradle",
20-
".hg",
21-
".idea",
22-
".project",
23-
".rvm",
24-
".svn",
25-
"*.zip",
26-
"*.bin",
27-
"*.png",
28-
"*.jpg",
29-
"*.svg",
30-
"*.pyc",
31-
"license.txt",
32-
"License.txt",
33-
"LICENSE.txt",
34-
"license.md",
35-
"License.md",
36-
"LICENSE.md",
37-
"node_modules",
38-
"build",
39-
"dist",
40-
"annotation-generated-src",
41-
"annotation-generated-tst"
42-
)
17+
private val additionalGitIgnoreRules = buildSet {
18+
addAll(
19+
setOf(
20+
".aws-sam",
21+
".gem",
22+
".git",
23+
".gitignore",
24+
".gradle",
25+
".hg",
26+
".idea",
27+
".project",
28+
".rvm",
29+
".svn",
30+
"*.zip",
31+
"*.bin",
32+
"*.png",
33+
"*.jpg",
34+
"*.svg",
35+
"*.pyc",
36+
"license.txt",
37+
"License.txt",
38+
"LICENSE.txt",
39+
"license.md",
40+
"License.md",
41+
"LICENSE.md",
42+
"node_modules",
43+
"build",
44+
"dist",
45+
"annotation-generated-src",
46+
"annotation-generated-tst"
47+
)
48+
)
49+
if (useCase == CodeWhispererConstants.FeatureName.TEST_GENERATION) {
50+
addAll(
51+
setOf(
52+
"env",
53+
"release-info",
54+
"*.jar",
55+
"*.exe",
56+
"*.a",
57+
"*.map",
58+
"*.graph",
59+
"*.so"
60+
)
61+
)
62+
}
63+
}
4364

4465
init {
4566
ignorePatternsWithGitIgnore = try {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
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.util
5+
6+
import com.intellij.openapi.vfs.VirtualFile
7+
import org.assertj.core.api.Assertions.assertThat
8+
import org.junit.Before
9+
import org.junit.Test
10+
import org.mockito.Mock
11+
import org.mockito.MockitoAnnotations
12+
import org.mockito.kotlin.whenever
13+
14+
class GitIgnoreFilteringUtilTest {
15+
16+
@Mock
17+
private lateinit var mockModuleDir: VirtualFile
18+
19+
private lateinit var gitIgnoreFilteringUtil: GitIgnoreFilteringUtil
20+
21+
@Before
22+
fun setUp() {
23+
MockitoAnnotations.openMocks(this)
24+
gitIgnoreFilteringUtil = GitIgnoreFilteringUtil(mockModuleDir)
25+
}
26+
27+
@Test
28+
fun `test default gitignore patterns are initialized`() {
29+
val defaultPatterns = listOf(
30+
".aws-sam",
31+
".gem",
32+
".git",
33+
".gitignore",
34+
".gradle",
35+
".hg",
36+
".idea",
37+
".project",
38+
".rvm",
39+
".svn",
40+
"*.zip",
41+
"*.bin",
42+
"*.png",
43+
"*.jpg",
44+
"*.svg",
45+
"*.pyc",
46+
"license.txt",
47+
"License.txt",
48+
"LICENSE.txt",
49+
"license.md",
50+
"License.md",
51+
"LICENSE.md",
52+
"node_modules",
53+
"build",
54+
"dist",
55+
"annotation-generated-src",
56+
"annotation-generated-tst"
57+
)
58+
59+
// Access the private field using reflection for testing
60+
val field = GitIgnoreFilteringUtil::class.java.getDeclaredField("additionalGitIgnoreRules")
61+
field.isAccessible = true
62+
val actualPatterns = field.get(gitIgnoreFilteringUtil) as Set<String>
63+
64+
assertThat(defaultPatterns.toSet()).isEqualTo(actualPatterns)
65+
}
66+
67+
@Test
68+
fun `test initialization with different useCase`() {
69+
val utilWithUseCase = GitIgnoreFilteringUtil(
70+
mockModuleDir,
71+
CodeWhispererConstants.FeatureName.CODE_REVIEW
72+
)
73+
assertThat(utilWithUseCase).isNotNull
74+
}
75+
76+
@Test
77+
fun `test initialization with null useCase`() {
78+
val utilWithNullUseCase = GitIgnoreFilteringUtil(mockModuleDir, null)
79+
assertThat(utilWithNullUseCase).isNotNull
80+
}
81+
82+
@Test
83+
fun `test module directory is properly set`() {
84+
whenever(mockModuleDir.path).thenReturn("/test/path")
85+
86+
val field = GitIgnoreFilteringUtil::class.java.getDeclaredField("moduleDir")
87+
field.isAccessible = true
88+
val actualModuleDir = field.get(gitIgnoreFilteringUtil) as VirtualFile
89+
90+
assertThat(mockModuleDir).isEqualTo(actualModuleDir)
91+
assertThat("/test/path").isEqualTo(actualModuleDir.path)
92+
}
93+
}

0 commit comments

Comments
 (0)