Skip to content

Commit 526ca96

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

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

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

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@ 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.*
14+
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
1515
import com.intellij.openapi.roots.ModuleRootModificationUtil
1616
import com.intellij.openapi.roots.ProjectRootManager
17+
import com.intellij.openapi.vfs.VirtualFileManager
1718
import com.intellij.util.application
1819
import kotlinx.coroutines.GlobalScope
1920
import kotlinx.coroutines.future.await
2021
import kotlinx.coroutines.launch
22+
import java.nio.file.Path
2123
import java.util.concurrent.CompletableFuture
2224

2325

26+
@Suppress("UnstableApiUsage", "OPT_IN_USAGE")
2427
class GitpodProjectManager(
2528
private val project: Project
2629
) {
@@ -29,20 +32,39 @@ 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 {
41+
application.invokeAndWait { ProjectJdkTable.getInstance().preconfigure() }
42+
4143
application.runWriteAction {
44+
val jdkTable = ProjectJdkTable.getInstance()
45+
4246
try {
43-
ProjectJdkTable.getInstance().preconfigure()
44-
pendingSdk.complete(ProjectJdkTable.getInstance().allJdks.firstOrNull())
47+
var sdk: Sdk? = null
48+
val javaHome = System.getenv("JAVA_HOME")
49+
val sdkType = SdkType.findByName(jdkTable.defaultSdkType.name)
50+
51+
if (javaHome !== null && sdkType != null && JdkUtil.checkForJdk(javaHome)) {
52+
val javaHomeVirtualFile = VirtualFileManager.getInstance().findFileByNioPath(Path.of(javaHome))
53+
54+
if (javaHomeVirtualFile != null) {
55+
sdk = SdkConfigurationUtil.setupSdk(jdkTable.allJdks, javaHomeVirtualFile, sdkType, false, null, null)
56+
}
57+
}
58+
59+
if (sdk != null && jdkTable.findJdk(sdk.name) == null) {
60+
jdkTable.addJdk(sdk)
61+
pendingSdk.complete(sdk)
62+
} else {
63+
jdkTable.preconfigure()
64+
pendingSdk.complete(jdkTable.allJdks.firstOrNull())
65+
}
4566
} catch (t: Throwable) {
67+
jdkTable.preconfigure()
4668
pendingSdk.completeExceptionally(t)
4769
}
4870
}
@@ -58,24 +80,23 @@ class GitpodProjectManager(
5880
configureSdk(sdk)
5981
}
6082
}
61-
6283
private fun configureSdk(sdk: Sdk) {
6384
application.invokeLaterOnWriteThread {
6485
application.runWriteAction {
6586
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
87+
if (projectRootManager.projectSdk != sdk) {
6788
projectRootManager.projectSdk = sdk
6889
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6990
}
7091
}
7192
}
7293
for (module in ModuleManager.getInstance(project).modules) {
7394
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
95+
if (m.sdk != sdk) {
7596
m.sdk = sdk
7697
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7798
}
7899
}
79100
}
80101
}
81-
}
102+
}

0 commit comments

Comments
 (0)