Skip to content

Commit 6baab9a

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

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

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

Lines changed: 30 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,37 @@ 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+
4244
try {
43-
ProjectJdkTable.getInstance().preconfigure()
44-
pendingSdk.complete(ProjectJdkTable.getInstance().allJdks.firstOrNull())
45+
var sdk: Sdk? = null
46+
val javaHome = System.getenv("JAVA_HOME")
47+
val sdkType = SdkType.findByName(jdkTable.defaultSdkType.name)
48+
49+
if (javaHome !== null && sdkType != null && JdkUtil.checkForJdk(javaHome)) {
50+
val javaHomeVirtualFile = VirtualFileManager.getInstance().findFileByNioPath(Path.of(javaHome))
51+
52+
if (javaHomeVirtualFile != null) {
53+
sdk = SdkConfigurationUtil.setupSdk(jdkTable.allJdks, javaHomeVirtualFile, sdkType, false, null, null)
54+
}
55+
}
56+
57+
if (sdk != null && jdkTable.findJdk(sdk.name) == null) {
58+
jdkTable.addJdk(sdk)
59+
pendingSdk.complete(sdk)
60+
} else {
61+
application.invokeAndWait { jdkTable.preconfigure() }
62+
pendingSdk.complete(jdkTable.allJdks.firstOrNull())
63+
}
4564
} catch (t: Throwable) {
65+
application.invokeAndWait { jdkTable.preconfigure() }
4666
pendingSdk.completeExceptionally(t)
4767
}
4868
}
@@ -58,24 +78,23 @@ class GitpodProjectManager(
5878
configureSdk(sdk)
5979
}
6080
}
61-
6281
private fun configureSdk(sdk: Sdk) {
6382
application.invokeLaterOnWriteThread {
6483
application.runWriteAction {
6584
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
85+
if (projectRootManager.projectSdk != sdk) {
6786
projectRootManager.projectSdk = sdk
6887
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6988
}
7089
}
7190
}
7291
for (module in ModuleManager.getInstance(project).modules) {
7392
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
93+
if (m.sdk != sdk) {
7594
m.sdk = sdk
7695
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
7796
}
7897
}
7998
}
8099
}
81-
}
100+
}

0 commit comments

Comments
 (0)