mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
[workspace model] IDEA-341372 Turn off global entities serialization in unit tests
We leave serialization only for compilation tests GitOrigin-RevId: 427f5f5bcf73eeca5a5ee6d84b7dda013a021074
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e258580a35
commit
bcc0a59478
@@ -85,6 +85,7 @@ public final class CompilerTestUtil {
|
||||
}
|
||||
BuildManager.getInstance().clearState(project);
|
||||
});
|
||||
saveApplicationSettings();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ class SdkTableBridgeImpl: SdkTableImplementationDelegate {
|
||||
@Suppress("RAW_RUN_BLOCKING")
|
||||
override fun saveOnDisk() {
|
||||
runBlocking {
|
||||
(JpsGlobalModelSynchronizer.getInstance() as JpsGlobalModelSynchronizerImpl).saveGlobalEntities()
|
||||
(JpsGlobalModelSynchronizer.getInstance() as JpsGlobalModelSynchronizerImpl).saveSdkEntities()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||
*/
|
||||
class JpsGlobalModelSynchronizerImpl(private val coroutineScope: CoroutineScope) : JpsGlobalModelSynchronizer {
|
||||
private var loadedFromDisk: Boolean = false
|
||||
private val isLibSerializationProhibited: Boolean
|
||||
private val isSerializationProhibited: Boolean
|
||||
get() = !forceEnableLoading && ApplicationManager.getApplication().isUnitTestMode
|
||||
|
||||
override fun loadInitialState(mutableStorage: MutableEntityStorage, initialEntityStorage: VersionedEntityStorage,
|
||||
@@ -76,28 +76,44 @@ class JpsGlobalModelSynchronizerImpl(private val coroutineScope: CoroutineScope)
|
||||
val contentWriter = (ApplicationManager.getApplication().stateStore as ApplicationStoreJpsContentReader).createContentWriter()
|
||||
val entityStorage = GlobalWorkspaceModel.getInstance().entityStorage.current
|
||||
serializers.forEach { serializer ->
|
||||
val entities = entityStorage.entities(serializer.mainEntityClass).toList()
|
||||
LOG.info("Saving global entities ${serializer.mainEntityClass.name} to files")
|
||||
|
||||
val filteredEntities = if (serializer.mainEntityClass == LibraryEntity::class.java) {
|
||||
// We need to filter custom libraries, they will be serialized by the client code and not by the platform
|
||||
entities.filter { it.entitySource is JpsGlobalFileEntitySource }
|
||||
} else entities
|
||||
|
||||
if (serializer.mainEntityClass == SdkEntity::class.java) {
|
||||
assertUnexpectedAdditionalDataModification(entityStorage)
|
||||
}
|
||||
|
||||
if (filteredEntities.isEmpty()) {
|
||||
// Remove empty files
|
||||
serializer.deleteObsoleteFile(serializer.fileUrl.url, contentWriter)
|
||||
} else {
|
||||
serializer.saveEntities(filteredEntities, emptyMap(), entityStorage, contentWriter)
|
||||
}
|
||||
serializeEntities(entityStorage, serializer, contentWriter)
|
||||
}
|
||||
contentWriter.saveSession()
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
suspend fun saveSdkEntities() {
|
||||
val sortedRootTypes = OrderRootType.getSortedRootTypes().mapNotNull { it.sdkRootName }
|
||||
val sdkSerializer = JpsGlobalEntitiesSerializers.createSdkSerializer(VirtualFileUrlManager.getGlobalInstance(), sortedRootTypes) as JpsFileEntityTypeSerializer<WorkspaceEntity>
|
||||
val contentWriter = (ApplicationManager.getApplication().stateStore as ApplicationStoreJpsContentReader).createContentWriter()
|
||||
val entityStorage = GlobalWorkspaceModel.getInstance().entityStorage.current
|
||||
serializeEntities(entityStorage, sdkSerializer, contentWriter)
|
||||
contentWriter.saveSession()
|
||||
}
|
||||
|
||||
private fun serializeEntities(entityStorage: EntityStorage, serializer: JpsFileEntityTypeSerializer<WorkspaceEntity>,
|
||||
contentWriter: JpsAppFileContentWriter) {
|
||||
val entities = entityStorage.entities(serializer.mainEntityClass).toList()
|
||||
LOG.info("Saving global entities ${serializer.mainEntityClass.name} to files")
|
||||
|
||||
val filteredEntities = if (serializer.mainEntityClass == LibraryEntity::class.java) {
|
||||
// We need to filter custom libraries, they will be serialized by the client code and not by the platform
|
||||
entities.filter { it.entitySource is JpsGlobalFileEntitySource }
|
||||
} else entities
|
||||
|
||||
if (serializer.mainEntityClass == SdkEntity::class.java) {
|
||||
assertUnexpectedAdditionalDataModification(entityStorage)
|
||||
}
|
||||
|
||||
if (filteredEntities.isEmpty()) {
|
||||
// Remove empty files
|
||||
serializer.deleteObsoleteFile(serializer.fileUrl.url, contentWriter)
|
||||
} else {
|
||||
serializer.saveEntities(filteredEntities, emptyMap(), entityStorage, contentWriter)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun assertUnexpectedAdditionalDataModification(entityStorage: EntityStorage) {
|
||||
entityStorage.entities(SdkEntity::class.java).forEach { sdkEntity ->
|
||||
val projectJdkImpl = entityStorage.sdkMap.getDataByEntity(sdkEntity) ?: error(
|
||||
@@ -160,10 +176,10 @@ class JpsGlobalModelSynchronizerImpl(private val coroutineScope: CoroutineScope)
|
||||
}
|
||||
|
||||
private fun createSerializers(): List<JpsFileEntityTypeSerializer<WorkspaceEntity>> {
|
||||
if (isSerializationProhibited) return emptyList()
|
||||
val sortedRootTypes = OrderRootType.getSortedRootTypes().mapNotNull { it.sdkRootName }
|
||||
return JpsGlobalEntitiesSerializers.createApplicationSerializers(VirtualFileUrlManager.getGlobalInstance(),
|
||||
sortedRootTypes,
|
||||
!isLibSerializationProhibited)
|
||||
sortedRootTypes)
|
||||
}
|
||||
|
||||
private fun bridgesInitializationCallback(mutableStorage: MutableEntityStorage,
|
||||
|
||||
@@ -14,18 +14,15 @@ object JpsGlobalEntitiesSerializers {
|
||||
private val isSdkBridgeEnabled: Boolean = Registry.`is`("workspace.model.global.sdk.bridge", true)
|
||||
|
||||
fun createApplicationSerializers(virtualFileUrlManager: VirtualFileUrlManager,
|
||||
sortedRootTypes: List<String>,
|
||||
createLibSerializer: Boolean): List<JpsFileEntityTypeSerializer<WorkspaceEntity>> {
|
||||
sortedRootTypes: List<String>): List<JpsFileEntityTypeSerializer<WorkspaceEntity>> {
|
||||
val serializers = mutableListOf<JpsFileEntityTypeSerializer<WorkspaceEntity>>()
|
||||
if (isSdkBridgeEnabled) {
|
||||
serializers.add(createSdkSerializer(virtualFileUrlManager, sortedRootTypes) as JpsFileEntityTypeSerializer<WorkspaceEntity>)
|
||||
}
|
||||
|
||||
if (createLibSerializer) {
|
||||
val globalLibrariesFile = virtualFileUrlManager.fromUrl(PathManager.getOptionsFile(GLOBAL_LIBRARIES_FILE_NAME).absolutePath)
|
||||
val globalLibrariesEntitySource = JpsGlobalFileEntitySource(globalLibrariesFile)
|
||||
serializers.add(JpsGlobalLibrariesFileSerializer(globalLibrariesEntitySource) as JpsFileEntityTypeSerializer<WorkspaceEntity>)
|
||||
}
|
||||
val globalLibrariesFile = virtualFileUrlManager.fromUrl(PathManager.getOptionsFile(GLOBAL_LIBRARIES_FILE_NAME).absolutePath)
|
||||
val globalLibrariesEntitySource = JpsGlobalFileEntitySource(globalLibrariesFile)
|
||||
serializers.add(JpsGlobalLibrariesFileSerializer(globalLibrariesEntitySource) as JpsFileEntityTypeSerializer<WorkspaceEntity>)
|
||||
|
||||
return serializers
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user