[Workspace Model] [IDEA-252915] Track the library ids and the sources of these IDs.

GitOrigin-RevId: 4cc58d01c1eeda07766b7823e529555024a8b6ab
This commit is contained in:
Alex Plate
2020-11-02 11:41:19 +00:00
committed by intellij-monorepo-bot
parent 89a9396c43
commit be8f45e07c
8 changed files with 32 additions and 12 deletions
@@ -191,7 +191,8 @@ class JpsProjectModelSynchronizer(private val project: Project) : Disposable {
val tmpBuilder = WorkspaceEntityStorageBuilder.create()
val unloaded = unloadedModulePaths.map { modulePath ->
serializers.findModuleSerializer(modulePath)!!.loadEntities(tmpBuilder, fileContentReader, errorReporter, virtualFileManager)
serializers.findModuleSerializer(modulePath)!!.loadEntities(tmpBuilder, fileContentReader, errorReporter, virtualFileManager,
HashMap())
val moduleEntity = tmpBuilder.resolve(ModuleId(modulePath.moduleName)) ?: return@map null
val pointerManager = VirtualFilePointerManager.getInstance()
@@ -29,7 +29,8 @@ internal class ExternalModuleImlFileEntitiesSerializer(modulePath: ModulePath,
override fun loadEntities(builder: WorkspaceEntityStorageBuilder,
reader: JpsFileContentReader,
errorReporter: ErrorReporter,
virtualFileManager: VirtualFileUrlManager) {
virtualFileManager: VirtualFileUrlManager,
entitiesTrack: MutableMap<Any, Any>) {
}
override fun acceptsSource(entitySource: EntitySource): Boolean {
@@ -76,7 +76,8 @@ internal open class JpsArtifactEntitiesSerializer(override val fileUrl: VirtualF
override fun loadEntities(builder: WorkspaceEntityStorageBuilder,
reader: JpsFileContentReader,
errorReporter: ErrorReporter,
virtualFileManager: VirtualFileUrlManager) {
virtualFileManager: VirtualFileUrlManager,
entitiesTrack: MutableMap<Any, Any>) {
val artifactListElement = reader.loadComponent(fileUrl.url, ARTIFACT_MANAGER_COMPONENT_NAME)
if (artifactListElement == null) return
@@ -77,7 +77,10 @@ internal open class JpsLibraryEntitiesSerializer(override val fileUrl: VirtualFi
get() = LibraryEntity::class.java
override fun loadEntities(builder: WorkspaceEntityStorageBuilder,
reader: JpsFileContentReader, errorReporter: ErrorReporter, virtualFileManager: VirtualFileUrlManager) {
reader: JpsFileContentReader,
errorReporter: ErrorReporter,
virtualFileManager: VirtualFileUrlManager,
entitiesTrack: MutableMap<Any, Any>) {
val libraryTableTag = reader.loadComponent(fileUrl.url, LIBRARY_TABLE_COMPONENT_NAME) ?: return
for (libraryTag in libraryTableTag.getChildren(LIBRARY_TAG)) {
val source = createEntitySource(libraryTag) ?: continue
@@ -90,11 +93,14 @@ internal open class JpsLibraryEntitiesSerializer(override val fileUrl: VirtualFi
|Entity with this library id already exists.
|Library id: $libraryId
|fileUrl: ${fileUrl.presentableUrl}
|Previous file url: ${entitiesTrack[libraryId]}
|library table id: $libraryTableId
|internal entity source: $internalEntitySource
""".trimMargin())
}
entitiesTrack[libraryId] = fileUrl.presentableUrl
loadLibrary(name, libraryTag, libraryTableId, builder, source, virtualFileManager)
}
}
@@ -59,7 +59,7 @@ object JpsProjectEntitiesLoader {
val reader = CachingJpsFileContentReader(configLocation.baseDirectoryUrlString)
val serializer = ModuleListSerializerImpl.createModuleEntitiesSerializer(moduleFile.toVirtualFileUrl(virtualFileManager), null, source,
virtualFileManager)
serializer.loadEntities(builder, reader, errorReporter, virtualFileManager)
serializer.loadEntities(builder, reader, errorReporter, virtualFileManager, HashMap())
}
private fun createProjectEntitiesSerializers(configLocation: JpsProjectConfigLocation,
@@ -186,8 +186,9 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List<JpsDirectory
}
val builder = WorkspaceEntityStorageBuilder.create()
val entitiesTrack = HashMap<Any, Any>()
affectedFileLoaders.forEach {
it.loadEntities(builder, reader, errorReporter, virtualFileManager)
it.loadEntities(builder, reader, errorReporter, virtualFileManager, entitiesTrack)
}
return Pair(changedSources, builder)
}
@@ -198,7 +199,7 @@ class JpsProjectSerializersImpl(directorySerializersFactories: List<JpsDirectory
val tasks = fileSerializersByUrl.values.map { serializer ->
Callable {
val myBuilder = WorkspaceEntityStorageBuilder.create()
serializer.loadEntities(myBuilder, reader, errorReporter, virtualFileManager)
serializer.loadEntities(myBuilder, reader, errorReporter, virtualFileManager, HashMap())
myBuilder
}
}
@@ -36,7 +36,6 @@ import java.nio.file.Paths
import java.util.*
import kotlin.Comparator
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
private const val MODULE_ROOT_MANAGER_COMPONENT_NAME = "NewModuleRootManager"
private const val URL_ATTRIBUTE = "url"
@@ -64,7 +63,10 @@ internal open class ModuleImlFileEntitiesSerializer(internal val modulePath: Mod
override fun hashCode() = modulePath.hashCode()
override fun loadEntities(builder: WorkspaceEntityStorageBuilder,
reader: JpsFileContentReader, errorReporter: ErrorReporter, virtualFileManager: VirtualFileUrlManager) {
reader: JpsFileContentReader,
errorReporter: ErrorReporter,
virtualFileManager: VirtualFileUrlManager,
entitiesTrack: MutableMap<Any, Any>) {
val externalStorageEnabled = externalStorageConfigurationManager?.isEnabled ?: false
if (!externalStorageEnabled) {
val moduleEntity = loadModuleEntity(reader, builder, errorReporter, virtualFileManager)
@@ -4,10 +4,13 @@ package com.intellij.workspaceModel.ide.impl.jps.serialization
import com.intellij.openapi.components.ExpandMacroToPathMap
import com.intellij.openapi.components.PathMacroMap
import com.intellij.openapi.module.impl.ModulePath
import com.intellij.workspaceModel.storage.bridgeEntities.ModuleEntity
import com.intellij.workspaceModel.ide.JpsFileEntitySource
import com.intellij.workspaceModel.ide.JpsProjectConfigLocation
import com.intellij.workspaceModel.storage.*
import com.intellij.workspaceModel.storage.EntitySource
import com.intellij.workspaceModel.storage.WorkspaceEntity
import com.intellij.workspaceModel.storage.WorkspaceEntityStorage
import com.intellij.workspaceModel.storage.WorkspaceEntityStorageBuilder
import com.intellij.workspaceModel.storage.bridgeEntities.ModuleEntity
import com.intellij.workspaceModel.storage.url.VirtualFileUrl
import com.intellij.workspaceModel.storage.url.VirtualFileUrlManager
import org.jdom.Element
@@ -34,8 +37,13 @@ interface JpsFileEntitiesSerializer<E : WorkspaceEntity> {
val internalEntitySource: JpsFileEntitySource
val fileUrl: VirtualFileUrl
val mainEntityClass: Class<E>
/**
* TODO: 02.11.2020 [entitiesTrack] is a temporal solution to find the root cause of IDEA-246753. It should be removed after the fix.
*/
fun loadEntities(builder: WorkspaceEntityStorageBuilder, reader: JpsFileContentReader, errorReporter: ErrorReporter,
virtualFileManager: VirtualFileUrlManager)
virtualFileManager: VirtualFileUrlManager,
entitiesTrack: MutableMap<Any, Any>)
fun saveEntities(mainEntities: Collection<E>,
entities: Map<Class<out WorkspaceEntity>, List<WorkspaceEntity>>,
storage: WorkspaceEntityStorage,