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
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<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) {
@@ -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<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 @@ object StandaloneProjectFactory {
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 {
@@ -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(
@@ -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,