save modules before saving project

Also, remove not required anymore beforeSave — beforeSaveComponents is enough
This commit is contained in:
Vladimir Krivosheev
2019-01-07 15:27:58 +01:00
parent 6ac5d86ea1
commit d63710b315
3 changed files with 8 additions and 12 deletions
@@ -134,7 +134,7 @@ abstract class ComponentStoreImpl : IComponentStore {
final override fun save(readonlyFiles: MutableList<SaveSessionAndFile>, isForce: Boolean) {
val errors: MutableList<Throwable> = SmartList<Throwable>()
beforeSaveComponents(errors)
beforeSaveComponents(errors, readonlyFiles)
val saveSessionProducerManager = if (components.isEmpty()) null else SaveSessionProducerManager()
if (saveSessionProducerManager != null) {
@@ -155,7 +155,7 @@ abstract class ComponentStoreImpl : IComponentStore {
CompoundRuntimeException.throwIfNotEmpty(errors)
}
protected open fun beforeSaveComponents(errors: MutableList<Throwable>) {
protected open fun beforeSaveComponents(errors: MutableList<Throwable>, readonlyFiles: MutableList<SaveSessionAndFile>) {
}
protected open fun afterSaveComponents(errors: MutableList<Throwable>, isForce: Boolean) {
@@ -3,6 +3,7 @@ package com.intellij.configurationStore
import com.intellij.configurationStore.schemeManager.SchemeManagerFactoryBase
import com.intellij.openapi.components.SettingsSavingComponent
import com.intellij.openapi.components.impl.stores.SaveSessionAndFile
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.project.isDirectoryBased
@@ -17,7 +18,7 @@ abstract class ComponentStoreWithExtraComponents : ComponentStoreImpl() {
super.initComponent(component, isService)
}
override fun beforeSaveComponents(errors: MutableList<Throwable>) {
override fun beforeSaveComponents(errors: MutableList<Throwable>, readonlyFiles: MutableList<SaveSessionAndFile>) {
// component state uses scheme manager in an ipr project, so, we must save it before
val isIprProject = project?.let { !it.isDirectoryBased } ?: false
if (isIprProject) {
@@ -322,7 +322,7 @@ private open class ProjectStoreImpl(project: Project, private val pathMacroManag
}
}
final override fun beforeSaveComponents(errors: MutableList<Throwable>) {
override fun beforeSaveComponents(errors: MutableList<Throwable>, readonlyFiles: MutableList<SaveSessionAndFile>) {
try {
saveProjectName()
}
@@ -330,12 +330,10 @@ private open class ProjectStoreImpl(project: Project, private val pathMacroManag
LOG.error("Unable to store project name", e)
}
super.beforeSaveComponents(errors)
super.beforeSaveComponents(errors, readonlyFiles)
}
override fun doSave(saveSession: SaveExecutor, readonlyFiles: MutableList<SaveSessionAndFile>, errors: MutableList<Throwable>) {
beforeSave(readonlyFiles)
super.doSave(saveSession, readonlyFiles, errors)
val notifications = NotificationsManager.getNotificationsManager().getNotificationsOfType(UnableToSaveProjectNotification::class.java, project)
@@ -369,9 +367,6 @@ private open class ProjectStoreImpl(project: Project, private val pathMacroManag
throw IComponentStore.SaveCancelledException()
}
}
protected open fun beforeSave(readonlyFiles: MutableList<SaveSessionAndFile>) {
}
}
private fun dropUnableToSaveProjectNotification(project: Project, readOnlyFiles: List<VirtualFile>) {
@@ -387,8 +382,8 @@ private fun dropUnableToSaveProjectNotification(project: Project, readOnlyFiles:
private fun getFilesList(readonlyFiles: List<SaveSessionAndFile>) = readonlyFiles.mapSmart { it.file }
private class ProjectWithModulesStoreImpl(project: Project, pathMacroManager: PathMacroManager) : ProjectStoreImpl(project, pathMacroManager) {
override fun beforeSave(readonlyFiles: MutableList<SaveSessionAndFile>) {
super.beforeSave(readonlyFiles)
override fun beforeSaveComponents(errors: MutableList<Throwable>, readonlyFiles: MutableList<SaveSessionAndFile>) {
super.beforeSaveComponents(errors, readonlyFiles)
for (module in (ModuleManager.getInstance(project)?.modules ?: Module.EMPTY_ARRAY)) {
module.stateStore.save(readonlyFiles)