@@ -10,14 +10,15 @@ 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.*
15
14
import com.intellij.openapi.roots.ModuleRootModificationUtil
16
15
import com.intellij.openapi.roots.ProjectRootManager
16
+ import com.intellij.openapi.vfs.VirtualFileManager
17
17
import com.intellij.util.application
18
18
import kotlinx.coroutines.GlobalScope
19
19
import kotlinx.coroutines.future.await
20
20
import kotlinx.coroutines.launch
21
+ import java.nio.file.Path
21
22
import java.util.concurrent.CompletableFuture
22
23
23
24
@@ -29,19 +30,26 @@ class GitpodProjectManager(
29
30
configureSdks()
30
31
}
31
32
32
- /* *
33
- * It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34
- */
35
33
private fun configureSdks () {
36
34
if (application.isHeadlessEnvironment) {
37
35
return
38
36
}
39
37
val pendingSdk = CompletableFuture <Sdk >()
40
38
application.invokeLaterOnWriteThread {
39
+ application.invokeAndWait { ProjectJdkTable .getInstance().preconfigure() }
41
40
application.runWriteAction {
41
+ val jdkTable = ProjectJdkTable .getInstance()
42
42
try {
43
- ProjectJdkTable .getInstance().preconfigure()
44
- pendingSdk.complete(ProjectJdkTable .getInstance().allJdks.firstOrNull())
43
+ val javaHome = System .getenv(" JAVA_HOME" )
44
+ if (javaHome != = null && JdkUtil .checkForJdk(javaHome)) {
45
+ val javaHomeVirtualFile = VirtualFileManager .getInstance().findFileByNioPath(Path .of(javaHome))
46
+ val sdk = jdkTable.allJdks.find { sdk ->
47
+ sdk.homeDirectory?.canonicalPath == javaHomeVirtualFile?.canonicalPath
48
+ }
49
+ pendingSdk.complete(sdk ? : jdkTable.allJdks.firstOrNull())
50
+ } else {
51
+ pendingSdk.complete(jdkTable.allJdks.firstOrNull())
52
+ }
45
53
} catch (t: Throwable ) {
46
54
pendingSdk.completeExceptionally(t)
47
55
}
@@ -58,24 +66,23 @@ class GitpodProjectManager(
58
66
configureSdk(sdk)
59
67
}
60
68
}
61
-
62
69
private fun configureSdk (sdk : Sdk ) {
63
70
application.invokeLaterOnWriteThread {
64
71
application.runWriteAction {
65
72
val projectRootManager = ProjectRootManager .getInstance(project)
66
- if (projectRootManager.projectSdk == null ) {
73
+ if (projectRootManager.projectSdk != sdk ) {
67
74
projectRootManager.projectSdk = sdk
68
75
thisLogger().warn(" gitpod: '${project.name} ' project: SDK was auto preconfigured: $sdk " )
69
76
}
70
77
}
71
78
}
72
79
for (module in ModuleManager .getInstance(project).modules) {
73
80
ModuleRootModificationUtil .updateModel(module) { m ->
74
- if (m.sdk == null ) {
81
+ if (m.sdk != sdk ) {
75
82
m.sdk = sdk
76
83
thisLogger().warn(" gitpod: '${module.name} ' module: SDK was auto preconfigured: $sdk " )
77
84
}
78
85
}
79
86
}
80
87
}
81
- }
88
+ }
0 commit comments