From 5ce0d4c89161a0908f2c53b8bf798dede1772ddc Mon Sep 17 00:00:00 2001 From: Vladimir Lagunov Date: Thu, 27 Jun 2024 12:27:59 +0200 Subject: [PATCH] IJPL-149878 IJent WSL FS refactoring: get rid of interface IjentNioFsStrategy There were two implementations. One of them did nothing. It was easily replaced with a nullable class. GitOrigin-RevId: 0070d7c08c56ef4ccf530d2b13c9d8e1c09585a7 --- .../ijent/nio/toggle/IjentNioFsStrategy.kt | 31 ++++++------------- .../ijent/nio/toggle/IjentWslNioFsToggler.kt | 14 ++++----- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentNioFsStrategy.kt b/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentNioFsStrategy.kt index ce6d7da7684c..6ea4156a414c 100644 --- a/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentNioFsStrategy.kt +++ b/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentNioFsStrategy.kt @@ -10,7 +10,9 @@ import com.intellij.platform.ijent.IjentId import com.intellij.platform.ijent.community.impl.nio.IjentNioFileSystemProvider import com.intellij.platform.ijent.community.impl.nio.telemetry.TracingFileSystemProvider import com.intellij.util.containers.forEachGuaranteed -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.job +import kotlinx.coroutines.launch import java.net.URI import java.nio.file.FileSystem import java.nio.file.FileSystemAlreadyExistsException @@ -18,30 +20,15 @@ import java.nio.file.spi.FileSystemProvider import java.util.concurrent.ConcurrentHashMap import java.util.function.BiConsumer -internal interface IjentWslNioFsToggleStrategy { - fun initialize() - val isInitialized: Boolean - fun enable(distro: WSLDistribution, ijentId: IjentId) - fun disable(distro: WSLDistribution) -} - -internal object FallbackIjentWslNioFsToggleStrategy : IjentWslNioFsToggleStrategy { - override val isInitialized: Boolean = false - override fun initialize(): Unit = Unit - override fun enable(distro: WSLDistribution, ijentId: IjentId): Unit = Unit - override fun disable(distro: WSLDistribution): Unit = Unit -} - -internal class DefaultIjentWslNioFsToggleStrategy( +internal class IjentWslNioFsToggleStrategy( multiRoutingFileSystemProvider: FileSystemProvider, private val coroutineScope: CoroutineScope, -) : IjentWslNioFsToggleStrategy { +) { private val ownFileSystems = OwnFileSystems(multiRoutingFileSystemProvider) - override val isInitialized: Boolean = true + val isInitialized: Boolean = true - @OptIn(ExperimentalCoroutinesApi::class) - override fun initialize() { + fun initialize() { coroutineScope.coroutineContext.job.invokeOnCompletion { ownFileSystems.unregisterAll() } @@ -86,7 +73,7 @@ internal class DefaultIjentWslNioFsToggleStrategy( } } - override fun enable(distro: WSLDistribution, ijentId: IjentId) { + fun enable(distro: WSLDistribution, ijentId: IjentId) { val ijentFsProvider = TracingFileSystemProvider(IjentNioFileSystemProvider.getInstance()) try { ijentFsProvider.newFileSystem(ijentId.uri, null) @@ -110,7 +97,7 @@ internal class DefaultIjentWslNioFsToggleStrategy( } } - override fun disable(distro: WSLDistribution) { + fun disable(distro: WSLDistribution) { ownFileSystems.compute(distro) { _, ownFs, actualFs -> val actualIjentWslFsProvider = actualFs?.provider()?.unwrapIjentWslNioFileSystemProvider() if (actualIjentWslFsProvider != null) { diff --git a/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentWslNioFsToggler.kt b/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentWslNioFsToggler.kt index 10592a6cc01a..fc49742338a8 100644 --- a/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentWslNioFsToggler.kt +++ b/platform/platform-impl/src/com/intellij/execution/wsl/ijent/nio/toggle/IjentWslNioFsToggler.kt @@ -35,35 +35,35 @@ class IjentWslNioFsToggler(@VisibleForTesting val coroutineScope: CoroutineScope } fun enable(distro: WSLDistribution, ijentId: IjentId) { - strategy.enable(distro, ijentId) + strategy?.enable(distro, ijentId) } // TODO Disable when IJent exits. fun disable(distro: WSLDistribution) { - strategy.disable(distro) + strategy?.disable(distro) } private val strategy = run { val defaultProvider = FileSystems.getDefault().provider() when { - !WslIjentAvailabilityService.Companion.getInstance().useIjentForWslNioFileSystem() -> FallbackIjentWslNioFsToggleStrategy + !WslIjentAvailabilityService.Companion.getInstance().useIjentForWslNioFileSystem() -> null defaultProvider.javaClass.name == MultiRoutingFileSystemProvider::class.java.name -> { - DefaultIjentWslNioFsToggleStrategy(defaultProvider, coroutineScope) + IjentWslNioFsToggleStrategy(defaultProvider, coroutineScope) } else -> { logger().warn( "The default filesystem ${FileSystems.getDefault()} is not ${MultiRoutingFileSystemProvider::class.java}" ) - FallbackIjentWslNioFsToggleStrategy + null } } } init { - strategy.initialize() + strategy?.initialize() } - val isInitialized: Boolean get() = strategy.isInitialized + val isInitialized: Boolean get() = strategy?.isInitialized ?: false } \ No newline at end of file