1
1
package cc.unitmesh.idea.provider
2
2
3
3
import cc.unitmesh.devti.provider.BuildSystemProvider
4
+ import cc.unitmesh.devti.provider.DevPackage
4
5
import cc.unitmesh.devti.template.context.DockerfileContext
5
6
import cc.unitmesh.idea.detectLanguageLevel
7
+ import com.intellij.openapi.externalSystem.model.ProjectKeys
8
+ import com.intellij.openapi.externalSystem.model.project.LibraryDependencyData
6
9
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager
7
10
import com.intellij.openapi.externalSystem.service.ui.completion.TextCompletionInfo
11
+ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
12
+ import com.intellij.openapi.module.ModuleUtilCore
13
+ import com.intellij.openapi.progress.ProgressManager
8
14
import com.intellij.openapi.project.Project
9
15
import com.intellij.openapi.project.guessProjectDir
16
+ import com.intellij.psi.PsiFile
17
+ import org.jetbrains.idea.maven.project.MavenProjectsManager
18
+ import org.jetbrains.plugins.gradle.execution.build.CachedModuleDataFinder
10
19
import org.jetbrains.plugins.gradle.service.project.GradleTasksIndices
11
20
import org.jetbrains.plugins.gradle.util.GradleConstants
12
21
@@ -18,6 +27,8 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
18
27
var taskString = " "
19
28
20
29
val gradleInfo = projectDataManager.getExternalProjectsData(project, GradleConstants .SYSTEM_ID )
30
+ val mavenProjects = MavenProjectsManager .getInstance(project).projects
31
+
21
32
if (gradleInfo.isNotEmpty()) {
22
33
buildToolName = " Gradle"
23
34
val indices = GradleTasksIndices .getInstance(project)
@@ -29,8 +40,10 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
29
40
.sortedWith(Comparator .comparing({ it.text }, GRADLE_COMPLETION_COMPARATOR ))
30
41
31
42
taskString = tasks.joinToString(" " ) { it.text }
32
- } else {
43
+ } else if (mavenProjects.isNotEmpty()) {
33
44
buildToolName = " Maven"
45
+ } else {
46
+ return null
34
47
}
35
48
36
49
val javaVersion = detectLanguageLevel(project, null )
@@ -47,8 +60,46 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
47
60
)
48
61
}
49
62
50
- companion object {
63
+ override fun collectDependencies (
64
+ project : Project ,
65
+ psiFile : PsiFile
66
+ ): List <DevPackage > {
67
+ val mavenProject = MavenProjectsManager .getInstance(project).findProject(psiFile.virtualFile)
68
+ var results = mutableListOf<DevPackage >()
69
+ if (mavenProject != null ) {
70
+ results + = mavenProject.dependencies
71
+ .mapNotNull { mavenArtifact ->
72
+ ProgressManager .checkCanceled()
73
+ val name: String = mavenArtifact.artifactId ? : return @mapNotNull null
74
+ val version: String = mavenArtifact.version ? : return @mapNotNull null
75
+
76
+ DevPackage (" maven" , name = name, version = version)
77
+ }
78
+ }
79
+
80
+ // / collect Gradle dependencies
81
+ ModuleUtilCore .findModuleForFile(psiFile)?.also {
82
+ val moduleData = CachedModuleDataFinder .findMainModuleData(it)
83
+ val libDepData = ExternalSystemApiUtil .findAllRecursively<LibraryDependencyData ?>(
84
+ moduleData,
85
+ ProjectKeys .LIBRARY_DEPENDENCY
86
+ )
51
87
88
+ results + = libDepData.mapNotNull { node ->
89
+ val target = node.data.target
90
+ val namespace = target.groupId ? : return @mapNotNull null
91
+ val name = target.artifactId ? : return @mapNotNull null
92
+ val version = target.version ? : return @mapNotNull null
93
+
94
+ DevPackage (" maven" , namespace, name, version)
95
+ }
96
+ }
97
+
98
+
99
+ return results
100
+ }
101
+
102
+ companion object {
52
103
val GRADLE_COMPLETION_COMPARATOR = Comparator <String > { o1, o2 ->
53
104
when {
54
105
o1.startsWith(" --" ) && o2.startsWith(" --" ) -> o1.compareTo(o2)
0 commit comments