AA: make paths platform-independent before using JRT file system
^KT-59697 Fixed
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 c177b4f..6acbd3d 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 @@
?.let { getAllVirtualFilesFromRoot(it, includeRoot) } ?: emptySet()
}
- fun getAllPsiFilesFromTheJar(
+ fun getAllPsiFilesFromJar(
jar: Path,
project: Project,
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
@@ -116,7 +117,9 @@
val result = mutableListOf<String>()
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 0dad9a7..c667c1a 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.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 @@
environment: KotlinCoreProjectEnvironment,
): List<VirtualFile> {
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 @@
private fun KtBinaryModule.getJavaRoots(
environment: KotlinCoreProjectEnvironment,
): List<JavaRoot> {
- 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 935f982..54e4308 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 @@
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 bab3f0a..a222a08 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 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 @@
librarySources = null,
)
- val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromTheJar(librarySourcesJar, project)
+ val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromJar(librarySourcesJar, project)
val librarySourceKtModule = KtLibrarySourceModuleImpl(
testModule.name,
testModule.targetPlatform,