IDEA-CR-54281 make source folder removal thread safe

GitOrigin-RevId: bd36f3611a0096ebda9de0b540c686a33d5a4fe0
This commit is contained in:
Nikita Skvortsov
2019-11-07 02:40:58 +00:00
committed by intellij-monorepo-bot
parent ffcd94bf94
commit d09800bb34
@@ -87,14 +87,16 @@ class SourceFolderManagerImpl(private val project: Project) : SourceFolderManage
sourceFoldersByModule[moduleName]?.sourceFolders
}
private fun unsafeRemoveSourceFolder(url: String) {
val sourceFolder = sourceFolders.remove(url) ?: return
val module = sourceFolder.module
val moduleModel = sourceFoldersByModule[module.name] ?: return
val sourceFolders = moduleModel.sourceFolders
sourceFolders.remove(url)
if (sourceFolders.isEmpty()) {
sourceFoldersByModule.remove(module.name)
private fun removeSourceFolder(url: String) {
synchronized(mutex) {
val sourceFolder = sourceFolders.remove(url) ?: return
val module = sourceFolder.module
val moduleModel = sourceFoldersByModule[module.name] ?: return
val sourceFolders = moduleModel.sourceFolders
sourceFolders.remove(url)
if (sourceFolders.isEmpty()) {
sourceFoldersByModule.remove(module.name)
}
}
}
@@ -126,7 +128,7 @@ class SourceFolderManagerImpl(private val project: Project) : SourceFolderManage
val sourceFolderFile = virtualFileManager.refreshAndFindFileByUrl(sourceFolder.url)
if (sourceFolderFile != null && sourceFolderFile.isValid) {
sourceFoldersToChange.computeIfAbsent(sourceFolder.module) { ArrayList() }.add(Pair(event.file!!, sourceFolder))
synchronized(mutex) { unsafeRemoveSourceFolder(sourceFolder.url) }
removeSourceFolder(sourceFolder.url)
}
}
}
@@ -156,7 +158,7 @@ class SourceFolderManagerImpl(private val project: Project) : SourceFolderManage
val sourceFolderFile = virtualFileManager.refreshAndFindFileByUrl(sourceFolder.url)
if (sourceFolderFile != null && sourceFolderFile.isValid) {
sourceFoldersToChange.computeIfAbsent(sourceFolder.module) { ArrayList() }.add(Pair(sourceFolderFile, sourceFolder))
synchronized(mutex) { unsafeRemoveSourceFolder(sourceFolder.url) }
removeSourceFolder(sourceFolder.url)
}
updateSourceFolders(sourceFoldersToChange)