Skip to content

Commit 284750b

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

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

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

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ 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.JdkUtil
1314
import com.intellij.openapi.projectRoots.ProjectJdkTable
1415
import com.intellij.openapi.projectRoots.Sdk
1516
import com.intellij.openapi.roots.ModuleRootModificationUtil
1617
import com.intellij.openapi.roots.ProjectRootManager
18+
import com.intellij.openapi.vfs.VirtualFileManager
1719
import com.intellij.util.application
1820
import kotlinx.coroutines.GlobalScope
1921
import kotlinx.coroutines.future.await
2022
import kotlinx.coroutines.launch
23+
import java.nio.file.Path
2124
import java.util.concurrent.CompletableFuture
2225

2326

@@ -29,19 +32,28 @@ class GitpodProjectManager(
2932
configureSdks()
3033
}
3134

32-
/**
33-
* It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34-
*/
3535
private fun configureSdks() {
3636
if (application.isHeadlessEnvironment) {
3737
return
3838
}
3939
val pendingSdk = CompletableFuture<Sdk>()
4040
application.invokeLaterOnWriteThread {
4141
application.runWriteAction {
42+
val jdkTable = ProjectJdkTable.getInstance()
43+
if (jdkTable.allJdks.isEmpty()) {
44+
jdkTable.preconfigure()
45+
}
4246
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+
}
4557
} catch (t: Throwable) {
4658
pendingSdk.completeExceptionally(t)
4759
}
@@ -58,24 +70,24 @@ class GitpodProjectManager(
5870
configureSdk(sdk)
5971
}
6072
}
61-
73+
// <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="zulu-11" project-jdk-type="JavaSDK" />
6274
private fun configureSdk(sdk: Sdk) {
6375
application.invokeLaterOnWriteThread {
6476
application.runWriteAction {
6577
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
78+
if (projectRootManager.projectSdk != sdk) {
6779
projectRootManager.projectSdk = sdk
6880
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6981
}
7082
}
7183
}
7284
for (module in ModuleManager.getInstance(project).modules) {
7385
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
86+
if (m.sdk != sdk) {
7587
m.sdk = sdk
7688
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7789
}
7890
}
7991
}
8092
}
81-
}
93+
}

0 commit comments

Comments
 (0)