diff --git a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/JpsProjectSerializersImpl.kt b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/JpsProjectSerializersImpl.kt index d6606d6dd5cf..0d36305f7505 100644 --- a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/JpsProjectSerializersImpl.kt +++ b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/JpsProjectSerializersImpl.kt @@ -485,6 +485,14 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List, writer: JpsFileContentWriter) { + moduleListSerializersByUrl.values.forEach { + saveModulesList(it, storage, ImmutableEntityStorage.empty(), writer) + } + saveEntities(storage, ImmutableEntityStorage.empty(), affectedEntitySources, writer) + } + internal fun getActualFileUrl(source: EntitySource): String? { val actualFileSource = getActualFileSource(source) ?: return null return when (actualFileSource) { diff --git a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/jpsFormatEntitiesSerialization.kt b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/jpsFormatEntitiesSerialization.kt index 16e39db19d36..ba9658a35a45 100644 --- a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/jpsFormatEntitiesSerialization.kt +++ b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/serialization/impl/jpsFormatEntitiesSerialization.kt @@ -146,6 +146,9 @@ interface JpsProjectSerializers { @TestOnly fun saveAllEntities(storage: EntityStorage, writer: JpsFileContentWriter) + @TestOnly + fun saveAffectedEntities(storage: EntityStorage, affectedEntitySources: Set, writer: JpsFileContentWriter) + fun saveEntities(storage: EntityStorage, unloadedEntityStorage: EntityStorage, affectedSources: Set, writer: JpsFileContentWriter) diff --git a/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt b/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt index db7f423c14b8..6271aa41cd95 100644 --- a/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt +++ b/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt @@ -43,6 +43,7 @@ import com.intellij.workspaceModel.ide.impl.GlobalWorkspaceModel import junit.framework.AssertionFailedError import kotlinx.coroutines.CoroutineScope import org.jdom.Element +import org.jetbrains.annotations.TestOnly import org.jetbrains.jps.model.serialization.JDomSerializationUtil import org.jetbrains.jps.model.serialization.PathMacroUtil import org.jetbrains.jps.util.JpsPathUtil @@ -129,6 +130,7 @@ internal fun loadProject(configLocation: JpsProjectConfigLocation, } } +@TestOnly fun JpsProjectSerializersImpl.saveAllEntities(storage: EntityStorage, configLocation: JpsProjectConfigLocation) { val writer = JpsFileContentWriterImpl(configLocation) saveAllEntities(storage, writer) @@ -137,6 +139,15 @@ fun JpsProjectSerializersImpl.saveAllEntities(storage: EntityStorage, configLoca writer.writeFiles(modulePathMapping) } +@TestOnly +fun JpsProjectSerializersImpl.saveAffectedEntities(storage: EntityStorage, affectedEntitySources: Set, configLocation: JpsProjectConfigLocation) { + val writer = JpsFileContentWriterImpl(configLocation) + saveAffectedEntities(storage, affectedEntitySources, writer) + val modulePathMapping = this.moduleSerializers.keys.filterIsInstance() + .associate { it.fileUrl.url to it.modulePath.path } + writer.writeFiles(modulePathMapping) +} + internal fun assertDirectoryMatches(actualDir: File, expectedDir: File, filesToIgnore: Set, componentsToIgnore: List) { val actualFiles = actualDir.walk().filter { it.isFile }.associateBy { FileUtil.toSystemIndependentName(FileUtil.getRelativePath(actualDir, it)!!) diff --git a/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/AllIntellijEntitiesGenerationTest.kt b/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/AllIntellijEntitiesGenerationTest.kt index 75167bd8fc4d..5bdfe9da954d 100644 --- a/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/AllIntellijEntitiesGenerationTest.kt +++ b/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/AllIntellijEntitiesGenerationTest.kt @@ -32,7 +32,7 @@ import com.intellij.util.SystemProperties import com.intellij.workspaceModel.ide.impl.IdeVirtualFileUrlManagerImpl import com.intellij.workspaceModel.ide.impl.jps.serialization.CachingJpsFileContentReader import com.intellij.workspaceModel.ide.impl.jps.serialization.SerializationContextForTests -import com.intellij.workspaceModel.ide.impl.jps.serialization.saveAllEntities +import com.intellij.workspaceModel.ide.impl.jps.serialization.saveAffectedEntities import com.intellij.workspaceModel.ide.legacyBridge.impl.java.JAVA_TEST_ROOT_ENTITY_TYPE_ID import junit.framework.AssertionFailedError import kotlinx.coroutines.runBlocking @@ -215,7 +215,8 @@ class AllIntellijEntitiesGenerationTest : CodeGenerationTestBase() { } } if (storageChanged) { - (jpsProjectSerializer as JpsProjectSerializersImpl).saveAllEntities(storage, createProjectConfigLocation()) + val affectedEntitySources = modulesToCheck.map { it.key.first.entitySource }.toSet() + (jpsProjectSerializer as JpsProjectSerializersImpl).saveAffectedEntities(storage, affectedEntitySources, createProjectConfigLocation()) } PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() }