Skip to content

Commit b90afde

Browse files
committed
Use Java SDK defined on JAVA_HOME by default on JetBrains IDEs
1 parent 47c64d4 commit b90afde

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodProjectManager.kt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ import com.intellij.openapi.module.Module
1010
import com.intellij.openapi.module.ModuleManager
1111
import com.intellij.openapi.project.ModuleListener
1212
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.*
1514
import com.intellij.openapi.roots.ModuleRootModificationUtil
1615
import com.intellij.openapi.roots.ProjectRootManager
16+
import com.intellij.openapi.vfs.VirtualFileManager
1717
import com.intellij.util.application
1818
import kotlinx.coroutines.GlobalScope
1919
import kotlinx.coroutines.future.await
2020
import kotlinx.coroutines.launch
21+
import java.nio.file.Path
2122
import java.util.concurrent.CompletableFuture
2223

2324

@@ -29,19 +30,26 @@ class GitpodProjectManager(
2930
configureSdks()
3031
}
3132

32-
/**
33-
* It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34-
*/
3533
private fun configureSdks() {
3634
if (application.isHeadlessEnvironment) {
3735
return
3836
}
3937
val pendingSdk = CompletableFuture<Sdk>()
4038
application.invokeLaterOnWriteThread {
39+
application.invokeAndWait { ProjectJdkTable.getInstance().preconfigure() }
4140
application.runWriteAction {
41+
val jdkTable = ProjectJdkTable.getInstance()
4242
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+
}
4553
} catch (t: Throwable) {
4654
pendingSdk.completeExceptionally(t)
4755
}
@@ -58,24 +66,23 @@ class GitpodProjectManager(
5866
configureSdk(sdk)
5967
}
6068
}
61-
6269
private fun configureSdk(sdk: Sdk) {
6370
application.invokeLaterOnWriteThread {
6471
application.runWriteAction {
6572
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
73+
if (projectRootManager.projectSdk != sdk) {
6774
projectRootManager.projectSdk = sdk
6875
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6976
}
7077
}
7178
}
7279
for (module in ModuleManager.getInstance(project).modules) {
7380
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
81+
if (m.sdk != sdk) {
7582
m.sdk = sdk
7683
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7784
}
7885
}
7986
}
8087
}
81-
}
88+
}

0 commit comments

Comments
 (0)