mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model] save changes in module groups to modules.xml file (IDEA-257045)
Module groups are saved in .idea/modules.xml so we need to run the corresponding serializer if module groups are changed for some module. GitOrigin-RevId: 856be00ee4d586efac29cfa6c93cb025324ad0db
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0c979af35c
commit
5bb885f0e6
+8
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/foo/foo.iml" filepath="$PROJECT_DIR$/foo/foo.iml" group="group/subGroup" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="EMPTY_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -10,7 +10,6 @@ import com.intellij.testFramework.rules.ProjectModelRule
|
||||
import com.intellij.util.io.assertMatches
|
||||
import com.intellij.util.io.directoryContentOf
|
||||
import com.intellij.util.io.systemIndependentPath
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.ClassRule
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
@@ -41,14 +40,25 @@ class SaveProjectTest {
|
||||
@Test
|
||||
fun `save module with group`() {
|
||||
val module = projectModel.createModule("foo")
|
||||
runWriteActionAndWait {
|
||||
val model = projectModel.moduleManager.modifiableModel
|
||||
model.setModuleGroupPath(module, arrayOf("group"))
|
||||
model.commit()
|
||||
fun setGroupPath(path: Array<String>?) {
|
||||
runWriteActionAndWait {
|
||||
val model = projectModel.moduleManager.modifiableModel
|
||||
model.setModuleGroupPath(module, path)
|
||||
model.commit()
|
||||
}
|
||||
}
|
||||
|
||||
setGroupPath(arrayOf("group"))
|
||||
projectModel.saveProjectState()
|
||||
projectModel.baseProjectDir.root.assertMatches(directoryContentOf(configurationStoreTestDataRoot.resolve("module-in-group")))
|
||||
|
||||
setGroupPath(arrayOf("group", "subGroup"))
|
||||
projectModel.saveProjectState()
|
||||
projectModel.baseProjectDir.root.assertMatches(directoryContentOf(configurationStoreTestDataRoot.resolve("module-in-sub-group")))
|
||||
|
||||
setGroupPath(null)
|
||||
projectModel.saveProjectState()
|
||||
projectModel.baseProjectDir.root.assertMatches(directoryContentOf(configurationStoreTestDataRoot.resolve("single-module")))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+21
-8
@@ -23,6 +23,7 @@ import com.intellij.workspaceModel.storage.WorkspaceEntityStorage
|
||||
import com.intellij.workspaceModel.storage.WorkspaceEntityStorageBuilder
|
||||
import com.intellij.workspaceModel.storage.bridgeEntities.FacetEntity
|
||||
import com.intellij.workspaceModel.storage.bridgeEntities.ModuleEntity
|
||||
import com.intellij.workspaceModel.storage.bridgeEntities.ModuleGroupPathEntity
|
||||
import com.intellij.workspaceModel.storage.url.VirtualFileUrl
|
||||
import com.intellij.workspaceModel.storage.url.VirtualFileUrlManager
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
|
||||
@@ -396,14 +397,26 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List<JpsDirectory
|
||||
}
|
||||
val url = actualFileSource?.let { getActualFileUrl(it) }
|
||||
val internalSource = getInternalFileSource(source)
|
||||
if (url != null && internalSource != null && url !in fileSerializersByUrl.keys
|
||||
&& (ModuleEntity::class.java in entities || FacetEntity::class.java in entities)) {
|
||||
moduleListSerializersByUrl.values.forEach { moduleListSerializer ->
|
||||
if (moduleListSerializer.entitySourceFilter(source)) {
|
||||
val newSerializer = moduleListSerializer.createSerializer(internalSource, virtualFileManager.fromUrl(url), null)
|
||||
fileSerializersByUrl.put(url, newSerializer)
|
||||
moduleSerializers[newSerializer] = moduleListSerializer
|
||||
affectedFileFactories.add(moduleListSerializer)
|
||||
if (url != null && internalSource != null
|
||||
&& (ModuleEntity::class.java in entities || FacetEntity::class.java in entities || ModuleGroupPathEntity::class.java in entities)) {
|
||||
val existingSerializers = fileSerializersByUrl.getValues(url)
|
||||
val moduleGroup = (entities[ModuleGroupPathEntity::class.java]?.first() as? ModuleGroupPathEntity)?.path?.joinToString("/")
|
||||
if (existingSerializers.isEmpty() || existingSerializers.any { it is ModuleImlFileEntitiesSerializer && it.modulePath.group != moduleGroup }) {
|
||||
moduleListSerializersByUrl.values.forEach { moduleListSerializer ->
|
||||
if (moduleListSerializer.entitySourceFilter(source)) {
|
||||
if (existingSerializers.isNotEmpty()) {
|
||||
existingSerializers.forEach {
|
||||
if (it is ModuleImlFileEntitiesSerializer) {
|
||||
moduleSerializers.remove(it)
|
||||
fileSerializersByUrl.remove(url, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
val newSerializer = moduleListSerializer.createSerializer(internalSource, virtualFileManager.fromUrl(url), moduleGroup)
|
||||
fileSerializersByUrl.put(url, newSerializer)
|
||||
moduleSerializers[newSerializer] = moduleListSerializer
|
||||
affectedFileFactories.add(moduleListSerializer)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user