Skip to content

Commit d42868f

Browse files
Bencodesoliviernotteghem
authored andcommitted
More prep for 2.1.10+ (bazelbuild#1301)
1 parent 56b715c commit d42868f

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/JdepsK2Utils.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
package io.bazel.kotlin.plugin.jdeps.k2
22

3+
import io.bazel.kotlin.plugin.jdeps.k2.RefCache.vbseClass
4+
import io.bazel.kotlin.plugin.jdeps.k2.RefCache.vbseGetVirtualFileMethod
35
import org.jetbrains.kotlin.descriptors.SourceElement
46
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
57
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
68
import org.jetbrains.kotlin.name.ClassId
79
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
810

911
private object RefCache {
12+
val vbseClass: Class<*>? by lazy {
13+
runCatching {
14+
Class.forName("org.jetbrains.kotlin.fir.java.VirtualFileBasedSourceElement")
15+
}.getOrNull()
16+
}
17+
18+
val vbseGetVirtualFileMethod by lazy {
19+
vbseClass
20+
?.runCatching {
21+
getMethod("getVirtualFile")
22+
}?.getOrNull()
23+
}
24+
1025
val jbseClass: Class<*>? by lazy {
1126
runCatching {
1227
Class.forName("org.jetbrains.kotlin.fir.java.JavaBinarySourceElement")
@@ -28,8 +43,7 @@ private object RefCache {
2843
* @return whether class is provided by JSM runtime or not
2944
*/
3045
internal fun isJvmClass(className: String): Boolean =
31-
className.startsWith("java") ||
32-
className.startsWith("modules/java.base/java/")
46+
className.startsWith("java") || className.startsWith("modules/java.base/java/")
3347

3448
internal fun DeserializedContainerSource.classId(): ClassId? =
3549
when (this) {
@@ -43,6 +57,9 @@ internal fun SourceElement.binaryClass(): String? =
4357
binaryClass.location
4458
} else if (this is JvmPackagePartSource) {
4559
this.knownJvmBinaryClass?.location
60+
} else if (vbseClass != null && vbseClass!!.isInstance(this)) {
61+
val virtualFile = vbseGetVirtualFileMethod!!.invoke(this)
62+
virtualFile?.javaClass!!.getMethod("getPath").invoke(virtualFile) as? String
4663
} else if (RefCache.jbseClass != null && RefCache.jbseClass!!.isInstance(this)) {
4764
val jClass = RefCache.jbseGetJavaClassMethod!!.invoke(this)
4865
val virtualFile = jClass!!.javaClass.getMethod("getVirtualFile").invoke(jClass)

0 commit comments

Comments
 (0)