Skip to content

Commit f4e15cc

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

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

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

Lines changed: 29 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,19 +32,35 @@ 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+
if (sdk != null && jdkTable.findJdk(sdk.name) == null) {
58+
jdkTable.addJdk(sdk)
59+
}
60+
}
61+
}
62+
63+
pendingSdk.complete(sdk ?: jdkTable.allJdks.firstOrNull())
4564
} catch (t: Throwable) {
4665
pendingSdk.completeExceptionally(t)
4766
}
@@ -58,24 +77,23 @@ class GitpodProjectManager(
5877
configureSdk(sdk)
5978
}
6079
}
61-
6280
private fun configureSdk(sdk: Sdk) {
6381
application.invokeLaterOnWriteThread {
6482
application.runWriteAction {
6583
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
84+
if (projectRootManager.projectSdk != sdk) {
6785
projectRootManager.projectSdk = sdk
6886
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6987
}
7088
}
7189
}
7290
for (module in ModuleManager.getInstance(project).modules) {
7391
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
92+
if (m.sdk != sdk) {
7593
m.sdk = sdk
7694
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7795
}
7896
}
7997
}
8098
}
81-
}
99+
}

0 commit comments

Comments
 (0)