@@ -3,10 +3,10 @@ package cc.unitmesh.container.provider
3
3
import cc.unitmesh.devti.provider.context.ChatContextItem
4
4
import cc.unitmesh.devti.provider.context.ChatContextProvider
5
5
import cc.unitmesh.devti.provider.context.ChatCreationContext
6
- import com.github.dockerjava.core.dockerfile.Dockerfile
7
6
import com.intellij.docker.DockerFileSearch
8
7
import com.intellij.docker.dockerFile.DockerPsiFile
9
8
import com.intellij.docker.dockerFile.parser.psi.DockerFileFromCommand
9
+ import com.intellij.openapi.diagnostic.logger
10
10
import com.intellij.openapi.project.Project
11
11
import com.intellij.psi.PsiManager
12
12
import com.intellij.psi.util.PsiTreeUtil
@@ -19,23 +19,32 @@ class DockerContextProvider : ChatContextProvider {
19
19
project : Project ,
20
20
creationContext : ChatCreationContext
21
21
): List <ChatContextItem > {
22
- val dockerFiles = DockerFileSearch .getInstance().getDockerFiles(project).mapNotNull {
23
- PsiManager .getInstance(project).findFile(it) as ? DockerPsiFile
24
- }
22
+ try {
23
+ val dockerFiles = DockerFileSearch .getInstance().getDockerFiles(project).mapNotNull {
24
+ PsiManager .getInstance(project).findFile(it) as ? DockerPsiFile
25
+ }
26
+
27
+ if (dockerFiles.isEmpty()) return emptyList()
25
28
26
- if (dockerFiles.isEmpty()) return emptyList()
29
+ val virtualFile = dockerFiles.firstOrNull()?.virtualFile
30
+ val defaultContent = " This project use Docker to run in server, path: ${virtualFile?.path} "
31
+ val defaultContext = listOf (ChatContextItem (DockerContextProvider ::class , defaultContent))
27
32
28
- val fromCommands = dockerFiles.mapNotNull {
29
- PsiTreeUtil .getChildrenOfType(it, DockerFileFromCommand ::class .java)?.toList()
30
- }.flatten()
33
+ val fromCommands = dockerFiles.mapNotNull {
34
+ PsiTreeUtil .getChildrenOfType(it, DockerFileFromCommand ::class .java)?.toList()
35
+ }.flatten()
31
36
32
- if (fromCommands.isEmpty()) return listOf (
33
- ChatContextItem ( DockerContextProvider :: class , " This project use Docker to run in server " )
34
- )
37
+ if (fromCommands.isEmpty()) {
38
+ return defaultContext
39
+ }
35
40
36
- val text = " This project use Docker to run in server. Here is related info:\n " +
37
- fromCommands.joinToString(" \n " ) { it.text }
41
+ val text = " This project use Docker to run in server. Here is related info:\n " +
42
+ fromCommands.joinToString(" \n " ) { it.text }
38
43
39
- return listOf (ChatContextItem (DockerContextProvider ::class , text))
44
+ return listOf (ChatContextItem (DockerContextProvider ::class , text))
45
+ } catch (e: Exception ) {
46
+ logger<DockerContextProvider >().warn(" Failed to collect Docker context" , e)
47
+ return listOf (ChatContextItem (DockerContextProvider ::class , " This project use Docker." ))
48
+ }
40
49
}
41
50
}
0 commit comments