[low level fir] handle jars in LLFitJavaFacadeForBinaries

This commit is contained in:
Ilya Kirillov
2022-04-11 20:10:22 +02:00
parent a5c8a20b69
commit eec61cfd07
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
import java.nio.file.Path
import java.nio.file.Paths
internal class LLFirJavaFacadeForBinaries(
session: FirSession,
builtinTypes: BuiltinTypes,
@@ -28,13 +29,21 @@ internal class LLFirJavaFacadeForBinaries(
requireIsInstance<VirtualFileBoundJavaClass>(javaClass)
val path = getBinaryPath(javaClass)
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 {
val virtualFile = javaClass.virtualFile
?: error("no virtual file for ${javaClass.classId}")
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!/"
}
}