Skip to content

Commit ef3874c

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

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

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

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@ 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.JavaHomeFinder
15+
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
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

27+
@Suppress("UnstableApiUsage", "OPT_IN_USAGE")
2428
class GitpodProjectManager(
2529
private val project: Project
2630
) {
@@ -29,20 +33,37 @@ class GitpodProjectManager(
2933
configureSdks()
3034
}
3135

32-
/**
33-
* It is a workaround for https://youtrack.jetbrains.com/issue/GTW-88
34-
*/
3536
private fun configureSdks() {
3637
if (application.isHeadlessEnvironment) {
3738
return
3839
}
3940
val pendingSdk = CompletableFuture<Sdk>()
4041
application.invokeLaterOnWriteThread {
4142
application.runWriteAction {
43+
val jdkTable = ProjectJdkTable.getInstance()
44+
4245
try {
43-
ProjectJdkTable.getInstance().preconfigure()
44-
pendingSdk.complete(ProjectJdkTable.getInstance().allJdks.firstOrNull())
46+
var sdk: Sdk? = null
47+
val javaHome = JavaHomeFinder.getFinder().findExistingJdks().firstOrNull()
48+
val sdkType = SdkType.findByName(jdkTable.defaultSdkType.name)
49+
50+
if (javaHome !== null && sdkType != null && JdkUtil.checkForJdk(javaHome)) {
51+
val javaHomeVirtualFile = VirtualFileManager.getInstance().findFileByNioPath(Path.of(javaHome))
52+
53+
if (javaHomeVirtualFile != null) {
54+
sdk = SdkConfigurationUtil.setupSdk(jdkTable.allJdks, javaHomeVirtualFile, sdkType, false, null, null)
55+
}
56+
}
57+
58+
if (sdk != null && jdkTable.findJdk(sdk.name) == null) {
59+
jdkTable.addJdk(sdk)
60+
pendingSdk.complete(sdk)
61+
} else {
62+
application.invokeAndWait { jdkTable.preconfigure() }
63+
pendingSdk.complete(jdkTable.allJdks.firstOrNull())
64+
}
4565
} catch (t: Throwable) {
66+
application.invokeAndWait { jdkTable.preconfigure() }
4667
pendingSdk.completeExceptionally(t)
4768
}
4869
}
@@ -58,24 +79,23 @@ class GitpodProjectManager(
5879
configureSdk(sdk)
5980
}
6081
}
61-
6282
private fun configureSdk(sdk: Sdk) {
6383
application.invokeLaterOnWriteThread {
6484
application.runWriteAction {
6585
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
86+
if (projectRootManager.projectSdk != sdk) {
6787
projectRootManager.projectSdk = sdk
6888
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6989
}
7090
}
7191
}
7292
for (module in ModuleManager.getInstance(project).modules) {
7393
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
94+
if (m.sdk != sdk) {
7595
m.sdk = sdk
7696
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7797
}
7898
}
7999
}
80100
}
81-
}
101+
}

0 commit comments

Comments
 (0)