Commit e242e7e7 authored by Vladimir Krivosheev's avatar Vladimir Krivosheev
Browse files

RemoveScheme action on external change — do not schedule scheme file removing...

RemoveScheme action on external change — do not schedule scheme file removing because file was already removed
parent e97b7d37
Branches unavailable Tags unavailable
No related merge requests found
Showing with 16 additions and 8 deletions
+16 -8
......@@ -12,12 +12,16 @@ internal interface SchemeChangeEvent {
fun execute(schemaLoader: Lazy<SchemeLoader<Any, Any>>, schemeManager: SchemeManagerImpl<Any, Any>)
}
internal fun findExternalizableSchemeByFileName(fileName: String, schemeManager: SchemeManagerImpl<Any, Any>): Any? {
private fun findExternalizableSchemeByFileName(fileName: String, schemeManager: SchemeManagerImpl<Any, Any>): Any? {
return schemeManager.schemes.firstOrNull {
fileName == "${schemeManager.getFileName(it)}${schemeManager.schemeExtension}"
fileName == getSchemeFileName(schemeManager, it)
}
}
internal fun <T : Any> getSchemeFileName(schemeManager: SchemeManagerImpl<T, T>, scheme: T): String {
return "${schemeManager.getFileName(scheme)}${schemeManager.schemeExtension}"
}
internal fun readSchemeFromFile(file: VirtualFile, schemeLoader: SchemeLoader<Any, Any>, schemeManager: SchemeManagerImpl<Any, Any>): Any? {
val fileName = file.name
if (file.isDirectory || !schemeManager.canRead(fileName)) {
......
......@@ -123,8 +123,10 @@ private data class AddScheme(private val file: VirtualFile) : SchemeChangeEvent
private data class RemoveScheme(private val fileName: String) : SchemeChangeEvent {
override fun execute(schemaLoader: Lazy<SchemeLoader<Any, Any>>, schemeManager: SchemeManagerImpl<Any, Any>) {
val scheme = findExternalizableSchemeByFileName(fileName, schemeManager) ?: return
schemeManager.removeScheme(scheme)
// do not schedule scheme file removing because file was already removed
val scheme = schemeManager.removeFirstScheme(isScheduleToDelete = false) {
fileName == getSchemeFileName(schemeManager, it)
} ?: return
schemeManager.processor.onSchemeDeleted(scheme)
}
}
......
......@@ -575,15 +575,17 @@ class SchemeManagerImpl<T : Any, MUTABLE_SCHEME : T>(val fileSpec: String,
override fun findSchemeByName(schemeName: String) = schemes.firstOrNull { processor.getSchemeKey(it) == schemeName }
override fun removeScheme(name: String) = removeFirstScheme { processor.getSchemeKey(it) == name }
override fun removeScheme(name: String) = removeFirstScheme(true) { processor.getSchemeKey(it) == name }
override fun removeScheme(scheme: T) = removeFirstScheme { it === scheme } != null
override fun removeScheme(scheme: T) = removeScheme(scheme, isScheduleToDelete = true)
fun removeScheme(scheme: T, isScheduleToDelete: Boolean) = removeFirstScheme(isScheduleToDelete) { it === scheme } != null
override fun isMetadataEditable(scheme: T) = !schemeListManager.readOnlyExternalizableSchemes.containsKey(processor.getSchemeKey(scheme))
override fun toString() = fileSpec
private fun removeFirstScheme(condition: (T) -> Boolean): T? {
internal fun removeFirstScheme(isScheduleToDelete: Boolean, condition: (T) -> Boolean): T? {
val iterator = schemes.iterator()
for (scheme in iterator) {
if (!condition(scheme)) {
......@@ -596,7 +598,7 @@ class SchemeManagerImpl<T : Any, MUTABLE_SCHEME : T>(val fileSpec: String,
iterator.remove()
if (processor.isExternalizable(scheme)) {
if (isScheduleToDelete && processor.isExternalizable(scheme)) {
schemeToInfo.remove(scheme)?.scheduleDelete(filesToDelete)
}
return scheme
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment