@@ -10,14 +10,17 @@ 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.JdkUtil
13
14
import com.intellij.openapi.projectRoots.ProjectJdkTable
14
15
import com.intellij.openapi.projectRoots.Sdk
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
@@ -29,19 +32,28 @@ class GitpodProjectManager(
29
32
configureSdks()
30
33
}
31
34
32
- /* *
33
- * It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34
- */
35
35
private fun configureSdks () {
36
36
if (application.isHeadlessEnvironment) {
37
37
return
38
38
}
39
39
val pendingSdk = CompletableFuture <Sdk >()
40
40
application.invokeLaterOnWriteThread {
41
41
application.runWriteAction {
42
+ val jdkTable = ProjectJdkTable .getInstance()
43
+ if (jdkTable.allJdks.isEmpty()) {
44
+ jdkTable.preconfigure()
45
+ }
42
46
try {
43
- ProjectJdkTable .getInstance().preconfigure()
44
- pendingSdk.complete(ProjectJdkTable .getInstance().allJdks.firstOrNull())
47
+ val javaHome = System .getenv(" JAVA_HOME" )
48
+ if (javaHome != = null && JdkUtil .checkForJdk(javaHome)) {
49
+ val javaHomeVirtualFile = VirtualFileManager .getInstance().findFileByNioPath(Path .of(javaHome))
50
+ val sdk = jdkTable.getSdksOfType(jdkTable.defaultSdkType).find { sdk ->
51
+ sdk.homeDirectory?.canonicalPath == javaHomeVirtualFile?.canonicalPath
52
+ }
53
+ pendingSdk.complete(sdk ? : jdkTable.allJdks.firstOrNull())
54
+ } else {
55
+ pendingSdk.complete(jdkTable.allJdks.firstOrNull())
56
+ }
45
57
} catch (t: Throwable ) {
46
58
pendingSdk.completeExceptionally(t)
47
59
}
@@ -58,24 +70,24 @@ class GitpodProjectManager(
58
70
configureSdk(sdk)
59
71
}
60
72
}
61
-
73
+ // <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="zulu-11" project-jdk-type="JavaSDK" />
62
74
private fun configureSdk (sdk : Sdk ) {
63
75
application.invokeLaterOnWriteThread {
64
76
application.runWriteAction {
65
77
val projectRootManager = ProjectRootManager .getInstance(project)
66
- if (projectRootManager.projectSdk == null ) {
78
+ if (projectRootManager.projectSdk != sdk ) {
67
79
projectRootManager.projectSdk = sdk
68
80
thisLogger().warn(" gitpod: '${project.name} ' project: SDK was auto preconfigured: $sdk " )
69
81
}
70
82
}
71
83
}
72
84
for (module in ModuleManager .getInstance(project).modules) {
73
85
ModuleRootModificationUtil .updateModel(module) { m ->
74
- if (m.sdk == null ) {
86
+ if (m.sdk != sdk ) {
75
87
m.sdk = sdk
76
88
thisLogger().warn(" gitpod: '${module.name} ' module: SDK was auto preconfigured: $sdk " )
77
89
}
78
90
}
79
91
}
80
92
}
81
- }
93
+ }
0 commit comments