Skip to content

Commit 0b86d19

Browse files
authored
Revert "fix(amazonq): auto scan use unsaved content (#4527)" to fix memory overflow and slowdowns. (#4669)
* Revert "fix(amazonq): auto scan use unsaved content (#4527)" + Fix for ZipOutputStream using bufferedStream instead of bytes array. This reverts commit 8c109af. * Corrections for codeScanDocumentListener.
1 parent 9d7f306 commit 0b86d19

File tree

3 files changed

+14
-73
lines changed

3 files changed

+14
-73
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/sessionconfig/CodeScanSessionConfig.kt

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package software.aws.toolkits.jetbrains.services.codewhisperer.codescan.sessionconfig
55

66
import com.intellij.openapi.application.runReadAction
7-
import com.intellij.openapi.fileEditor.FileDocumentManager
87
import com.intellij.openapi.project.Project
98
import com.intellij.openapi.project.guessModuleDir
109
import com.intellij.openapi.project.guessProjectDir
@@ -13,7 +12,6 @@ import com.intellij.openapi.roots.ProjectRootManager
1312
import com.intellij.openapi.vcs.changes.ChangeListManager
1413
import com.intellij.openapi.vfs.LocalFileSystem
1514
import com.intellij.openapi.vfs.VirtualFile
16-
import com.intellij.openapi.vfs.VirtualFileManager
1715
import com.intellij.openapi.vfs.isFile
1816
import kotlinx.coroutines.runBlocking
1917
import software.aws.toolkits.core.utils.createTemporaryZipFile
@@ -107,10 +105,7 @@ class CodeScanSessionConfig(
107105
}
108106

109107
// Copy all the included source files to the source zip
110-
val srcZip = when (scope) {
111-
CodeAnalysisScope.PROJECT -> zipProject(payloadMetadata.sourceFiles.map { Path.of(it) })
112-
CodeAnalysisScope.FILE -> zipFile(Path.of(payloadMetadata.sourceFiles.first()))
113-
}
108+
val srcZip = zipFiles(payloadMetadata.sourceFiles.map { Path.of(it) })
114109
val payloadContext = PayloadContext(
115110
payloadMetadata.language,
116111
payloadMetadata.linesScanned,
@@ -151,7 +146,7 @@ class CodeScanSessionConfig(
151146
}
152147
}
153148

154-
private fun zipProject(files: List<Path>): File = createTemporaryZipFile {
149+
private fun zipFiles(files: List<Path>): File = createTemporaryZipFile {
155150
files.forEach { file ->
156151
try {
157152
val relativePath = file.relativeTo(projectRoot.toNioPath())
@@ -163,23 +158,6 @@ class CodeScanSessionConfig(
163158
}
164159
}.toFile()
165160

166-
private fun zipFile(filePath: Path): File = createTemporaryZipFile {
167-
try {
168-
val relativePath = filePath.relativeTo(projectRoot.toNioPath())
169-
val virtualFile = VirtualFileManager.getInstance().findFileByNioPath(filePath)
170-
virtualFile?.let { file ->
171-
val document = runReadAction {
172-
FileDocumentManager.getInstance().getDocument(file)
173-
}
174-
document?.let { doc ->
175-
it.putNextEntry(relativePath.toString(), doc.text.encodeToByteArray())
176-
}
177-
}
178-
} catch (e: Exception) {
179-
cannotFindFile("Zipping error: ${e.message}", filePath.pathString)
180-
}
181-
}.toFile()
182-
183161
fun getProjectPayloadMetadata(): PayloadMetadata {
184162
val files = mutableSetOf<String>()
185163
val traversedDirectories = mutableSetOf<VirtualFile>()

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

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33

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

6-
import com.intellij.openapi.command.WriteCommandAction
76
import com.intellij.openapi.fileEditor.FileEditor
87
import com.intellij.openapi.fileEditor.FileEditorManager
98
import com.intellij.openapi.vfs.VirtualFile
109
import com.intellij.psi.PsiFile
1110
import com.intellij.testFramework.replaceService
12-
import com.intellij.testFramework.runInEdtAndWait
1311
import kotlinx.coroutines.delay
1412
import kotlinx.coroutines.runBlocking
1513
import org.apache.commons.codec.digest.DigestUtils
@@ -28,7 +26,6 @@ import org.mockito.kotlin.doNothing
2826
import org.mockito.kotlin.eq
2927
import org.mockito.kotlin.inOrder
3028
import org.mockito.kotlin.isNull
31-
import org.mockito.kotlin.reset
3229
import org.mockito.kotlin.spy
3330
import org.mockito.kotlin.stub
3431
import org.mockito.kotlin.verify
@@ -44,14 +41,11 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer
4441
import software.aws.toolkits.jetbrains.utils.isInstanceOf
4542
import software.aws.toolkits.jetbrains.utils.rules.PythonCodeInsightTestFixtureRule
4643
import software.aws.toolkits.telemetry.CodewhispererLanguage
47-
import java.io.BufferedInputStream
4844
import java.io.File
4945
import java.io.FileInputStream
5046
import java.util.Base64
51-
import java.util.Scanner
5247
import java.util.UUID
5348
import java.util.zip.ZipFile
54-
import java.util.zip.ZipInputStream
5549
import kotlin.io.path.relativeTo
5650
import kotlin.test.assertNotNull
5751

@@ -94,7 +88,7 @@ class CodeWhispererCodeFileScanTest : CodeWhispererCodeScanTestBase(PythonCodeIn
9488
)
9589
file2 = psifile2.virtualFile.toNioPath().toFile()
9690

97-
psifile = projectRule.fixture.configureByText(
91+
psifile = projectRule.fixture.addFileToProject(
9892
"/test.py",
9993
"""import numpy as np
10094
import from module1 import helper
@@ -392,37 +386,6 @@ class CodeWhispererCodeFileScanTest : CodeWhispererCodeScanTestBase(PythonCodeIn
392386
}
393387
}
394388

395-
@Test
396-
fun `test zipFile uses latest document changes`() {
397-
reset(sessionConfigSpy)
398-
runInEdtAndWait {
399-
WriteCommandAction.runWriteCommandAction(project) {
400-
projectRule.fixture.editor.document.insertString(0, "line inserted at beginning of file\n")
401-
}
402-
}
403-
404-
val payload = sessionConfigSpy.createPayload()
405-
val bufferedInputStream = BufferedInputStream(payload.srcZip.inputStream())
406-
val zis = ZipInputStream(bufferedInputStream)
407-
zis.nextEntry
408-
val scanner = Scanner(zis)
409-
var contents = ""
410-
while (scanner.hasNextLine()) {
411-
contents += scanner.nextLine() + "\n"
412-
}
413-
414-
val expectedContents = """line inserted at beginning of file
415-
import numpy as np
416-
import from module1 import helper
417-
418-
def add(a, b):
419-
return a + b
420-
421-
"""
422-
423-
assertThat(contents).isEqualTo(expectedContents)
424-
}
425-
426389
companion object {
427390
const val TIMEOUT = 10L * TOTAL_MILLIS_IN_SECOND
428391
}

plugins/core/core/src/software/aws/toolkits/core/utils/ZipUtils.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
package software.aws.toolkits.core.utils
55

6+
import java.io.BufferedInputStream
7+
import java.io.ByteArrayInputStream
8+
import java.io.IOException
69
import java.io.InputStream
710
import java.nio.file.Files
811
import java.nio.file.Path
@@ -13,8 +16,14 @@ import java.util.zip.ZipOutputStream
1316
* Adds a new [ZipEntry] with the contents of [file] to the [ZipOutputStream].
1417
*/
1518
fun ZipOutputStream.putNextEntry(entryName: String, file: Path) {
16-
val bytes = Files.readAllBytes(file)
17-
putNextEntry(entryName, bytes)
19+
try {
20+
BufferedInputStream(Files.newInputStream(file)).use { inputStream ->
21+
putNextEntry(entryName, inputStream)
22+
}
23+
} catch (e: IOException) {
24+
val bytes = Files.readAllBytes(file)
25+
putNextEntry(entryName, ByteArrayInputStream(bytes).buffered())
26+
}
1827
}
1928

2029
/**
@@ -26,15 +35,6 @@ fun ZipOutputStream.putNextEntry(entryName: String, inputStream: InputStream) {
2635
this.closeEntry()
2736
}
2837

29-
/**
30-
* Adds a new [ZipEntry] with the contents of [data] to the [ZipOutputStream].
31-
*/
32-
fun ZipOutputStream.putNextEntry(entryName: String, data: ByteArray) {
33-
this.putNextEntry(ZipEntry(entryName))
34-
this.write(data, 0, data.size)
35-
this.closeEntry()
36-
}
37-
3838
/**
3939
* Create a zip file in a temporary location.
4040
*

0 commit comments

Comments
 (0)