[low level fir] handle jars in LLFitJavaFacadeForBinaries
This commit is contained in:
+11
-2
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
|||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
|
|
||||||
|
|
||||||
internal class LLFirJavaFacadeForBinaries(
|
internal class LLFirJavaFacadeForBinaries(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
builtinTypes: BuiltinTypes,
|
builtinTypes: BuiltinTypes,
|
||||||
@@ -28,13 +29,21 @@ internal class LLFirJavaFacadeForBinaries(
|
|||||||
requireIsInstance<VirtualFileBoundJavaClass>(javaClass)
|
requireIsInstance<VirtualFileBoundJavaClass>(javaClass)
|
||||||
val path = getBinaryPath(javaClass)
|
val path = getBinaryPath(javaClass)
|
||||||
return binaryDependenciesModuleDataProvider.getModuleData(path)
|
return binaryDependenciesModuleDataProvider.getModuleData(path)
|
||||||
?: error("No module data found for ${javaClass.classId} with path $path")
|
?: error("No module data found for ${javaClass.classId} with path $path and virtual file ${javaClass.virtualFile?.path}")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getBinaryPath(javaClass: VirtualFileBoundJavaClass): Path {
|
private fun getBinaryPath(javaClass: VirtualFileBoundJavaClass): Path {
|
||||||
val virtualFile = javaClass.virtualFile
|
val virtualFile = javaClass.virtualFile
|
||||||
?: error("no virtual file for ${javaClass.classId}")
|
?: error("no virtual file for ${javaClass.classId}")
|
||||||
val path = virtualFile.path
|
val path = virtualFile.path
|
||||||
return Paths.get(path)
|
return if (JAR_DELIMITER in path) {
|
||||||
|
Paths.get(path.substringBefore(JAR_DELIMITER) + ".jar")
|
||||||
|
} else {
|
||||||
|
Paths.get(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val JAR_DELIMITER = ".jar!/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user