DirectoryBasedClassFinder: add DirectoryBasedKotlinJavaScriptMetaFileFinder and DirectoryBasedKotlinJavaScriptDataFinder
This commit is contained in:
+28
@@ -30,6 +30,9 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.serialization.ClassData
|
import org.jetbrains.kotlin.serialization.ClassData
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.LocalClassResolver
|
import org.jetbrains.kotlin.serialization.deserialization.LocalClassResolver
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||||
|
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
||||||
|
import org.jetbrains.kotlin.serialization.js.toClassData
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||||
|
|
||||||
class DirectoryBasedClassFinder(
|
class DirectoryBasedClassFinder(
|
||||||
@@ -51,6 +54,19 @@ class DirectoryBasedClassFinder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DirectoryBasedKotlinJavaScriptMetaFileFinder(
|
||||||
|
val packageDirectory: VirtualFile,
|
||||||
|
val directoryPackageFqName: FqName,
|
||||||
|
val nameResolver: NameResolver
|
||||||
|
) {
|
||||||
|
fun findKotlinJavascriptMetaFile(classId: ClassId): VirtualFile? {
|
||||||
|
if (classId.getPackageFqName() != directoryPackageFqName) return null
|
||||||
|
|
||||||
|
val targetName = classId.getRelativeClassName().pathSegments().joinToString(".", postfix = "." + KotlinJavascriptSerializationUtil.CLASS_METADATA_FILE_EXTENSION)
|
||||||
|
return packageDirectory.findChild(targetName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class DirectoryBasedDataFinder(
|
class DirectoryBasedDataFinder(
|
||||||
val classFinder: DirectoryBasedClassFinder,
|
val classFinder: DirectoryBasedClassFinder,
|
||||||
val log: Logger
|
val log: Logger
|
||||||
@@ -66,6 +82,18 @@ class DirectoryBasedDataFinder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DirectoryBasedKotlinJavaScriptDataFinder(
|
||||||
|
val classFinder: DirectoryBasedKotlinJavaScriptMetaFileFinder,
|
||||||
|
val log: Logger
|
||||||
|
) : ClassDataFinder {
|
||||||
|
override fun findClassData(classId: ClassId): ClassData? {
|
||||||
|
val file = classFinder.findKotlinJavascriptMetaFile(classId) ?: return null
|
||||||
|
|
||||||
|
val content = file.contentsToByteArray(false)
|
||||||
|
return content.toClassData(classFinder.nameResolver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
object ResolveEverythingToKotlinAnyLocalClassResolver : LocalClassResolver {
|
object ResolveEverythingToKotlinAnyLocalClassResolver : LocalClassResolver {
|
||||||
override fun resolveLocalClass(classId: ClassId): ClassDescriptor = KotlinBuiltIns.getInstance().getAny()
|
override fun resolveLocalClass(classId: ClassId): ClassDescriptor = KotlinBuiltIns.getInstance().getAny()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user