Skip to content

Commit 76e0329

Browse files
committed
feat(go): implement module retrieval functionality in GoBuildSystemProvider #308
1 parent 3190403 commit 76e0329

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

goland/src/main/kotlin/cc/unitmesh/go/provider/GoBuildSystemProvider.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import cc.unitmesh.devti.template.context.DockerfileContext
66
import com.goide.vgo.mod.psi.VgoModuleSpec
77
import com.goide.vgo.mod.psi.VgoRequireDirective
88
import com.goide.vgo.project.VgoDependency
9+
import com.goide.vgo.project.VgoModulesRegistry
10+
import com.intellij.openapi.actionSystem.DataContext
11+
import com.intellij.openapi.module.ModuleManager
12+
import com.intellij.openapi.progress.ProgressManager
913
import com.intellij.openapi.project.Project
14+
import com.intellij.openapi.vfs.VirtualFile
1015
import com.intellij.psi.PsiFile
1116
import com.intellij.psi.util.PsiTreeUtil
1217

@@ -24,6 +29,37 @@ class GoBuildSystemProvider : BuildSystemProvider() {
2429
.toList()
2530
}
2631

32+
33+
fun getAllModules(project: Project): Iterable<DevModuleModel> {
34+
val result = mutableListOf<DevModuleModel>()
35+
36+
ModuleManager.getInstance(project).modules.forEach { module ->
37+
ProgressManager.checkCanceled()
38+
VgoModulesRegistry.getInstance(project).getModules(module).forEach { vgoModule ->
39+
val dependencies = vgoModule.dependencies.mapNotNull { vgoDependency ->
40+
toPackage(vgoDependency)
41+
}.toSet()
42+
43+
val importPath = vgoModule.importPath
44+
val buildFile = vgoModule.root.findChild("go.mod")
45+
val moduleModel = DevModuleModel(importPath, module, buildFile, dependencies, project)
46+
result.add(moduleModel)
47+
}
48+
}
49+
50+
return result
51+
}
52+
53+
data class DevModuleModel(
54+
val id: String,
55+
val platformModule: com.intellij.openapi.module.Module?,
56+
val buildFile: VirtualFile?,
57+
var dependencies: Set<DevPackage>,
58+
val project: Project,
59+
val dataContext: DataContext? = null,
60+
val parentModuleName: String? = null
61+
)
62+
2763
fun getDependencies(modFile: PsiFile): List<VgoModuleSpec> {
2864
return PsiTreeUtil.getChildrenOfTypeAsList(modFile, VgoRequireDirective::class.java)
2965
.flatMap { requireDirective ->

0 commit comments

Comments
 (0)