AA: make paths platform-independent before using JRT file system

^KT-59697 Fixed
This commit is contained in:
Jinseong Jeon
2023-06-27 11:44:28 -07:00
committed by Ilya Kirillov
parent bf1c9774aa
commit 0d19a5b3ea
4 changed files with 12 additions and 7 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.impl.base.util package org.jetbrains.kotlin.analysis.api.impl.base.util
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VfsUtilCore
@@ -38,7 +39,7 @@ object LibraryUtils {
?.let { getAllVirtualFilesFromRoot(it, includeRoot) } ?: emptySet() ?.let { getAllVirtualFilesFromRoot(it, includeRoot) } ?: emptySet()
} }
fun getAllPsiFilesFromTheJar( fun getAllPsiFilesFromJar(
jar: Path, jar: Path,
project: Project, project: Project,
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(), jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
@@ -116,7 +117,9 @@ object LibraryUtils {
val result = mutableListOf<String>() val result = mutableListOf<String>()
if (isModularRuntime(jdkHome)) { 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) val modules = readModulesFromReleaseFile(jdkHome)
if (modules != null) { if (modules != null) {
for (module in modules) { for (module in modules) {
@@ -17,6 +17,7 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.extensions.PluginDescriptor
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.PackageIndex import com.intellij.openapi.roots.PackageIndex
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.* import com.intellij.psi.*
@@ -318,7 +319,7 @@ object StandaloneProjectFactory {
environment: KotlinCoreProjectEnvironment, environment: KotlinCoreProjectEnvironment,
): List<VirtualFile> { ): List<VirtualFile> {
return roots.mapNotNull { path -> return roots.mapNotNull { path ->
val pathString = path.toAbsolutePath().toString() val pathString = FileUtil.toSystemIndependentName(path.toAbsolutePath().toString())
when { when {
pathString.endsWith(JAR_PROTOCOL) -> { pathString.endsWith(JAR_PROTOCOL) -> {
environment.environment.jarFileSystem.findFileByPath(pathString + JAR_SEPARATOR) environment.environment.jarFileSystem.findFileByPath(pathString + JAR_SEPARATOR)
@@ -366,7 +367,9 @@ object StandaloneProjectFactory {
private fun KtBinaryModule.getJavaRoots( private fun KtBinaryModule.getJavaRoots(
environment: KotlinCoreProjectEnvironment, environment: KotlinCoreProjectEnvironment,
): List<JavaRoot> { ): 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 { private fun adjustModulePath(pathString: String): String {
@@ -57,7 +57,7 @@ object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator
private class KtLibraryBinaryModuleFactory : KtModuleFactory { private class KtLibraryBinaryModuleFactory : KtModuleFactory {
override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles {
val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).jar val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).jar
val decompiledFiles = LibraryUtils.getAllPsiFilesFromTheJar(library, project) val decompiledFiles = LibraryUtils.getAllPsiFilesFromJar(library, project)
return KtModuleWithFiles( return KtModuleWithFiles(
KtLibraryModuleImpl( KtLibraryModuleImpl(
@@ -11,7 +11,6 @@ import com.intellij.psi.search.GlobalSearchScope
import java.nio.file.Path import java.nio.file.Path
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils 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.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.KtLibraryModuleImpl
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleImpl import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleImpl
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory
@@ -39,7 +38,7 @@ fun createKtLibrarySourceModule(libraryJar: Path, librarySourcesJar: Path, testM
librarySources = null, librarySources = null,
) )
val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromTheJar(librarySourcesJar, project) val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromJar(librarySourcesJar, project)
val librarySourceKtModule = KtLibrarySourceModuleImpl( val librarySourceKtModule = KtLibrarySourceModuleImpl(
testModule.name, testModule.name,
testModule.targetPlatform, testModule.targetPlatform,