From 0d19a5b3ea32b3b68dd6a7210505e0b00173ee20 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 27 Jun 2023 11:44:28 -0700 Subject: [PATCH] AA: make paths platform-independent before using JRT file system ^KT-59697 Fixed --- .../kotlin/analysis/api/impl/base/util/LibraryUtils.kt | 7 +++++-- .../base/project/structure/StandaloneProjectFactory.kt | 7 +++++-- .../AnalysisApiFirLibraryBinaryTestConfigurator.kt | 2 +- .../AnalysisApiFirStdlibSourceTestConfigurator.kt | 3 +-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt index c177b4faecb..6acbd3d7414 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.util import com.intellij.openapi.project.Project +import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VfsUtilCore @@ -38,7 +39,7 @@ object LibraryUtils { ?.let { getAllVirtualFilesFromRoot(it, includeRoot) } ?: emptySet() } - fun getAllPsiFilesFromTheJar( + fun getAllPsiFilesFromJar( jar: Path, project: Project, jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(), @@ -116,7 +117,9 @@ object LibraryUtils { val result = mutableListOf() if (isModularRuntime(jdkHome)) { - val jrtBaseUrl: String = StandardFileSystems.JRT_PROTOCOL_PREFIX + jdkHome.toString() + JAR_SEPARATOR + val jrtBaseUrl = "${StandardFileSystems.JRT_PROTOCOL_PREFIX}${ + FileUtil.toSystemIndependentName(jdkHome.toAbsolutePath().toString()) + }$JAR_SEPARATOR" val modules = readModulesFromReleaseFile(jdkHome) if (modules != null) { for (module in modules) { diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt index 0dad9a7a42e..c667c1a2aa0 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt @@ -17,6 +17,7 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.project.Project import com.intellij.openapi.roots.PackageIndex +import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.* @@ -318,7 +319,7 @@ object StandaloneProjectFactory { environment: KotlinCoreProjectEnvironment, ): List { return roots.mapNotNull { path -> - val pathString = path.toAbsolutePath().toString() + val pathString = FileUtil.toSystemIndependentName(path.toAbsolutePath().toString()) when { pathString.endsWith(JAR_PROTOCOL) -> { environment.environment.jarFileSystem.findFileByPath(pathString + JAR_SEPARATOR) @@ -366,7 +367,9 @@ object StandaloneProjectFactory { private fun KtBinaryModule.getJavaRoots( environment: KotlinCoreProjectEnvironment, ): List { - return getVirtualFilesForLibraryRoots(getBinaryRoots(), environment).map { root -> JavaRoot(root, JavaRoot.RootType.BINARY)} + return getVirtualFilesForLibraryRoots(getBinaryRoots(), environment).map { root -> + JavaRoot(root, JavaRoot.RootType.BINARY) + } } private fun adjustModulePath(pathString: String): String { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt index 935f9829e86..54e43084d7a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt @@ -57,7 +57,7 @@ object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator private class KtLibraryBinaryModuleFactory : KtModuleFactory { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).jar - val decompiledFiles = LibraryUtils.getAllPsiFilesFromTheJar(library, project) + val decompiledFiles = LibraryUtils.getAllPsiFilesFromJar(library, project) return KtModuleWithFiles( KtLibraryModuleImpl( diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt index bab3f0a943c..a222a084ae0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt @@ -11,7 +11,6 @@ import com.intellij.psi.search.GlobalSearchScope import java.nio.file.Path import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles -import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryModuleImpl import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleImpl import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory @@ -39,7 +38,7 @@ fun createKtLibrarySourceModule(libraryJar: Path, librarySourcesJar: Path, testM librarySources = null, ) - val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromTheJar(librarySourcesJar, project) + val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromJar(librarySourcesJar, project) val librarySourceKtModule = KtLibrarySourceModuleImpl( testModule.name, testModule.targetPlatform,