Skip to content

Commit c6ccbe7

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

File tree

1 file changed

+37
-8
lines changed

1 file changed

+37
-8
lines changed

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

Lines changed: 37 additions & 8 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
) {
@@ -40,8 +44,34 @@ class GitpodProjectManager(
4044
application.invokeLaterOnWriteThread {
4145
application.runWriteAction {
4246
try {
43-
ProjectJdkTable.getInstance().preconfigure()
44-
pendingSdk.complete(ProjectJdkTable.getInstance().allJdks.firstOrNull())
47+
val jdkTable = ProjectJdkTable.getInstance()
48+
49+
JavaHomeFinder.getFinder().findExistingJdks().forEach { javaHome ->
50+
val sdkType = SdkType.findByName(jdkTable.defaultSdkType.name)
51+
52+
if (javaHome !== null && sdkType != null && JdkUtil.checkForJdk(javaHome)) {
53+
val javaHomeVirtualFile = VirtualFileManager
54+
.getInstance()
55+
.findFileByNioPath(Path.of(javaHome))
56+
57+
if (javaHomeVirtualFile != null) {
58+
val sdk = SdkConfigurationUtil.setupSdk(
59+
jdkTable.allJdks,
60+
javaHomeVirtualFile,
61+
sdkType,
62+
false,
63+
null,
64+
null
65+
)
66+
67+
if (sdk != null && jdkTable.findJdk(sdk.name) == null) {
68+
jdkTable.addJdk(sdk)
69+
}
70+
}
71+
}
72+
}
73+
74+
pendingSdk.complete(jdkTable.allJdks.firstOrNull())
4575
} catch (t: Throwable) {
4676
pendingSdk.completeExceptionally(t)
4777
}
@@ -58,24 +88,23 @@ class GitpodProjectManager(
5888
configureSdk(sdk)
5989
}
6090
}
61-
6291
private fun configureSdk(sdk: Sdk) {
6392
application.invokeLaterOnWriteThread {
6493
application.runWriteAction {
6594
val projectRootManager = ProjectRootManager.getInstance(project)
66-
if (projectRootManager.projectSdk == null) {
95+
if (projectRootManager.projectSdk != sdk) {
6796
projectRootManager.projectSdk = sdk
6897
thisLogger().warn("gitpod: '${project.name}' project: SDK was auto preconfigured: $sdk")
6998
}
7099
}
71100
}
72101
for (module in ModuleManager.getInstance(project).modules) {
73102
ModuleRootModificationUtil.updateModel(module) { m ->
74-
if (m.sdk == null) {
103+
if (m.sdk != sdk) {
75104
m.sdk = sdk
76105
thisLogger().warn("gitpod: '${module.name}' module: SDK was auto preconfigured: $sdk")
77106
}
78107
}
79108
}
80109
}
81-
}
110+
}

0 commit comments

Comments
 (0)