IJent, DevKit: enable the new default FS only if it is in the source code

Otherwise, it's impossible to use Dev Build for branches that don't have MultiRoutingFileSystemProvider, like the branch 241.

GitOrigin-RevId: 247b84e22b2734f2541983df7cef886b7ec4b82d
This commit is contained in:
Vladimir Lagunov
2024-07-02 16:58:21 +02:00
committed by intellij-monorepo-bot
parent a213539214
commit 0fcfb9eacd
2 changed files with 29 additions and 12 deletions

View File

@@ -22,8 +22,10 @@ const val IJENT_BOOT_CLASSPATH_MODULE = "intellij.platform.core.nio.fs"
const val IJENT_WSL_FILE_SYSTEM_REGISTRY_KEY = "wsl.use.remote.agent.for.nio.filesystem"
const val IJENT_REQUIRED_DEFAULT_NIO_FS_PROVIDER_CLASS = "com.intellij.platform.core.nio.fs.MultiRoutingFileSystemProvider"
val ENABLE_IJENT_WSL_FILE_SYSTEM_VMOPTIONS: List<String> = listOf(
"-Djava.nio.file.spi.DefaultFileSystemProvider=com.intellij.platform.core.nio.fs.MultiRoutingFileSystemProvider",
"-Djava.nio.file.spi.DefaultFileSystemProvider=$IJENT_REQUIRED_DEFAULT_NIO_FS_PROVIDER_CLASS",
"-Djava.security.manager=com.intellij.platform.core.nio.fs.CoreBootstrapSecurityManager",
"-D${IJENT_WSL_FILE_SYSTEM_REGISTRY_KEY}=true"
)

View File

@@ -11,9 +11,7 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.project.IntelliJProjectUtil
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.platform.ijent.community.buildConstants.ENABLE_IJENT_WSL_FILE_SYSTEM_VMOPTIONS
import com.intellij.platform.ijent.community.buildConstants.IJENT_BOOT_CLASSPATH_MODULE
import com.intellij.platform.ijent.community.buildConstants.isIjentWslFsEnabledByDefaultForProduct
import com.intellij.platform.ijent.community.buildConstants.*
import com.intellij.util.PlatformUtils
import com.intellij.util.lang.UrlClassLoader
import com.intellij.util.system.CpuArch
@@ -27,9 +25,11 @@ import kotlin.io.path.invariantSeparatorsPathString
internal class DevKitApplicationPatcher : RunConfigurationExtension() {
@Suppress("SpellCheckingInspection")
override fun <T : RunConfigurationBase<*>> updateJavaParameters(configuration: T,
javaParameters: JavaParameters,
runnerSettings: RunnerSettings?) {
override fun <T : RunConfigurationBase<*>> updateJavaParameters(
configuration: T,
javaParameters: JavaParameters,
runnerSettings: RunnerSettings?,
) {
val project = configuration.project
if (!IntelliJProjectUtil.isIntelliJPlatformProject(project)) {
return
@@ -38,7 +38,7 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
return
}
val mainClass = configuration.runClass ?: return
passDataAboutBuiltInServer(javaParameters, project)
val vmParameters = javaParameters.vmParametersList
val module = configuration.configurationModule.module
@@ -91,16 +91,31 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
vmParameters.add("-XX:ReservedCodeCacheSize=512m")
}
if (isIjentWslFsEnabledByDefaultForProduct(vmParameters.getPropertyValue("idea.platform.prefix"))) {
vmParameters.addAll(ENABLE_IJENT_WSL_FILE_SYSTEM_VMOPTIONS)
vmParameters.add("-Xbootclasspath/a:${configuration.workingDirectory}/out/classes/production/$IJENT_BOOT_CLASSPATH_MODULE")
}
enableIjentDefaultFsProvider(project, configuration, vmParameters)
if (isDevBuild) {
updateParametersForDevBuild(javaParameters, configuration, project)
}
}
private fun enableIjentDefaultFsProvider(
project: Project,
configuration: JavaRunConfigurationBase,
vmParameters: ParametersList,
) {
if (!isIjentWslFsEnabledByDefaultForProduct(vmParameters.getPropertyValue("idea.platform.prefix"))) return
// Enable the IJent file system only when the new default FS provider class is available.
// It is required to let actual DevKit plugins work with branches without the FS provider class, like 241.
if (JUnitDevKitPatcher.loaderValid(project, null, IJENT_REQUIRED_DEFAULT_NIO_FS_PROVIDER_CLASS)) {
vmParameters.addAll(ENABLE_IJENT_WSL_FILE_SYSTEM_VMOPTIONS)
vmParameters.add("-Xbootclasspath/a:${configuration.workingDirectory}/out/classes/production/$IJENT_BOOT_CLASSPATH_MODULE")
}
else {
vmParameters.add("-D${IJENT_WSL_FILE_SYSTEM_REGISTRY_KEY}=false")
}
}
private fun updateParametersForDevBuild(javaParameters: JavaParameters, configuration: JavaRunConfigurationBase, project: Project) {
val vmParameters = javaParameters.vmParametersList
if (configuration.beforeRunTasks.none { it.providerId === MakeProjectStepBeforeRun.ID }) {