@@ -10,17 +10,21 @@ import com.intellij.openapi.module.Module
10
10
import com.intellij.openapi.module.ModuleManager
11
11
import com.intellij.openapi.project.ModuleListener
12
12
import com.intellij.openapi.project.Project
13
- import com.intellij.openapi.projectRoots.ProjectJdkTable
14
- import com.intellij.openapi.projectRoots.Sdk
13
+ import com.intellij.openapi.projectRoots.*
14
+ import com.intellij.openapi.projectRoots.impl.JavaHomeFinder
15
+ import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
15
16
import com.intellij.openapi.roots.ModuleRootModificationUtil
16
17
import com.intellij.openapi.roots.ProjectRootManager
18
+ import com.intellij.openapi.vfs.VirtualFileManager
17
19
import com.intellij.util.application
18
20
import kotlinx.coroutines.GlobalScope
19
21
import kotlinx.coroutines.future.await
20
22
import kotlinx.coroutines.launch
23
+ import java.nio.file.Path
21
24
import java.util.concurrent.CompletableFuture
22
25
23
26
27
+ @Suppress(" UnstableApiUsage" , " OPT_IN_USAGE" )
24
28
class GitpodProjectManager (
25
29
private val project : Project
26
30
) {
@@ -40,8 +44,34 @@ class GitpodProjectManager(
40
44
application.invokeLaterOnWriteThread {
41
45
application.runWriteAction {
42
46
try {
43
- ProjectJdkTable .getInstance().preconfigure()
44
- pendingSdk.complete(ProjectJdkTable .getInstance().allJdks.firstOrNull())
47
+ val jdkTable = ProjectJdkTable .getInstance()
48
+
49
+ JavaHomeFinder .getFinder().findExistingJdks().forEach { javaHome ->
50
+ val sdkType = SdkType .findByName(jdkTable.defaultSdkType.name)
51
+
52
+ if (javaHome != = null && sdkType != null && JdkUtil .checkForJdk(javaHome)) {
53
+ val javaHomeVirtualFile = VirtualFileManager
54
+ .getInstance()
55
+ .findFileByNioPath(Path .of(javaHome))
56
+
57
+ if (javaHomeVirtualFile != null ) {
58
+ val sdk = SdkConfigurationUtil .setupSdk(
59
+ jdkTable.allJdks,
60
+ javaHomeVirtualFile,
61
+ sdkType,
62
+ false ,
63
+ null ,
64
+ null
65
+ )
66
+
67
+ if (sdk != null && jdkTable.findJdk(sdk.name) == null ) {
68
+ jdkTable.addJdk(sdk)
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ pendingSdk.complete(jdkTable.allJdks.firstOrNull())
45
75
} catch (t: Throwable ) {
46
76
pendingSdk.completeExceptionally(t)
47
77
}
@@ -58,24 +88,23 @@ class GitpodProjectManager(
58
88
configureSdk(sdk)
59
89
}
60
90
}
61
-
62
91
private fun configureSdk (sdk : Sdk ) {
63
92
application.invokeLaterOnWriteThread {
64
93
application.runWriteAction {
65
94
val projectRootManager = ProjectRootManager .getInstance(project)
66
- if (projectRootManager.projectSdk == null ) {
95
+ if (projectRootManager.projectSdk != sdk ) {
67
96
projectRootManager.projectSdk = sdk
68
97
thisLogger().warn(" gitpod: '${project.name} ' project: SDK was auto preconfigured: $sdk " )
69
98
}
70
99
}
71
100
}
72
101
for (module in ModuleManager .getInstance(project).modules) {
73
102
ModuleRootModificationUtil .updateModel(module) { m ->
74
- if (m.sdk == null ) {
103
+ if (m.sdk != sdk ) {
75
104
m.sdk = sdk
76
105
thisLogger().warn(" gitpod: '${module.name} ' module: SDK was auto preconfigured: $sdk " )
77
106
}
78
107
}
79
108
}
80
109
}
81
- }
110
+ }
0 commit comments