mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model] refactoring: extract JpsFileDependentEntitySource interface
This is needed to support serialization for projects which store some parts of module configuration in additional files, e.g. Eclipse's .classpath and *.eml files (IDEA-246236). GitOrigin-RevId: 6a3604fc19f4c879af75ded5b27b591487874b55
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b69b771884
commit
477410cd20
+1
-1
@@ -539,7 +539,7 @@ class ModuleManagerComponentBridge(private val project: Project) : ModuleManager
|
||||
}
|
||||
|
||||
internal fun getModuleFilePath(moduleEntity: ModuleEntity): Path {
|
||||
val entitySource = (moduleEntity.entitySource as? JpsImportedEntitySource)?.internalFile ?: moduleEntity.entitySource
|
||||
val entitySource = (moduleEntity.entitySource as? JpsFileDependentEntitySource)?.originalSource ?: moduleEntity.entitySource
|
||||
val directoryPath = when (entitySource) {
|
||||
is JpsFileEntitySource.FileInDirectory -> entitySource.directory.filePath!!
|
||||
// TODO Is this fallback fake path ok?
|
||||
|
||||
+1
-1
@@ -165,7 +165,7 @@ class JpsProjectModelSynchronizer(private val project: Project) : Disposable {
|
||||
childActivity = childActivity.endAndStart("(wm) Add changes to store")
|
||||
WriteAction.runAndWait<RuntimeException> {
|
||||
WorkspaceModel.getInstance(project).updateProjectModel { updater ->
|
||||
updater.replaceBySource({ it is JpsFileEntitySource || it is JpsImportedEntitySource }, builder.toStorage())
|
||||
updater.replaceBySource({ it is JpsFileEntitySource || it is JpsFileDependentEntitySource }, builder.toStorage())
|
||||
}
|
||||
}
|
||||
sourcesToSave.clear()
|
||||
|
||||
+3
-1
@@ -15,6 +15,7 @@ import com.intellij.util.concurrency.AppExecutorUtil
|
||||
import com.intellij.util.containers.BidirectionalMap
|
||||
import com.intellij.util.containers.BidirectionalMultiMap
|
||||
import com.intellij.util.text.UniqueNameGenerator
|
||||
import com.intellij.workspaceModel.ide.JpsFileDependentEntitySource
|
||||
import com.intellij.workspaceModel.ide.JpsFileEntitySource
|
||||
import com.intellij.workspaceModel.ide.JpsImportedEntitySource
|
||||
import com.intellij.workspaceModel.ide.JpsProjectConfigLocation
|
||||
@@ -254,12 +255,13 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List<JpsDirectory
|
||||
source.internalFile
|
||||
}
|
||||
}
|
||||
is JpsFileDependentEntitySource -> source.originalSource
|
||||
is JpsFileEntitySource -> source
|
||||
else -> null
|
||||
}
|
||||
|
||||
private fun getInternalFileSource(source: EntitySource) = when (source) {
|
||||
is JpsImportedEntitySource -> source.internalFile
|
||||
is JpsFileDependentEntitySource -> source.originalSource
|
||||
is JpsFileEntitySource -> source
|
||||
else -> null
|
||||
}
|
||||
|
||||
+7
-4
@@ -11,6 +11,7 @@ import com.intellij.openapi.project.ExternalStorageConfigurationManager
|
||||
import com.intellij.openapi.roots.ExternalProjectSystemRegistry
|
||||
import com.intellij.openapi.util.JDOMUtil
|
||||
import com.intellij.util.isEmpty
|
||||
import com.intellij.workspaceModel.ide.JpsFileDependentEntitySource
|
||||
import com.intellij.workspaceModel.ide.JpsFileEntitySource
|
||||
import com.intellij.workspaceModel.ide.JpsImportedEntitySource
|
||||
import com.intellij.workspaceModel.storage.*
|
||||
@@ -323,7 +324,8 @@ internal open class ModuleImlFileEntitiesSerializer(internal val modulePath: Mod
|
||||
}
|
||||
|
||||
protected open fun acceptsSource(entitySource: EntitySource): Boolean {
|
||||
return entitySource is JpsFileEntitySource || entitySource is JpsImportedEntitySource && !entitySource.storedExternally
|
||||
return entitySource is JpsFileEntitySource ||
|
||||
entitySource is JpsFileDependentEntitySource && (entitySource as? JpsImportedEntitySource)?.storedExternally != true
|
||||
}
|
||||
|
||||
private fun saveModuleEntities(module: ModuleEntity,
|
||||
@@ -584,7 +586,8 @@ internal open class ModuleListSerializerImpl(override val fileUrl: String,
|
||||
get() = "ProjectModuleManager"
|
||||
|
||||
override val entitySourceFilter: (EntitySource) -> Boolean
|
||||
get() = { it is JpsFileEntitySource || it is JpsImportedEntitySource && !it.storedExternally}
|
||||
get() = { it is JpsFileEntitySource ||
|
||||
it is JpsFileDependentEntitySource && (it as? JpsImportedEntitySource)?.storedExternally != true }
|
||||
|
||||
override fun getFileName(entity: ModuleEntity): String {
|
||||
return "${entity.name}.iml"
|
||||
@@ -631,8 +634,8 @@ internal open class ModuleListSerializerImpl(override val fileUrl: String,
|
||||
|
||||
protected open fun getSourceToSave(module: ModuleEntity): JpsFileEntitySource.FileInDirectory? {
|
||||
val entitySource = module.entitySource
|
||||
if (entitySource is JpsImportedEntitySource) {
|
||||
return entitySource.internalFile as? JpsFileEntitySource.FileInDirectory
|
||||
if (entitySource is JpsFileDependentEntitySource) {
|
||||
return entitySource.originalSource as? JpsFileEntitySource.FileInDirectory
|
||||
}
|
||||
return entitySource as? JpsFileEntitySource.FileInDirectory
|
||||
}
|
||||
|
||||
+12
-1
@@ -72,6 +72,14 @@ sealed class JpsFileEntitySource : EntitySource {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents entities which configuration is loaded from an JPS format configuration file (e.g. *.iml, stored in [originalSource]) and some additional configuration
|
||||
* files (e.g. '.classpath' and *.eml files for Eclipse projects).
|
||||
*/
|
||||
interface JpsFileDependentEntitySource {
|
||||
val originalSource: JpsFileEntitySource
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents entities imported from external project system.
|
||||
*/
|
||||
@@ -83,7 +91,10 @@ data class ExternalEntitySource(val displayName: String, val id: String) : Entit
|
||||
*/
|
||||
data class JpsImportedEntitySource(val internalFile: JpsFileEntitySource,
|
||||
val externalSystemId: String,
|
||||
val storedExternally: Boolean) : EntitySource
|
||||
val storedExternally: Boolean) : EntitySource, JpsFileDependentEntitySource {
|
||||
override val originalSource: JpsFileEntitySource
|
||||
get() = internalFile
|
||||
}
|
||||
|
||||
fun JpsImportedEntitySource.toExternalSource(): ProjectModelExternalSource = ExternalProjectSystemRegistry.getInstance().getSourceById(externalSystemId)
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user