diff options
Diffstat (limited to 'platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt')
-rw-r--r-- | platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt b/platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt index fe8c94d07e9f..a7bcbfd7d75d 100644 --- a/platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt +++ b/platform/workspaceModel/jps/tests/testSrc/com/intellij/workspaceModel/ide/impl/jps/serialization/jpsTestUtils.kt @@ -30,6 +30,7 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import java.io.File import java.nio.file.Path +import java.util.function.Supplier internal val sampleDirBasedProjectFile = File(PathManagerEx.getCommunityHomePath(), "jps/model-serialization/testData/sampleProject") internal val sampleFileBasedProjectFile = File(PathManagerEx.getCommunityHomePath(), @@ -54,7 +55,7 @@ internal fun copyAndLoadProject(originalProjectFile: File, virtualFileManager: V val configLocation = toConfigLocation(projectFile.toPath(), virtualFileManager) val serializers = loadProject(configLocation, originalBuilder, virtualFileManager) as JpsProjectSerializersImpl val loadedProjectData = LoadedProjectData(originalBuilder.toStorage(), serializers, configLocation, originalProjectDir) - serializers.checkConsistency(loadedProjectData.projectDirUrl, loadedProjectData.storage, virtualFileManager) + serializers.checkConsistency(loadedProjectData.configLocation, loadedProjectData.storage, virtualFileManager) return loadedProjectData } @@ -74,8 +75,8 @@ internal fun loadProject(configLocation: JpsProjectConfigLocation, originalBuild externalStorageConfigurationManager) } -internal fun JpsProjectSerializersImpl.saveAllEntities(storage: WorkspaceEntityStorage, projectDir: File) { - val writer = JpsFileContentWriterImpl(projectDir) +internal fun JpsProjectSerializersImpl.saveAllEntities(storage: WorkspaceEntityStorage, configLocation: JpsProjectConfigLocation) { + val writer = JpsFileContentWriterImpl(configLocation) saveAllEntities(storage, writer) writer.writeFiles() } @@ -111,14 +112,19 @@ internal fun assertDirectoryMatches(actualDir: File, expectedDir: File, filesToI UsefulTestCase.assertEmpty(expectedFiles.keys - actualFiles.keys) } -internal fun createProjectSerializers(projectDir: File, virtualFileManager: VirtualFileUrlManager): JpsProjectSerializersImpl { - val reader = CachingJpsFileContentReader(VfsUtilCore.pathToUrl(projectDir.systemIndependentPath)) +internal fun createProjectSerializers(projectDir: File, + virtualFileManager: VirtualFileUrlManager): Pair<JpsProjectSerializersImpl, JpsProjectConfigLocation> { + val configLocation = toConfigLocation(projectDir.toPath(), virtualFileManager) + val reader = CachingJpsFileContentReader(configLocation) val externalStoragePath = projectDir.toPath().resolve("cache") - return JpsProjectEntitiesLoader.createProjectSerializers(toConfigLocation(projectDir.toPath(), virtualFileManager), reader, - externalStoragePath, true, virtualFileManager) as JpsProjectSerializersImpl + val serializer = JpsProjectEntitiesLoader.createProjectSerializers(configLocation, reader, externalStoragePath, true, + virtualFileManager) as JpsProjectSerializersImpl + return serializer to configLocation } -fun JpsProjectSerializersImpl.checkConsistency(projectBaseDirUrl: String, storage: WorkspaceEntityStorage, virtualFileManager: VirtualFileUrlManager) { +fun JpsProjectSerializersImpl.checkConsistency(configLocation: JpsProjectConfigLocation, + storage: WorkspaceEntityStorage, + virtualFileManager: VirtualFileUrlManager) { fun getNonNullActualFileUrl(source: EntitySource): String { return getActualFileUrl(source) ?: throw AssertionFailedError("file name is not registered for $source") } @@ -133,7 +139,7 @@ fun JpsProjectSerializersImpl.checkConsistency(projectBaseDirUrl: String, storag moduleListSerializersByUrl.forEach { (url, fileSerializer) -> assertEquals(url, fileSerializer.fileUrl) val fileSerializers = moduleSerializers.getKeysByValue(fileSerializer) ?: emptyList() - val urlsFromFactory = fileSerializer.loadFileList(CachingJpsFileContentReader(projectBaseDirUrl), virtualFileManager) + val urlsFromFactory = fileSerializer.loadFileList(CachingJpsFileContentReader(configLocation), virtualFileManager) assertEquals(urlsFromFactory.map { it.first.url }.sorted(), fileSerializers.map { getNonNullActualFileUrl(it.internalEntitySource) }.sorted()) } @@ -179,7 +185,7 @@ internal fun toConfigLocation(file: Path, virtualFileManager: VirtualFileUrlMana } } -internal class JpsFileContentWriterImpl(private val baseProjectDir: File) : JpsFileContentWriter { +internal class JpsFileContentWriterImpl(private val configLocation: JpsProjectConfigLocation) : JpsFileContentWriter { val urlToComponents = LinkedHashMap<String, LinkedHashMap<String, Element?>>() override fun saveComponent(fileUrl: String, componentName: String, componentTag: Element?) { @@ -188,9 +194,11 @@ internal class JpsFileContentWriterImpl(private val baseProjectDir: File) : JpsF override fun getReplacePathMacroMap(fileUrl: String): PathMacroMap { return if (isModuleFile(JpsPathUtil.urlToFile(fileUrl))) - ModulePathMacroManager.createInstance { JpsPathUtil.urlToOsPath(fileUrl) }.replacePathMap + ModulePathMacroManager.createInstance(configLocation::projectFilePath, Supplier { JpsPathUtil.urlToOsPath(fileUrl) }).replacePathMap else - ProjectPathMacroManager.createInstance({ baseProjectDir.systemIndependentPath }, null).replacePathMap + ProjectPathMacroManager.createInstance(configLocation::projectFilePath, + { JpsPathUtil.urlToPath(configLocation.baseDirectoryUrlString) }, + null).replacePathMap } internal fun writeFiles() { @@ -200,7 +208,7 @@ internal class JpsFileContentWriterImpl(private val baseProjectDir: File) : JpsF val replaceMacroMap = getReplacePathMacroMap(url) val newRootElement = when { isModuleFile(file) -> Element("module") - FileUtil.filesEqual(File(baseProjectDir, ".idea"), file.parentFile.parentFile) -> null + FileUtil.filesEqual(File(JpsPathUtil.urlToPath(configLocation.baseDirectoryUrlString), ".idea"), file.parentFile.parentFile) -> null else -> Element("project") } |