@@ -12,15 +12,19 @@ import com.intellij.openapi.project.ModuleListener
12
12
import com.intellij.openapi.project.Project
13
13
import com.intellij.openapi.projectRoots.ProjectJdkTable
14
14
import com.intellij.openapi.projectRoots.Sdk
15
+ import com.intellij.openapi.projectRoots.SdkType
16
+ import com.intellij.openapi.projectRoots.impl.JavaHomeFinder
17
+ import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
15
18
import com.intellij.openapi.roots.ModuleRootModificationUtil
16
19
import com.intellij.openapi.roots.ProjectRootManager
20
+ import com.intellij.openapi.util.registry.Registry
17
21
import com.intellij.util.application
18
22
import kotlinx.coroutines.GlobalScope
19
23
import kotlinx.coroutines.future.await
20
24
import kotlinx.coroutines.launch
21
25
import java.util.concurrent.CompletableFuture
22
26
23
-
27
+ @Suppress( " UnstableApiUsage " , " OPT_IN_USAGE " )
24
28
class GitpodProjectManager (
25
29
private val project : Project
26
30
) {
@@ -33,15 +37,30 @@ class GitpodProjectManager(
33
37
* It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34
38
*/
35
39
private fun configureSdks () {
36
- if (application.isHeadlessEnvironment) {
40
+ if (application.isHeadlessEnvironment || Registry .get( " gitpod.autoJdk.disabled " ).asBoolean() ) {
37
41
return
38
42
}
39
43
val pendingSdk = CompletableFuture <Sdk >()
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
+ jdkTable.preconfigure()
49
+ val preconfiguredJdk = ProjectRootManager .getInstance(project).projectSdk
50
+ val preferredJdkHomePath = JavaHomeFinder .getFinder().findExistingJdks().firstOrNull()
51
+ pendingSdk.complete(
52
+ when {
53
+ preconfiguredJdk != null -> preconfiguredJdk
54
+ preferredJdkHomePath != null ->
55
+ jdkTable.allJdks.find { sdk -> sdk.homePath == preferredJdkHomePath }
56
+ ? : SdkConfigurationUtil .createAndAddSDK(
57
+ preferredJdkHomePath,
58
+ SdkType .findByName(jdkTable.defaultSdkType.name)!!
59
+ )
60
+
61
+ else -> jdkTable.allJdks.firstOrNull()
62
+ }
63
+ )
45
64
} catch (t: Throwable ) {
46
65
pendingSdk.completeExceptionally(t)
47
66
}
@@ -78,4 +97,4 @@ class GitpodProjectManager(
78
97
}
79
98
}
80
99
}
81
- }
100
+ }
0 commit comments