mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
RIDER-90456 check root dir sensitivity when creating wsm
(cherry picked from commit 29df6ca6ae69a9e5c38625fd9d9317ce5521a5f4) IJ-MR-146692 GitOrigin-RevId: cd88ea6cf6b3c698a4daa7626eba613a865d9e9f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
09c25b2e66
commit
c010774a56
@@ -3,11 +3,19 @@
|
||||
|
||||
package com.intellij.workspaceModel.ide
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.io.FileAttributes
|
||||
import com.intellij.openapi.util.io.FileSystemUtil
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.platform.workspace.storage.url.VirtualFileUrl
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
|
||||
fun VirtualFileUrl.isEqualOrParentOf(other: VirtualFileUrl): Boolean = FileUtil.startsWith(other.url.removeSuffix("/"), url.removeSuffix("/"))
|
||||
|
||||
fun VirtualFileUrl.toPath(): Path = Path.of(JpsPathUtil.urlToPath(url))
|
||||
fun VirtualFileUrl.toPath(): Path = Path.of(JpsPathUtil.urlToPath(url))
|
||||
|
||||
val Project.isCaseSensitive: Boolean
|
||||
get() = basePath?.let { File(it) }?.let { FileSystemUtil.readParentCaseSensitivity(it) == FileAttributes.CaseSensitivity.SENSITIVE }
|
||||
?: false
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.intellij.platform.workspace.storage.url.VirtualFileUrl
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Internal
|
||||
class IdeVirtualFileUrlManagerImpl : VirtualFileUrlManagerImpl() {
|
||||
class IdeVirtualFileUrlManagerImpl(isRootDirCaseSensitive: Boolean = false) : VirtualFileUrlManagerImpl(isRootDirCaseSensitive) {
|
||||
override val virtualFileUrlImplementationClass: Class<out VirtualFileUrl>
|
||||
get() = VirtualFileUrlBridge::class.java
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.intellij.workspaceModel.core.fileIndex.EntityStorageKind
|
||||
import com.intellij.workspaceModel.core.fileIndex.WorkspaceFileIndex
|
||||
import com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexImpl
|
||||
import com.intellij.workspaceModel.ide.impl.reactive.WmReactive
|
||||
import com.intellij.workspaceModel.ide.isCaseSensitive
|
||||
import io.opentelemetry.api.metrics.Meter
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
@@ -65,7 +66,7 @@ open class WorkspaceModelImpl(private val project: Project, private val cs: Coro
|
||||
*/
|
||||
private val updatesFlow = MutableSharedFlow<VersionedStorageChange>(replay = 1)
|
||||
|
||||
private val virtualFileManager: VirtualFileUrlManager = IdeVirtualFileUrlManagerImpl()
|
||||
private val virtualFileManager: VirtualFileUrlManager = IdeVirtualFileUrlManagerImpl(project.isCaseSensitive)
|
||||
|
||||
override val currentSnapshot: ImmutableEntityStorage
|
||||
get() = entityStorage.current
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.platform.workspace.storage.impl
|
||||
|
||||
import com.intellij.openapi.util.SystemInfoRt
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.util.containers.CollectionFactory
|
||||
import com.intellij.util.containers.HashingStrategy
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
|
||||
internal class VirtualFileNameStore {
|
||||
internal class VirtualFileNameStore(isRootDirCaseSensitive: Boolean) {
|
||||
private val generator = IntIdGenerator()
|
||||
private val id2NameStore = Int2ObjectOpenHashMap<String>()
|
||||
private val name2IdStore = run {
|
||||
val checkSensitivityEnabled = Registry.`is`("ide.new.project.model.index.case.sensitivity", false)
|
||||
if (checkSensitivityEnabled && !SystemInfoRt.isFileSystemCaseSensitive) return@run CollectionFactory.createCustomHashingStrategyMap<String, IdPerCount>(HashingStrategy.caseInsensitive())
|
||||
return@run CollectionFactory.createSmallMemoryFootprintMap<String, IdPerCount>()
|
||||
}
|
||||
private val name2IdStore: MutableMap<String, IdPerCount> =
|
||||
if (Registry.`is`("ide.new.project.model.index.case.sensitivity", false) && !isRootDirCaseSensitive)
|
||||
CollectionFactory.createCustomHashingStrategyMap(HashingStrategy.caseInsensitive())
|
||||
else
|
||||
CollectionFactory.createSmallMemoryFootprintMap()
|
||||
|
||||
|
||||
fun generateIdForName(name: String): Int {
|
||||
val idPerCount = name2IdStore[name]
|
||||
@@ -77,4 +77,4 @@ internal class IntIdGenerator {
|
||||
fun clear() {
|
||||
generator = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Internal
|
||||
public open class VirtualFileUrlManagerImpl : VirtualFileUrlManager {
|
||||
public open class VirtualFileUrlManagerImpl(isRootDirCaseSensitive: Boolean = false) : VirtualFileUrlManager {
|
||||
private val idGenerator = IntIdGenerator()
|
||||
private var emptyUrl: VirtualFileUrl? = null
|
||||
private val fileNameStore = VirtualFileNameStore()
|
||||
private val fileNameStore = VirtualFileNameStore(isRootDirCaseSensitive)
|
||||
private val id2NodeMapping = Int2ObjectOpenHashMap<FilePathNode>()
|
||||
private val rootNode = FilePathNode(0, 0)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import kotlin.test.assertEquals
|
||||
class VirtualFileNameStoreTest {
|
||||
@Test
|
||||
fun `test 1`() {
|
||||
val store = VirtualFileNameStore()
|
||||
val store = VirtualFileNameStore(false)
|
||||
assertEquals(1, store.generateIdForName("a"))
|
||||
assertEquals(2, store.generateIdForName("b"))
|
||||
assertEquals(3, store.generateIdForName("c"))
|
||||
@@ -16,14 +16,14 @@ class VirtualFileNameStoreTest {
|
||||
|
||||
@Test
|
||||
fun `test 2`() {
|
||||
val store = VirtualFileNameStore()
|
||||
val store = VirtualFileNameStore(false)
|
||||
assertEquals(1, store.generateIdForName("a"))
|
||||
assertEquals(1, store.generateIdForName("a"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test 3`() {
|
||||
val store = VirtualFileNameStore()
|
||||
val store = VirtualFileNameStore(false)
|
||||
assertEquals(1, store.generateIdForName("a"))
|
||||
assertEquals(2, store.generateIdForName("b"))
|
||||
assertEquals(3, store.generateIdForName("c"))
|
||||
|
||||
Reference in New Issue
Block a user