[workspace model] Save iml files only for affected modules to avoid changes in unrelated files

GitOrigin-RevId: 5492692bd3f63a16ef7d384d23597893bd59e785
This commit is contained in:
Mikhail Mazurkevich
2024-03-28 14:15:09 +00:00
committed by intellij-monorepo-bot
parent 080e401d22
commit ddcdcf2308
4 changed files with 25 additions and 2 deletions
@@ -485,6 +485,14 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List<JpsDirectory
saveEntities(storage, ImmutableEntityStorage.empty(), allSources, writer)
}
@TestOnly
override fun saveAffectedEntities(storage: EntityStorage, affectedEntitySources: Set<EntitySource>, 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) {
@@ -146,6 +146,9 @@ interface JpsProjectSerializers {
@TestOnly
fun saveAllEntities(storage: EntityStorage, writer: JpsFileContentWriter)
@TestOnly
fun saveAffectedEntities(storage: EntityStorage, affectedEntitySources: Set<EntitySource>, writer: JpsFileContentWriter)
fun saveEntities(storage: EntityStorage, unloadedEntityStorage: EntityStorage, affectedSources: Set<EntitySource>,
writer: JpsFileContentWriter)
@@ -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<EntitySource>, configLocation: JpsProjectConfigLocation) {
val writer = JpsFileContentWriterImpl(configLocation)
saveAffectedEntities(storage, affectedEntitySources, writer)
val modulePathMapping = this.moduleSerializers.keys.filterIsInstance<ExternalModuleImlFileEntitiesSerializer>()
.associate { it.fileUrl.url to it.modulePath.path }
writer.writeFiles(modulePathMapping)
}
internal fun assertDirectoryMatches(actualDir: File, expectedDir: File, filesToIgnore: Set<String>, componentsToIgnore: List<String>) {
val actualFiles = actualDir.walk().filter { it.isFile }.associateBy {
FileUtil.toSystemIndependentName(FileUtil.getRelativePath(actualDir, it)!!)
@@ -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()
}