mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
Revert "[workspace model] IDEA-372530: add WorkspaceFileIndexContributor.registerFileSetByCondition"
This reverts commit fc83a24b78e726c551d4ae29fac9dafa02226826. GitOrigin-RevId: d123ca00f3cc8cc771550fcc5988cf97a2ea35eb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d5a0831d7c
commit
a7f20db1b2
@@ -523,11 +523,6 @@ private class MyWorkspaceFileSetRegistrar<E : WorkspaceEntity>(contributor: Work
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
rootData.registerFileSet(file, kind, entity as E, customData, false)
|
||||
}
|
||||
|
||||
override fun registerFileSetByCondition(root: VirtualFileUrl, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?, condition: (VirtualFile) -> Boolean) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
rootData.registerFileSet(root, kind, entity as E, customData, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.workspaceModel.core.fileIndex
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.workspace.jps.entities.ExcludeUrlEntity
|
||||
import com.intellij.platform.workspace.storage.EntityStorage
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.testFramework.junit5.RunInEdt
|
||||
import com.intellij.testFramework.junit5.TestApplication
|
||||
import com.intellij.testFramework.junit5.TestDisposable
|
||||
import com.intellij.testFramework.rules.ProjectModelExtension
|
||||
import com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexImpl
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.RegisterExtension
|
||||
|
||||
@TestApplication
|
||||
@RunInEdt(writeIntent = true)
|
||||
class RegisterFileSetByConditionTest {
|
||||
@JvmField
|
||||
@RegisterExtension
|
||||
val projectModel: ProjectModelExtension = ProjectModelExtension()
|
||||
|
||||
private val fileIndex
|
||||
get() = WorkspaceFileIndex.getInstance(projectModel.project)
|
||||
|
||||
private lateinit var module: Module
|
||||
private lateinit var excludedRoot: VirtualFile
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
module = projectModel.createModule()
|
||||
excludedRoot = projectModel.baseProjectDir.newVirtualDirectory("root/exc")
|
||||
ModuleRootModificationUtil.addContentRoot(module, excludedRoot.parent)
|
||||
PsiTestUtil.addExcludedRoot(module, excludedRoot)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `register file set by condition`(@TestDisposable testDisposable: Disposable) {
|
||||
val file = projectModel.baseProjectDir.newVirtualFile("root/a.txt")
|
||||
val fileTxt = projectModel.baseProjectDir.newVirtualFile("root/exc/root/b.txt")
|
||||
val fileJava = projectModel.baseProjectDir.newVirtualFile("root/exc/root/b.java")
|
||||
val fileExe = projectModel.baseProjectDir.newVirtualFile("root/exc/root/b.exe")
|
||||
val excludedRoot = fileTxt.parent
|
||||
assertTrue(fileIndex.isInContent(file))
|
||||
assertFalse(fileIndex.isInContent(excludedRoot))
|
||||
assertFalse(fileIndex.isInContent(fileTxt))
|
||||
assertFalse(fileIndex.isInContent(fileJava))
|
||||
assertFalse(fileIndex.isInContent(fileExe))
|
||||
|
||||
WorkspaceFileIndexImpl.EP_NAME.point.registerExtension(FileByConditionContributor(), testDisposable)
|
||||
assertTrue(fileIndex.isInContent(file))
|
||||
assertFalse(fileIndex.isInContent(excludedRoot))
|
||||
assertTrue(fileIndex.isInContent(fileTxt))
|
||||
assertTrue(fileIndex.isInContent(fileJava))
|
||||
assertFalse(fileIndex.isInContent(fileExe))
|
||||
}
|
||||
|
||||
private class FileByConditionContributor : WorkspaceFileIndexContributor<ExcludeUrlEntity> {
|
||||
override val entityClass: Class<ExcludeUrlEntity>
|
||||
get() = ExcludeUrlEntity::class.java
|
||||
|
||||
override fun registerFileSets(entity: ExcludeUrlEntity, registrar: WorkspaceFileSetRegistrar, storage: EntityStorage) {
|
||||
registrar.registerFileSetByCondition(entity.url.append("root"), WorkspaceFileKind.CONTENT, entity, null) { file ->
|
||||
file.extension == "txt" || file.extension == "java"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -69,7 +69,6 @@
|
||||
- a:registerExclusionPatterns(com.intellij.platform.workspace.storage.url.VirtualFileUrl,java.util.List,com.intellij.platform.workspace.storage.WorkspaceEntity):V
|
||||
- a:registerFileSet(com.intellij.openapi.vfs.VirtualFile,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileKind,com.intellij.platform.workspace.storage.WorkspaceEntity,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetData):V
|
||||
- a:registerFileSet(com.intellij.platform.workspace.storage.url.VirtualFileUrl,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileKind,com.intellij.platform.workspace.storage.WorkspaceEntity,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetData):V
|
||||
- a:registerFileSetByCondition(com.intellij.platform.workspace.storage.url.VirtualFileUrl,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileKind,com.intellij.platform.workspace.storage.WorkspaceEntity,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetData,kotlin.jvm.functions.Function1):V
|
||||
- a:registerNonRecursiveFileSet(com.intellij.platform.workspace.storage.url.VirtualFileUrl,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileKind,com.intellij.platform.workspace.storage.WorkspaceEntity,com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetData):V
|
||||
*:com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetWithCustomData
|
||||
- com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSet
|
||||
|
||||
@@ -219,18 +219,4 @@ interface WorkspaceFileSetRegistrar {
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?,
|
||||
)
|
||||
|
||||
/**
|
||||
* Includes [root] and all files under it which satisfy [condition].
|
||||
* @param kind specify kind which will be assigned to the files
|
||||
* @param entity first parameter of [WorkspaceFileIndexContributor.registerFileSets] must be passed here
|
||||
* @param customData optional custom data which will be associated with the root and can be accessed via [WorkspaceFileSetWithCustomData].
|
||||
*/
|
||||
fun registerFileSetByCondition(
|
||||
root: VirtualFileUrl,
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?,
|
||||
condition: (VirtualFile) -> Boolean,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ internal class NonIncrementalContributors(private val project: Project) {
|
||||
newFileSets.forEach { (root, sets) ->
|
||||
sets.forEach { set ->
|
||||
fileSets.putValue(root, set)
|
||||
val fileSet = set as? StoredWorkspaceFileSet
|
||||
val fileSet = set as? WorkspaceFileSetImpl
|
||||
if (fileSet != null && fileSet.data is JvmPackageRootDataInternal) {
|
||||
fileSetsByPackagePrefix.addFileSet("", fileSet)
|
||||
}
|
||||
@@ -187,7 +187,7 @@ internal class NonIncrementalContributors(private val project: Project) {
|
||||
|
||||
companion object {
|
||||
internal fun isFromAdditionalLibraryRootsProvider(fileSet: WorkspaceFileSet): Boolean {
|
||||
return fileSet.asSafely<StoredWorkspaceFileSet>()?.entityPointer is NonIncrementalMarker
|
||||
return fileSet.asSafely<WorkspaceFileSetImpl>()?.entityPointer is NonIncrementalMarker
|
||||
}
|
||||
|
||||
fun isPlaceholderReference(entityPointer: EntityPointer<WorkspaceEntity>): Boolean {
|
||||
|
||||
@@ -139,12 +139,12 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
if (storedKindMask == StoredFileSetKindMask.ACCEPTED_FILE_SET) {
|
||||
return@addMeasuredTime storedFileSets as WorkspaceFileInternalInfo
|
||||
}
|
||||
val acceptedFileSets = ArrayList<StoredWorkspaceFileSet>()
|
||||
val acceptedFileSets = ArrayList<WorkspaceFileSetImpl>()
|
||||
//copy a mutable variable used from lambda to a 'val' to ensure that kotlinc won't wrap it into IntRef
|
||||
val currentKindMask = acceptedKindsMask
|
||||
//this should be a rare case, so it's ok to use less optimal code here and check 'isUnloaded' again
|
||||
storedFileSets.forEach { fileSet ->
|
||||
if (fileSet is StoredWorkspaceFileSet && fileSet.accepts(currentKindMask, project, file)) {
|
||||
if (fileSet is WorkspaceFileSetImpl && fileSet.accepts(currentKindMask, project, file)) {
|
||||
acceptedFileSets.add(fileSet)
|
||||
}
|
||||
}
|
||||
@@ -184,7 +184,7 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
//forEach call below isn't inlined, so the lambda is stored in a variable to prevent creation of many identical instances (IJPL-14542)
|
||||
val action = { storedFileSet: StoredFileSet ->
|
||||
when (storedFileSet) {
|
||||
is StoredWorkspaceFileSet -> {
|
||||
is WorkspaceFileSetImpl -> {
|
||||
visitor.visitIncludedRoot(storedFileSet, storedFileSet.entityPointer)
|
||||
}
|
||||
is ExcludedFileSet -> Unit
|
||||
@@ -437,20 +437,16 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?) {
|
||||
registerFileSet(root, kind, entity, customData, recursive = true, condition = null)
|
||||
registerFileSet(root, kind, entity, customData, recursive = true)
|
||||
}
|
||||
|
||||
private fun registerFileSet(
|
||||
root: VirtualFileUrl,
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?,
|
||||
root: VirtualFileUrl, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?,
|
||||
recursive: Boolean,
|
||||
condition: ((VirtualFile) -> Boolean)?,
|
||||
) {
|
||||
val rootFile = root.virtualFile
|
||||
if (rootFile != null) {
|
||||
registerFileSet(rootFile, kind, entity, customData, recursive, condition)
|
||||
registerFileSet(rootFile, kind, entity, customData, recursive)
|
||||
}
|
||||
else {
|
||||
nonExistingFilesRegistry.registerUrl(root, entity, storageKind,
|
||||
@@ -459,25 +455,15 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
}
|
||||
|
||||
override fun registerFileSet(root: VirtualFile, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?) {
|
||||
registerFileSet(root, kind, entity, customData, recursive = true, condition = null)
|
||||
registerFileSet(root, kind, entity, customData, recursive = true)
|
||||
}
|
||||
|
||||
private fun registerFileSet(
|
||||
root: VirtualFile,
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?,
|
||||
root: VirtualFile, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?,
|
||||
recursive: Boolean,
|
||||
condition: ((VirtualFile) -> Boolean)?,
|
||||
) {
|
||||
val fileSet = if (condition == null) {
|
||||
WorkspaceFileSetImpl(root, kind, entity.createPointer(), storageKind, customData ?: DummyWorkspaceFileSetData,
|
||||
recursive)
|
||||
}
|
||||
else {
|
||||
WorkspaceFileSetByCondition(root, kind, entity.createPointer(), storageKind, customData ?: DummyWorkspaceFileSetData,
|
||||
condition)
|
||||
}
|
||||
val fileSet = WorkspaceFileSetImpl(root, kind, entity.createPointer(), storageKind, customData ?: DummyWorkspaceFileSetData,
|
||||
recursive)
|
||||
fileSets.putValue(root, fileSet)
|
||||
if (customData is JvmPackageRootDataInternal) {
|
||||
fileSetsByPackagePrefix.addFileSet(customData.packagePrefix, fileSet)
|
||||
@@ -488,11 +474,7 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?) {
|
||||
registerFileSet(file, kind, entity, customData, recursive = false, condition = null)
|
||||
}
|
||||
|
||||
override fun registerFileSetByCondition(root: VirtualFileUrl, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?, condition: (VirtualFile) -> Boolean) {
|
||||
registerFileSet(root, kind, entity, customData, recursive = true, condition)
|
||||
registerFileSet(file, kind, entity, customData, recursive = false)
|
||||
}
|
||||
|
||||
override fun registerExcludedRoot(excludedRoot: VirtualFileUrl, entity: WorkspaceEntity) {
|
||||
@@ -565,7 +547,7 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
kind: WorkspaceFileKind,
|
||||
entity: WorkspaceEntity,
|
||||
customData: WorkspaceFileSetData?) {
|
||||
fileSets.removeValueIf(root) { it is StoredWorkspaceFileSet && isOriginatedFrom(it, entity) }
|
||||
fileSets.removeValueIf(root) { it is WorkspaceFileSetImpl && isOriginatedFrom(it, entity) }
|
||||
if (customData is JvmPackageRootDataInternal) {
|
||||
fileSetsByPackagePrefix.removeByPrefixAndPointer(customData.packagePrefix, entity.createPointer())
|
||||
}
|
||||
@@ -578,10 +560,6 @@ internal class WorkspaceFileIndexDataImpl(
|
||||
registerFileSet(file, kind, entity, customData)
|
||||
}
|
||||
|
||||
override fun registerFileSetByCondition(root: VirtualFileUrl, kind: WorkspaceFileKind, entity: WorkspaceEntity, customData: WorkspaceFileSetData?, condition: (VirtualFile) -> Boolean) {
|
||||
registerFileSet(root, kind, entity, customData)
|
||||
}
|
||||
|
||||
private fun isOriginatedFrom(fileSet: StoredFileSet, entity: WorkspaceEntity): Boolean {
|
||||
return fileSet.entityStorageKind == storageKind && fileSet.entityPointer.isPointerTo(entity)
|
||||
}
|
||||
|
||||
@@ -247,7 +247,7 @@ class WorkspaceFileIndexImpl(private val project: Project) : WorkspaceFileIndexE
|
||||
includeCustomKindSets: Boolean,
|
||||
): WorkspaceFileSet? {
|
||||
return when (val info = getFileInfo(file, honorExclusion, includeContentSets, includeContentNonIndexableSets, includeExternalSets, includeExternalSourceSets, includeCustomKindSets)) {
|
||||
is StoredWorkspaceFileSet -> info
|
||||
is WorkspaceFileSetImpl -> info
|
||||
is MultipleWorkspaceFileSets -> info.find(null)
|
||||
else -> null
|
||||
}
|
||||
@@ -272,7 +272,7 @@ class WorkspaceFileIndexImpl(private val project: Project) : WorkspaceFileIndexE
|
||||
includeCustomKindSets = includeCustomKindSets
|
||||
)
|
||||
return when (info) {
|
||||
is StoredWorkspaceFileSet -> listOf(info)
|
||||
is WorkspaceFileSetImpl -> listOf(info)
|
||||
is MultipleWorkspaceFileSets -> info.fileSets
|
||||
else -> emptyList()
|
||||
}
|
||||
@@ -352,7 +352,7 @@ class WorkspaceFileIndexImpl(private val project: Project) : WorkspaceFileIndexE
|
||||
|
||||
override fun findContainingEntities(file: VirtualFile, honorExclusion: Boolean, includeContentSets: Boolean, includeContentNonIndexableSets: Boolean, includeExternalSets: Boolean, includeExternalSourceSets: Boolean, includeCustomKindSets: Boolean): Collection<WorkspaceEntity> {
|
||||
return when (val fileInfo = getFileInfo(file, honorExclusion, includeContentSets, includeContentNonIndexableSets, includeExternalSets, includeExternalSourceSets, includeCustomKindSets)) {
|
||||
is StoredWorkspaceFileSet -> listOfNotNull(resolveEntity(fileInfo))
|
||||
is WorkspaceFileSetImpl -> listOfNotNull(resolveEntity(fileInfo))
|
||||
is MultipleWorkspaceFileSets -> fileInfo.fileSets.mapNotNull { fileSet ->
|
||||
(fileSet as? StoredFileSet?)?.let { resolveEntity(it) }
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ object WorkspaceFileSetRecognizer {
|
||||
}
|
||||
|
||||
fun getEntityPointer(fileSet: WorkspaceFileSet): EntityPointer<*>? {
|
||||
val entityReference = fileSet.asSafely<StoredWorkspaceFileSet>()?.entityPointer
|
||||
val entityReference = fileSet.asSafely<WorkspaceFileSetImpl>()?.entityPointer
|
||||
if (entityReference == null) return null
|
||||
if (!Registry.`is`("ide.workspace.model.sdk.remove.custom.processing") && LibrariesAndSdkContributors.isPlaceholderReference(entityReference)) return null
|
||||
if (NonIncrementalContributors.isPlaceholderReference(entityReference)) return null
|
||||
@@ -31,7 +31,7 @@ object WorkspaceFileSetRecognizer {
|
||||
}
|
||||
|
||||
fun getLibraryId(fileSet: WorkspaceFileSet, storage: EntityStorage): LibraryId? {
|
||||
val fileSetImpl = fileSet as? StoredWorkspaceFileSet
|
||||
val fileSetImpl = fileSet as? WorkspaceFileSetImpl
|
||||
if (fileSetImpl == null) return null
|
||||
|
||||
val libraryRootFileSetData = fileSetImpl.data as? LibraryRootFileSetData
|
||||
@@ -62,7 +62,7 @@ object WorkspaceFileSetRecognizer {
|
||||
|
||||
fun getSdkId(fileSet: WorkspaceFileSet): SdkId? {
|
||||
return if (Registry.`is`("ide.workspace.model.sdk.remove.custom.processing")) {
|
||||
fileSet.asSafely<StoredWorkspaceFileSet>()?.data?.asSafely<SdkRootFileSetData>()?.sdkId
|
||||
fileSet.asSafely<WorkspaceFileSetImpl>()?.data?.asSafely<SdkRootFileSetData>()?.sdkId
|
||||
}
|
||||
else {
|
||||
LibrariesAndSdkContributors.getSdk(fileSet)?.let { SdkId(it.name, it.sdkType.name) }
|
||||
@@ -74,6 +74,6 @@ object WorkspaceFileSetRecognizer {
|
||||
}
|
||||
|
||||
fun isSourceRoot(fileSet: WorkspaceFileSet): Boolean {
|
||||
return (fileSet as? StoredWorkspaceFileSet)?.data is ModuleSourceRootData
|
||||
return (fileSet as? WorkspaceFileSetImpl)?.data is ModuleSourceRootData
|
||||
}
|
||||
}
|
||||
@@ -91,13 +91,6 @@ internal sealed interface StoredFileSet : StoredFileSetCollection {
|
||||
abstract override fun toString(): String
|
||||
}
|
||||
|
||||
internal sealed interface StoredWorkspaceFileSet : StoredFileSet, WorkspaceFileSetWithCustomData<WorkspaceFileSetData>, WorkspaceFileInternalInfo {
|
||||
fun isUnloaded(project: Project): Boolean
|
||||
fun accepts(acceptedKindMask: Int, project: Project, file: VirtualFile?): Boolean {
|
||||
return acceptedKindMask and kind.toMask() != 0 && !isUnloaded(project)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an actual set of files registered in [WorkspaceFileIndexData].
|
||||
*/
|
||||
@@ -108,11 +101,11 @@ internal class WorkspaceFileSetImpl(
|
||||
override val entityStorageKind: EntityStorageKind,
|
||||
override val data: WorkspaceFileSetData,
|
||||
override val recursive: Boolean = true,
|
||||
) : StoredWorkspaceFileSet {
|
||||
) : WorkspaceFileSetWithCustomData<WorkspaceFileSetData>, StoredFileSet, WorkspaceFileInternalInfo {
|
||||
|
||||
override val fileSets: List<WorkspaceFileSetWithCustomData<*>> get() = listOf(this)
|
||||
|
||||
override fun isUnloaded(project: Project): Boolean {
|
||||
fun isUnloaded(project: Project): Boolean {
|
||||
return (data as? UnloadableFileSetData)?.isUnloaded(project) == true
|
||||
}
|
||||
|
||||
@@ -131,7 +124,7 @@ internal class WorkspaceFileSetImpl(
|
||||
return currentMasks or update
|
||||
}
|
||||
|
||||
override fun accepts(acceptedKindMask: Int, project: Project, file: VirtualFile?): Boolean {
|
||||
fun accepts(acceptedKindMask: Int, project: Project, file: VirtualFile?): Boolean {
|
||||
return acceptedKindMask and kind.toMask() != 0 && !isUnloaded(project) && (recursive || root == file)
|
||||
}
|
||||
|
||||
@@ -211,52 +204,6 @@ private data class TwoWorkspaceFileSets(private val first: WorkspaceFileSetImpl,
|
||||
}
|
||||
}
|
||||
|
||||
internal class WorkspaceFileSetByCondition(
|
||||
override val root: VirtualFile,
|
||||
override val kind: WorkspaceFileKind,
|
||||
override val entityPointer: EntityPointer<WorkspaceEntity>,
|
||||
override val entityStorageKind: EntityStorageKind,
|
||||
override val data: WorkspaceFileSetData,
|
||||
private val condition: (VirtualFile) -> Boolean,
|
||||
) : StoredWorkspaceFileSet {
|
||||
|
||||
override val recursive: Boolean
|
||||
get() = true
|
||||
|
||||
override val fileSets: List<WorkspaceFileSetWithCustomData<*>> get() = listOf(this)
|
||||
|
||||
override fun isUnloaded(project: Project): Boolean {
|
||||
return (data as? UnloadableFileSetData)?.isUnloaded(project) == true
|
||||
}
|
||||
|
||||
override fun add(fileSet: StoredFileSet): StoredFileSetCollection {
|
||||
return MultipleStoredWorkspaceFileSets(mutableListOf(fileSet, this))
|
||||
}
|
||||
|
||||
override fun computeMasks(currentMasks: Int, project: Project, honorExclusion: Boolean, file: VirtualFile): Int {
|
||||
val acceptedKindMask = (currentMasks shr ACCEPTED_KINDS_MASK_SHIFT) and WorkspaceFileKindMask.ALL
|
||||
val update = if (acceptedKindMask and kind.toMask() != 0 && !isUnloaded(project) && condition(file)) {
|
||||
StoredFileSetKindMask.ACCEPTED_FILE_SET
|
||||
}
|
||||
else {
|
||||
StoredFileSetKindMask.IRRELEVANT_FILE_SET
|
||||
}
|
||||
return currentMasks or update
|
||||
}
|
||||
|
||||
override fun findFileSet(condition: (WorkspaceFileSetWithCustomData<*>) -> Boolean): WorkspaceFileSetWithCustomData<*>? {
|
||||
return this.takeIf(condition)
|
||||
}
|
||||
|
||||
override fun findFileSets(condition: (WorkspaceFileSetWithCustomData<*>) -> Boolean): List<WorkspaceFileSetWithCustomData<*>> {
|
||||
return listOfNotNull(findFileSet(condition))
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "WorkspaceFileSetByCondition{root=$root, kind=$kind}"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a generic case with multiple elements in [StoredFileSetCollection].
|
||||
*/
|
||||
@@ -326,8 +273,8 @@ internal class MultipleStoredWorkspaceFileSets(private val storedFileSets: Mutab
|
||||
}
|
||||
}
|
||||
|
||||
internal class MultipleWorkspaceFileSetsImpl(override val fileSets: List<StoredWorkspaceFileSet>) : MultipleWorkspaceFileSets {
|
||||
override fun find(acceptedCustomDataClass: Class<out WorkspaceFileSetData>?): StoredWorkspaceFileSet? {
|
||||
internal class MultipleWorkspaceFileSetsImpl(override val fileSets: List<WorkspaceFileSetImpl>) : MultipleWorkspaceFileSets {
|
||||
override fun find(acceptedCustomDataClass: Class<out WorkspaceFileSetData>?): WorkspaceFileSetImpl? {
|
||||
return fileSets.find { acceptedCustomDataClass == null || acceptedCustomDataClass.isInstance(it.data) }
|
||||
}
|
||||
|
||||
@@ -452,9 +399,9 @@ internal fun <K> MutableMap<K, StoredFileSetCollection>.removeValueIf(key: K, va
|
||||
}
|
||||
}
|
||||
|
||||
internal typealias PackagePrefixStorage = HashMap<String, MultiMap<EntityPointer<WorkspaceEntity>, StoredWorkspaceFileSet>>
|
||||
internal typealias PackagePrefixStorage = HashMap<String, MultiMap<EntityPointer<WorkspaceEntity>, WorkspaceFileSetImpl>>
|
||||
|
||||
internal fun PackagePrefixStorage.addFileSet(packagePrefix: String, fileSet: StoredWorkspaceFileSet) {
|
||||
internal fun PackagePrefixStorage.addFileSet(packagePrefix: String, fileSet: WorkspaceFileSetImpl) {
|
||||
val entityRef2FileSet = getOrPut(packagePrefix) { MultiMap(LinkedHashMap()) }
|
||||
entityRef2FileSet.putValue(fileSet.entityPointer, fileSet)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user